Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé

Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé

Chè Kominote, Atik sa a pral konsantre sou estoke ak rekipere avèk efikasite plizyè santèn milyon ti fichye. Nan etap sa a, yo pwopoze solisyon final la pou sistèm fichye POSIX ki konpatib ak sipò konplè pou kadna, ki gen ladan kadna grap, e sanble menm san beki.

Se konsa, mwen te ekri pwòp sèvè koutim mwen pou objektif sa a.
Nan kou a nan aplikasyon travay sa a, nou jere yo rezoud pwoblèm prensipal la, epi an menm tan an reyalize ekonomi nan espas ki gen kapasite ak RAM, ki sistèm fichye gwoup nou an te san pitye konsome. Aktyèlman, tankou yon kantite fichye danjere pou nenpòt sistèm dosye grap.

Lide a se sa a:

Nan mo senp, ti fichye yo Uploaded atravè sèvè a, yo sove dirèkteman nan achiv la, epi tou li nan li, ak gwo dosye yo mete kòt a kòt. Scheme: 1 folder = 1 achiv, an total nou gen plizyè milyon achiv ak ti fichye, e pa plizyè santèn milyon fichye. Ak tout bagay sa yo aplike konplètman, san okenn scripts oswa mete dosye nan achiv goudwon ​​/ zip.

Mwen pral eseye kenbe li kout, mwen eskize davans si pòs la long.

Tout bagay te kòmanse ak lefèt ke mwen pa t 'kapab jwenn yon sèvè apwopriye nan mond lan ki ta ka sove done yo te resevwa atravè pwotokòl la HTTP dirèkteman nan achiv, san yo pa dezavantaj yo nannan nan achiv konvansyonèl ak depo objè. Ak rezon ki fè rechèch la te gwoup orijin nan 10 serveurs ki te grandi nan yon echèl gwo, nan ki 250,000,000 ti fichye te deja akimile, ak tandans kwasans lan pa t 'pou sispann.

Pou moun ki pa renmen li atik, yon ti dokiman pi fasil:

isit la и isit la.

Ak docker an menm tan an, kounye a gen yon opsyon sèlman ak nginx andedan jis nan ka:

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

Next:

Si gen yon anpil nan dosye, resous enpòtan yo bezwen, ak pati ki pi mal la se ke kèk nan yo ap gaspiye. Pa egzanp, lè w ap itilize yon sistèm fichye gwoup (nan ka sa a, MooseFS), fichye a, kèlkeswa gwosè aktyèl li, toujou pran omwen 64 KB. Sa vle di, pou dosye ki gen 3, 10 oswa 30 KB nan gwosè, yo mande 64 KB sou disk. Si gen yon ka nan yon milya fichye, nou pèdi soti nan 2 a 10 terabytes. Li p ap posib pou kreye nouvo fichye endefiniman, paske MooseFS gen yon limit: pa plis pase 1 milya dola ak yon kopi chak dosye.

Kòm kantite dosye ogmante, anpil RAM bezwen pou metadata. Souvan gwo pil fatra metadata tou kontribye nan mete ak chire nan kondui SSD.

sèvè wZD. Nou mete bagay yo nan lòd sou disk yo.

Sèvè a ekri nan Go. Premye a tout, mwen te bezwen diminye kantite dosye yo. Ki jan fè li? Akòz achiv, men nan ka sa a san yo pa konpresyon, depi dosye mwen yo se jis konprese foto. BoltDB te vin pote sekou, ki te toujou dwe elimine nan enpèfeksyon li yo, sa a reflete nan dokiman an.

An total, olye de yon ka de milya dosye, nan ka mwen an te gen sèlman 10 milyon achiv Bolt kite. Si mwen te gen opòtinite chanje aktyèl estrikti dosye anyè a, li ta posib pou redwi li a apeprè 1 milyon dosye.

Tout ti fichye yo chaje nan achiv Bolt, ki otomatikman resevwa non anyè yo kote yo ye a, epi tout gwo fichye yo rete bò kote achiv yo; pa gen okenn pwen nan anbalaj yo, sa a se customizable. Ti yo achiv, gwo yo pa chanje. Sèvè a travay transparan ak tou de.

Achitekti ak karakteristik sèvè wZD la.

Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé

Sèvè a opere anba sistèm operasyon Linux, BSD, Solaris ak OSX. Mwen sèlman teste pou AMD64 achitekti anba Linux, men li ta dwe travay pou ARM64, PPC64, MIPS64.

Karakteristik prensipal:

  • Multithreading;
  • Multiserver, bay tolerans fay ak balans chaj;
  • Maksimòm transparans pou itilizatè a oswa pwomotè;
  • Metòd HTTP sipòte: GET, HEAD, PUT ak DELETE;
  • Kontwòl konpòtman lekti ak ekri atravè tèt kliyan;
  • Sipò pou lame vityèl fleksib;
  • Sipòte entegrite done CRC lè w ap ekri/li;
  • Tanpon semi-dinamik pou konsomasyon memwa minim ak akor pèfòmans rezo optimal;
  • Difere konpaksyon done;
  • Anplis de sa, yo ofri yon wZA achiv milti-threaded pou migrasyon fichye san yo pa sispann sèvis la.

Eksperyans reyèl:

Mwen te devlope ak teste sèvè a ak achiv sou done vivan pou yon bon bout tan, kounye a li ap opere avèk siksè sou yon gwoup ki gen ladan 250,000,000 ti fichye (foto) ki sitiye nan 15,000,000 anyè sou kondui SATA separe. Yon gwoup 10 sèvè se yon sèvè Orijin ki enstale dèyè yon rezo CDN. Pou sèvis li, yo itilize 2 sèvè Nginx + 2 sèvè wZD.

Pou moun ki deside sèvi ak sèvè sa a, li ta bon pou planifye estrikti anyè a, si sa aplikab, anvan ou itilize. Kite m 'fè yon rezèvasyon touswit ke sèvè a pa gen entansyon pou mete tout bagay nan yon achiv 1 Bolt.

Tès pèfòmans:

Pi piti gwosè fichye zip la, se pi vit operasyon GET ak PUT yo fèt sou li. Ann konpare tan total pou kliyan HTTP ekri nan dosye regilye ak achiv Bolt, ansanm ak lekti. Travay ak dosye gwosè 32 KB, 256 KB, 1024 KB, 4096 KB ak 32768 KB konpare.

Lè w ap travay ak achiv Bolt, yo tcheke entegrite done chak fichye (CRC yo itilize), anvan anrejistreman epi tou apre anrejistreman, lekti sou vole ak rekalkil rive, sa a natirèlman entwodui reta, men bagay prensipal la se sekirite done.

Mwen te fè tès pèfòmans sou kondui SSD, paske tès sou kondui SATA pa montre yon diferans klè.

Grafik ki baze sou rezilta tès yo:

Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé
Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé

Kòm ou ka wè, pou ti fichye diferans nan tan li ak ekri ant dosye achiv ak ki pa achiv yo piti.

Nou jwenn yon foto konplètman diferan lè nou teste lekti ak ekri fichye ki gen 32 MB nan gwosè:

Sere avèk efikasite dè santèn de milyon ti dosye. Solisyon Self-Hébergé

Diferans tan ant lekti fichye yo se nan 5-25 ms. Avèk anrejistreman, bagay yo vin pi mal, diferans lan se sou 150 ms. Men, nan ka sa a pa gen okenn nesesite pou yo telechaje gwo fichye yo; pa gen tou senpleman okenn pwen nan fè sa; yo ka viv separeman ak achiv yo.

* Teknikman, ou ka itilize sèvè sa a pou travay ki mande NoSQL.

Metòd debaz pou travay ak sèvè wZD:

Chaje yon dosye regilye:

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

Téléchargement yon fichye nan achiv Bolt (si paramèt sèvè fmaxsize, ki detèmine gwosè maksimòm fichye ki ka mete nan achiv la, pa depase; si li depase, dosye a ap telechaje kòm dabitid bò kote achiv la):

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

Telechaje yon fichye (si gen dosye ki gen menm non yo sou disk la ak nan achiv la, Lè sa a, lè w ap telechaje, yo bay priyorite pa default nan dosye a dezachiv):

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

Telechaje yon dosye ki soti nan achiv Bolt (fòse):

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

Deskripsyon lòt metòd yo nan dokiman an.

Dokimantasyon wZD
Dokimantasyon wZA

Sèvè a kounye a sèlman sipòte pwotokòl HTTP a; li poko travay ak HTTPS. Metòd POST la tou pa sipòte (li poko deside si li nesesè oswa ou pa).

Nenpòt moun ki fouye nan kòd sous la pral jwenn butterscotch la, se pa tout moun renmen li, men mwen pa t mare kòd prensipal la nan fonksyon yo nan kad entènèt la, eksepte pou okipe a entèwonp, kidonk nan lavni an mwen ka byen vit reekri li pou prèske nenpòt ki. motè.

Pou fè:

  • Devlopman replikatè pwòp ou a ak distribitè + geo pou posiblite pou itilize nan gwo sistèm san yo pa sistèm dosye grap (Tout pou granmoun)
  • Posiblite pou rekiperasyon konplè ranvèse metadata si li konplètman pèdi (si w ap itilize yon distribitè)
  • Pwotokòl natif natal pou kapasite pou itilize koneksyon rezo ki pèsistan ak chofè pou diferan lang pwogramasyon
  • Posiblite avanse pou itilize eleman NoSQL
  • Konpresyon diferan kalite (gzip, zstd, snappy) pou dosye oswa valè andedan achiv Bolt ak pou dosye regilye.
  • Chifre diferan kalite pou dosye oswa valè andedan achiv Bolt ak pou dosye regilye
  • Reta sèvè-bò konvèsyon videyo, ki gen ladan sou GPU

Mwen gen tout bagay, mwen espere sèvè sa a ap itil yon moun, lisans BSD-3, doub copyright, paske si pa t gen konpayi kote mwen travay, sèvè a pa ta ekri. Mwen se sèl devlope. Mwen ta rekonesan pou nenpòt ensèk ak demann karakteristik ou jwenn.

Sous: www.habr.com

Add nouvo kòmantè