በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ

በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ

ውድ ማህበረሰብ፣ ይህ መጣጥፍ በመቶ ሚሊዮኖች የሚቆጠሩ ትንንሽ ፋይሎችን በብቃት ለማከማቸት እና ለማድረስ የሚያገለግል ይሆናል። በዚህ ደረጃ፣ ለ POSIX ተኳሃኝ የፋይል ስርዓቶች የመጨረሻ መፍትሄ ቀርቧል መቆለፊያዎች ፣ ክላስተር መቆለፊያዎችን ጨምሮ ፣ እና ምንም እንኳን ክራንች የሌላቸው የሚመስሉ።

ስለዚህ, ለዚህ ዓላማ, የራሴን ልዩ አገልጋይ ጻፍኩ.
ይህንን ተግባር በመተግበር ሂደት ውስጥ ዋናውን ችግር ለመፍታት ችለናል, በተመሳሳይ ጊዜ የዲስክ ቦታን እና ራም ቁጠባዎችን በማሳካት ክላስተር የፋይል ስርዓታችን ያለ ርህራሄ ይበላል። እንደ እውነቱ ከሆነ, እንደዚህ ያሉ የፋይሎች ቁጥር ለማንኛውም የተከማቸ የፋይል ስርዓት ጎጂ ነው.

ሀሳቡ ይህ ነው -

በቀላል ቃላት ፣ ትናንሽ ፋይሎች በአገልጋዩ በኩል ይሰቀላሉ ፣ በቀጥታ ወደ ማህደሩ ይቀመጣሉ ፣ እና እንዲሁም ከእሱ ያንብቡ ፣ እና ትላልቅ ፋይሎች ጎን ለጎን ይቀመጣሉ። እቅድ፡ 1 ፎልደር = 1 ማህደር በድምሩ ብዙ ሚልዮን ማህደሮች ትንንሽ ፋይሎች አሉን እንጂ ብዙ መቶ ሚሊዮን ፋይሎች አይደሉም። እና ይህ ሁሉ ያለ ምንም ስክሪፕት እና ፋይሎችን ወደ ታር / ዚፕ ማህደሮች በመክፈት ሙሉ በሙሉ ተግባራዊ ይሆናል።

ለማሳጠር እሞክራለሁ፣ ጽሁፉ አቅም ያለው ከሆነ አስቀድሜ ይቅርታ እጠይቃለሁ።

ይህ ሁሉ የጀመረው በኤችቲቲፒ ፕሮቶኮል የተቀበለውን መረጃ በቀጥታ ወደ መዛግብት የሚያስቀምጥ ተስማሚ አገልጋይ በአለም ላይ ማግኘት ባለመቻሌ ነው፣ ስለዚህም በተለመደው ማህደር እና የነገሮች ማከማቻ ውስጥ ምንም አይነት እንቅፋት እንዳይፈጠር። እና የፍለጋው ምክንያት 10 ትናንሽ ፋይሎች ቀድሞውኑ የተከማቸባቸው የ 250,000,000 አገልጋዮች አመጣጥ ስብስብ ነበር ፣ እና የእድገት አዝማሚያው ሊቆም አልቻለም።

ጽሑፎችን ለማንበብ ለማይወዱ እና ትንሽ ሰነዶች ቀላል ናቸው-

እዚህ и እዚህ.

እና ዶከር በተመሳሳይ ጊዜ ፣ ​​አሁን በ nginx ውስጥ ብቻ አማራጭ አለ-

docker run -d --restart=always -e host=localhost -e root=/var/storage 
-v /var/storage:/var/storage --name wzd -p 80:80 eltaline/wzd

ቀጣይ:

ብዙ ፋይሎች ካሉ ጉልህ ሀብቶች ያስፈልጋሉ, እና በጣም የሚያበሳጭ, አንዳንዶቹ ይባክናሉ. ለምሳሌ, ክላስተር የፋይል ስርዓት ሲጠቀሙ (በዚህ ሁኔታ, MooseFS), ፋይሉ, ትክክለኛው መጠን ምንም ይሁን ምን, ሁልጊዜ ቢያንስ 64 ኪ.ባ. ማለትም 3፣ 10 ወይም 30 ኪባ ፋይሎች በዲስክ ላይ 64 ኪባ ያስፈልጋቸዋል። ሩብ ቢሊዮን ፋይሎች ካሉ ከ2 እስከ 10 ቴራባይት እያባከንን ነው። አዲስ ፋይሎችን ላልተወሰነ ጊዜ መፍጠር አይቻልም ፣ ምክንያቱም በተመሳሳዩ MooseFS ውስጥ ገደብ አለ-ከ 1 ቢሊዮን ያልበለጠ የእያንዳንዱ ፋይል አንድ ቅጂ።

የፋይሎች ብዛት ሲጨምር፣ ለሜታዳታ ብዙ ራም ያስፈልግዎታል። እንዲሁም፣ ተደጋጋሚ ትላልቅ ሜታዳታ ቆሻሻዎች ለSSD ድራይቮች እንዲለብሱ አስተዋፅዖ ያደርጋሉ።

wzd አገልጋይ በዲስኮች ላይ ነገሮችን በቅደም ተከተል እናስቀምጣለን.

አገልጋዩ በ Go ውስጥ ተጽፏል. በመጀመሪያ ደረጃ የፋይሎችን ብዛት መቀነስ ነበረብኝ. እንዴት ማድረግ ይቻላል? በማህደር በማስቀመጥ ምክንያት፣ ነገር ግን በዚህ ጉዳይ ላይ ያለ መጭመቂያ፣ ፋይሎቼ ጠንካራ የተቀነሱ ስዕሎች ስለሆኑ። ቦልትዲቢ ለማዳን መጣ፣ አሁንም ድክመቶቹን መከልከል ነበረበት፣ ይህ በሰነዶቹ ውስጥ ተንጸባርቋል።

በአጠቃላይ፣ ከሩብ ቢሊዮን ፋይሎች ይልቅ፣ በእኔ ሁኔታ፣ 10 ሚሊዮን የቦልት ማህደሮች ብቻ ቀርተዋል። ማውጫዎችን በፋይሎች መሙላት አሁን ያለውን መዋቅር ለመለወጥ እድሉ ካገኘሁ ወደ 1 ሚሊዮን ገደማ ፋይሎችን መቀነስ ይቻል ነበር።

ሁሉም ትናንሽ ፋይሎች በቦልት ማህደሮች ውስጥ ተጭነዋል ፣ እነሱ የሚገኙበትን ማውጫዎች ስም በራስ ሰር ይቀበላሉ ፣ እና ሁሉም ትላልቅ ፋይሎች ከማህደሩ አጠገብ ይቀራሉ ፣ እነሱን ማሸግ ምንም ፋይዳ የለውም ፣ ይህ ሊበጅ የሚችል ነው። ትንንሾቹ በማህደር ተቀምጠዋል፣ ትላልቆቹ ሳይቀየሩ ይቀራሉ። አገልጋዩ ከሁለቱም ጋር በግልፅ ይሰራል።

የwZD አገልጋይ አርክቴክቸር እና ባህሪያት።

በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ

አገልጋዩ በሊኑክስ፣ ቢኤስዲ፣ ሶላሪስ እና ኦኤስኤክስ ኦፕሬቲንግ ሲስተሞች ስር ይሰራል። እኔ ለ AMD64 አርክቴክቸር በሊኑክስ ብቻ ነው የሞከርኩት ነገር ግን ለ ARM64፣ PPC64፣ MIPS64 እንዲሁ መስራት አለበት።

ዋና ዋና ባህሪያት:

  • ባለ ብዙ ክር;
  • ባለብዙ አገልጋይ ፣ የስህተት መቻቻል እና ጭነት ማመጣጠን;
  • ለተጠቃሚው ወይም ለገንቢው ከፍተኛው ግልጽነት;
  • የሚደገፉ የኤችቲቲፒ ስልቶች፡ GET፣ HEAD፣ PUT እና Delete;
  • የማንበብ እና የመጻፍ ባህሪን በደንበኛ-ጎን ራስጌዎች ማስተዳደር;
  • በጣም ሊዋቀሩ ለሚችሉ ምናባዊ አስተናጋጆች ድጋፍ;
  • ሲጽፉ / ሲያነቡ ለ CRC ውሂብ ታማኝነት ድጋፍ;
  • ከፊል-ተለዋዋጭ ቋት ለአነስተኛ የማህደረ ትውስታ ፍጆታ እና ጥሩ የአውታረ መረብ አፈፃፀም ማስተካከያ;
  • የዘገየ የውሂብ መጨናነቅ;
  • በተጨማሪም፣ አገልግሎቱን ሳያቋርጥ ፋይሎችን ለማዛወር ባለ ብዙ ክር ያለው wZA መዝገብ ቤት ይቀርባል።

እውነተኛ ልምድ፡-

አገልጋዩን እና ማህደርን በቀጥታ ዳታ ላይ እየሰራሁ እና እየሞከርኩ ለረጅም ጊዜ ቆይቻለሁ፣ አሁን በተሳካ ሁኔታ በ250,000,000 ዳይሬክቶሬቶች በተለየ SATA ዲስኮች 15,000,000 ትንንሽ ፋይሎችን (ፎቶዎችን) ባካተተ ክላስተር እየሰራ ነው። የ10 አገልጋዮች ስብስብ ከCDN አውታረ መረብ ጀርባ የተጫነ ኦሪጅናል አገልጋይ ነው። የሚቀርበው በ2 Nginx አገልጋዮች + 2 wZD አገልጋዮች ነው።

ይህን አገልጋይ ለመጠቀም ለሚወስኑ ሰዎች፣ አስፈላጊ ከሆነ ከመጠቀምዎ በፊት የማውጫውን መዋቅር ማቀድ ተገቢ ነው። አገልጋዩ ሁሉንም ነገር ወደ 1 ቦልት መዝገብ ለመጨበጥ ያልተነደፈ መሆኑን ወዲያውኑ አስይዘዋለሁ።

የአፈጻጸም ሙከራ፡-

በማህደር የተቀመጠው ፋይሉ አነስ ባለ መጠን፣ የ GET እና የPUT ስራዎች በፍጥነት ይከናወናሉ። የኤችቲቲፒ ደንበኛ የተጻፈበትን ጠቅላላ ጊዜ ከመደበኛ ፋይሎች እና ከቦልት ማህደሮች እንዲሁም ከማንበብ ጋር እናወዳድር። ስራን ከ32 ኪባ፣ 256 ኪባ፣ 1024 ኪባ፣ 4096 ኪባ እና 32768 ኪባ ፋይሎች ጋር ያወዳድራል።

ከቦልት ማህደሮች ጋር በሚሰሩበት ጊዜ የእያንዳንዱ ፋይል የመረጃ ትክክለኛነት ይጣራል (ሲአርሲ ጥቅም ላይ ይውላል) ፣ ከመፃፍዎ በፊት እና እንዲሁም ከመፃፍ በኋላ ፣ በራሪ ላይ ይነበባል እና እንደገና ይሰላል ፣ ይህ በተፈጥሮ መዘግየቶችን ያስተዋውቃል ፣ ግን ዋናው ነገር የመረጃ ደህንነት ነው።

ፈተናዎች በSATA ድራይቮች ላይ ግልጽ የሆነ ልዩነት ስለሌላቸው የአፈጻጸም ሙከራዎችን በኤስኤስዲዎች ላይ አከናውኛለሁ።

በፈተና ውጤቶች ላይ የተመሰረቱ ግራፎች፡-

በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ
በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ

እንደሚመለከቱት ፣ ለትንንሽ ፋይሎች ፣ በማህደር ውስጥ በተቀመጡ እና ባልተቀመጡ ፋይሎች መካከል ያለው የንባብ እና የመፃፍ ጊዜ ልዩነት ትንሽ ነው።

32 ሜባ ፋይሎችን ለማንበብ እና ለመጻፍ ስንሞክር ፍጹም የተለየ ምስል እናገኛለን።

በመቶ ሚሊዮኖች የሚቆጠሩ ትናንሽ ፋይሎችን በብቃት ማከማቸት። በራስ የሚስተናገዱ መፍትሔ

ፋይሎችን በማንበብ መካከል ያለው የጊዜ ልዩነት ከ5-25 ሚሴ ውስጥ ነው። ነገሮች በመቅዳት የከፋ ናቸው, ልዩነቱ ወደ 150 ms ያህል ነው. ነገር ግን በዚህ ሁኔታ, ትላልቅ ፋይሎችን መስቀል አያስፈልግም, በቀላሉ ትርጉም አይሰጥም, ከማህደሮች ተለይተው ሊኖሩ ይችላሉ.

*በቴክኒክ፣ ይህ አገልጋይ NoSQL ለሚፈልጉ ተግባራትም ሊያገለግል ይችላል።

ከwZD አገልጋይ ጋር ለመስራት መሰረታዊ ዘዴዎች

መደበኛ ፋይል በመጫን ላይ፡-

curl -X PUT --data-binary @test.jpg http://localhost/test/test.jpg

ፋይልን ወደ ቦልት ማህደር መስቀል (በማህደሩ ውስጥ ሊካተት የሚችለውን ከፍተኛውን የፋይል መጠን የሚወስነው የfmaxsize አገልጋይ መለኪያው ካላለፈ፣ ካለፈ ፋይሉ እንደተለመደው ከማህደሩ ቀጥሎ ይጫናል።)

curl -X PUT -H "Archive: 1" --data-binary @test.jpg http://localhost/test/test.jpg

ፋይልን ማውረድ (በዲስክ እና በማህደሩ ውስጥ ተመሳሳይ ስሞች ያላቸው ፋይሎች ካሉ ፣ ሲወርዱ ቅድሚያ የሚሰጠው በነባሪነት ላልታሰረ ፋይል ነው)

curl -o test.jpg http://localhost/test/test.jpg

ፋይልን ከቦልት ማህደር አውርድ (በግዳጅ)፡-

curl -o test.jpg -H "FromArchive: 1" http://localhost/test/test.jpg

ሌሎች ዘዴዎች በሰነዱ ውስጥ ተገልጸዋል.

wZD ሰነድ
wZA ሰነድ

አገልጋዩ እስካሁን የኤችቲቲፒ ፕሮቶኮልን ብቻ ነው የሚደግፈው፣ እስካሁን ከኤችቲቲፒኤስ ጋር አይሰራም። የPOST ዘዴው እንዲሁ አይደገፍም (አስፈላጊ መሆን አለመሆኑ ገና አልተወሰነም)።

ወደ ምንጭ ኮድ የሚቆፍር ማንም ሰው እዚያ ቶፊ ያገኛል ፣ ሁሉም ሰው አይወደውም ፣ ግን ዋናውን ኮድ ከድር ማዕቀፍ ተግባራት ጋር አላያያዝኩም ፣ ከአቋራጭ ተቆጣጣሪ በስተቀር ፣ ስለሆነም ለወደፊቱ ማንኛውንም ሞተር በፍጥነት እንደገና መፃፍ እችላለሁ ። .

ለመስራት:

  • ያለ ስብስብ FS (ለአዋቂዎች ሁሉም ነገር) በትላልቅ ስርዓቶች ውስጥ ለመጠቀም የራስዎን ማባዣ እና አከፋፋይ + ጂኦ ማዳበር
  • የሜታዳታ ሙሉ በሙሉ ከጠፋባቸው (አከፋፋይ በሚጠቀሙበት ጊዜ) ሙሉ በሙሉ ወደነበረበት የመመለስ እድሉ
  • ለተለያዩ የፕሮግራም አወጣጥ ቋንቋዎች የማያቋርጥ የአውታረ መረብ ግንኙነቶችን እና ነጂዎችን የመጠቀም ችሎታ ቤተኛ ፕሮቶኮል
  • የ NoSQL ክፍልን የመጠቀም የተራዘሙ እድሎች
  • በቦልት መዛግብት ውስጥ ላሉ ፋይሎች ወይም እሴቶች እና ለመደበኛ ፋይሎች የተለያዩ አይነቶች (gzip፣ zstd፣ snappy) ማመቂያዎች
  • በቦልት መዛግብት ውስጥ ላሉ ፋይሎች ወይም እሴቶች እና ለመደበኛ ፋይሎች የተለያዩ ዓይነቶች ምስጠራ
  • በጂፒዩ ላይ ጨምሮ የዘገየ የአገልጋይ-ጎን ቪዲዮ ልወጣ

ሁሉም ነገር አለኝ ይህ አገልጋይ ለአንድ ሰው ጠቃሚ ነው ብዬ ተስፋ አደርጋለሁ, BSD-3 ፍቃድ, ድርብ የቅጂ መብት, ምክንያቱም እኔ የምሰራበት ኩባንያ ከሌለ, አገልጋዩ አይጻፍም ነበር. እኔ ብቻ ነኝ ገንቢ። ለተገኙት ስህተቶች እና የባህሪ ጥያቄዎች አመስጋኝ ነኝ።

ምንጭ: hab.com

አስተያየት ያክሉ