Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted

Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted

Għeżież Komunità, Dan l-artikolu se jiffoka fuq il-ħażna u l-irkupru effiċjenti ta’ mijiet ta’ miljuni ta’ fajls żgħar. F'dan l-istadju, is-soluzzjoni finali hija proposta għal sistemi ta 'fajls kompatibbli ma' POSIX b'appoġġ sħiħ għal serraturi, inklużi serraturi ta 'cluster, u apparentement anke mingħajr krozzi.

Allura ktibt is-server tad-dwana tiegħi stess għal dan il-għan.
Matul l-implimentazzjoni ta 'dan il-kompitu, irnexxielna nsolvu l-problema ewlenija, u fl-istess ħin niksbu tfaddil fl-ispazju tad-diska u r-RAM, li s-sistema tagħna ta' fajls cluster kienet tikkonsma bla ħniena. Attwalment, tali numru ta 'fajls huwa ta' ħsara għal kwalunkwe sistema ta 'fajls raggruppati.

L-idea hija din:

Fi kliem sempliċi, fajls żgħar jittellgħu permezz tas-server, jiġu ffrankati direttament fl-arkivju, u jinqraw ukoll minnu, u fajls kbar jitqiegħdu ħdejn xulxin. Skema: 1 folder = 1 arkivju, b'kollox għandna diversi miljuni arkivji b'fajls żgħar, u mhux diversi mijiet ta 'miljuni fajl. U dan kollu huwa implimentat bis-sħiħ, mingħajr ebda skripts jew tqegħid ta 'fajls f'arkivji tar/zip.

Nipprova nżommha qasira, niskuża ruħi bil-quddiem jekk il-post ikun twil.

Kollox beda bil-fatt li ma stajtx insib server adattat fid-dinja li jista 'jiffranka d-dejta riċevuta permezz tal-protokoll HTTP direttament fl-arkivji, mingħajr l-iżvantaġġi inerenti fl-arkivji konvenzjonali u l-ħażna tal-oġġetti. U r-raġuni għat-tfittxija kienet il-grupp Oriġini ta '10 servers li kibru għal skala kbira, li fihom 250,000,000 fajl żgħir kienu diġà akkumulati, u t-tendenza tat-tkabbir ma kinitx se tieqaf.

Għal dawk li ma jħobbux jaqraw artikli, ftit dokumentazzjoni hija aktar faċli:

hawn и hawn.

U docker fl-istess ħin, issa hemm għażla biss b'nginx ġewwa biss fil-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

Li jmiss:

Jekk hemm ħafna fajls, huma meħtieġa riżorsi sinifikanti, u l-agħar parti hija li xi wħud minnhom jinħlew. Pereżempju, meta tuża sistema ta 'fajls raggruppati (f'dan il-każ, MooseFS), il-fajl, irrispettivament mid-daqs attwali tiegħu, dejjem jieħu mill-inqas 64 KB. Jiġifieri, għal fajls ta 'daqs ta' 3, 10 jew 30 KB, huma meħtieġa 64 KB fuq id-diska. Jekk ikun hemm kwart ta' biljun fajl, nitilfu minn 2 sa 10 terabytes. Mhux se jkun possibbli li jinħolqu fajls ġodda b'mod indefinit, peress li MooseFS għandu limitazzjoni: mhux aktar minn 1 biljun b'replika waħda ta 'kull fajl.

Hekk kif in-numru ta 'fajls jiżdied, hija meħtieġa ħafna RAM għall-metadata. Dumps ta' metadata kbar frekwenti jikkontribwixxu wkoll għall-użu u l-kedd tad-drajvs SSD.

server wZD. Aħna npoġġu l-affarijiet fl-ordni fuq id-diski.

Is-server huwa miktub f'Go. L-ewwelnett, kelli bżonn innaqqas in-numru ta 'fajls. Kif tagħmel dan? Minħabba l-arkivjar, iżda f'dan il-każ mingħajr kompressjoni, peress li l-fajls tiegħi huma biss stampi kkompressati. BoltDB wasal għas-salvataġġ, li xorta kellu jiġi eliminat min-nuqqasijiet tiegħu, dan huwa rifless fid-dokumentazzjoni.

B'kollox, minflok kwart ta' biljun fajl, fil-każ tiegħi kien fadal biss 10 miljun arkivju Bolt. Kieku kelli l-opportunità li nbiddel l-istruttura attwali tal-fajl tad-direttorju, ikun possibbli li tnaqqasha għal madwar 1 miljun fajl.

Il-fajls żgħar kollha huma ppakkjati f'arkivji Bolt, li awtomatikament jirċievu l-ismijiet tad-direttorji li jinsabu fihom, u l-fajls kbar kollha jibqgħu ħdejn l-arkivji; m'hemm l-ebda skop li jiġu ppakkjati, dan huwa customizable. Dawk żgħar huma arkivjati, dawk kbar jitħallew l-istess. Is-server jaħdem b'mod trasparenti mat-tnejn.

Arkitettura u karatteristiċi tas-server wZD.

Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted

Is-server jopera taħt sistemi operattivi Linux, BSD, Solaris u OSX. Ittestjajt biss għall-arkitettura AMD64 taħt Linux, iżda għandha taħdem għal ARM64, PPC64, MIPS64.

Karatteristiċi ewlenin:

  • Multithreading;
  • Multiserver, li jipprovdi tolleranza għall-ħsarat u l-ibbilanċjar tat-tagħbija;
  • Trasparenza massima għall-utent jew l-iżviluppatur;
  • Metodi HTTP appoġġjati: GET, HEAD, PUT u DELETE;
  • Kontroll tal-imġieba tal-qari u l-kitba permezz ta' headers tal-klijenti;
  • Appoġġ għal hosts virtwali flessibbli;
  • Appoġġ għall-integrità tad-dejta CRC meta tikteb/qari;
  • Buffers semi-dinamiċi għall-konsum minimu tal-memorja u l-aħjar irfinar tal-prestazzjoni tan-netwerk;
  • Kumpatt tad-dejta differita;
  • Barra minn hekk, arkivjar multi-threaded wZA huwa offrut għall-migrazzjoni tal-fajls mingħajr ma jitwaqqaf is-servizz.

Esperjenza Reali:

Ilni niżviluppa u nittestja s-server u l-arkivjar fuq data diretta għal żmien pjuttost twil, issa qed jopera b'suċċess fuq cluster li jinkludi 250,000,000 fajl żgħir (stampi) li jinsabu fi 15,000,000 direttorju fuq drives SATA separati. Raggruppament ta' 10 servers huwa server ta' Oriġini installat wara netwerk CDN. Biex isservi, jintużaw 2 servers Nginx + 2 servers wZD.

Għal dawk li jiddeċiedu li jużaw dan is-server, ikun għaqli li tippjana l-istruttura tad-direttorju, jekk applikabbli, qabel l-użu. Ħa nagħmel riżerva mill-ewwel li s-server mhux intenzjonat li jdaħħal kollox f'arkivju 1 Bolt.

Ittestjar tal-prestazzjoni:

Iktar ma jkun żgħir id-daqs tal-fajl zipped, aktar mgħaġġla jsiru operazzjonijiet GET u PUT fuqu. Ejja nqabblu l-ħin totali għall-kitba tal-klijent HTTP għal fajls regolari u arkivji Bolt, kif ukoll qari. Xogħol ma 'fajls ta' daqsijiet 32 ​​KB, 256 KB, 1024 KB, 4096 KB u 32768 KB hija mqabbla.

Meta taħdem ma 'arkivji Bolt, l-integrità tad-dejta ta' kull fajl hija kkontrollata (jintuża CRC), qabel ir-reġistrazzjoni u wkoll wara r-reġistrazzjoni, iseħħ qari u kalkolu mill-ġdid fuq il-fly, dan naturalment jintroduċi dewmien, iżda l-ħaġa prinċipali hija s-sigurtà tad-dejta.

Jien wettaqt testijiet tal-prestazzjoni fuq drives SSD, peress li t-testijiet fuq drives SATA ma jurux differenza ċara.

Grafiċi bbażati fuq ir-riżultati tal-ittestjar:

Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted
Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted

Kif tistgħu taraw, għal fajls żgħar id-differenza fil-ħinijiet tal-qari u tal-kitba bejn fajls arkivjati u mhux arkivjati hija żgħira.

Ikollna stampa kompletament differenti meta nittestjaw il-qari u l-kitba ta’ fajls ta’ daqs ta’ 32 MB:

Aħżen b'mod effiċjenti mijiet ta 'miljuni ta' fajls żgħar. Soluzzjoni Self-Hosted

Id-differenza fil-ħin bejn il-qari tal-fajls hija fi żmien 5-25 ms. Bir-reġistrazzjoni, l-affarijiet huma agħar, id-differenza hija ta 'madwar 150 ms. Iżda f'dan il-każ m'hemmx bżonn li jittellgħu fajls kbar; sempliċement m'hemm l-ebda skop li tagħmel hekk; jistgħu jgħixu separatament mill-arkivji.

* Teknikament, tista' tuża dan is-server għal kompiti li jeħtieġu NoSQL.

Metodi bażiċi ta' kif taħdem mas-server wZD:

Tagħbija ta' fajl regolari:

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

It-tlugħ ta' fajl fl-arkivju Bolt (jekk il-parametru tas-server fmaxsize, li jiddetermina d-daqs massimu tal-fajl li jista' jiġi inkluż fl-arkivju, ma jinqabiżx; jekk jinqabeż, il-fajl jittella' bħas-soltu ħdejn l-arkivju):

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

Tniżżil ta' fajl (jekk hemm fajls bl-istess ismijiet fuq id-diska u fl-arkivju, allura meta tniżżel, tingħata prijorità b'mod awtomatiku lill-fajl mhux arkivjat):

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

Niżżel fajl mill-arkivju Bolt (sfurzat):

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

Deskrizzjonijiet ta' metodi oħra jinsabu fid-dokumentazzjoni.

Dokumentazzjoni wZD
Dokumentazzjoni wZA

Is-server bħalissa jappoġġja biss il-protokoll HTTP; għadu ma jaħdimx bl-HTTPS. Il-metodu POST lanqas huwa appoġġjat (għadu ma ġiex deċiż jekk huwiex meħtieġ jew le).

Min iħaffer fil-kodiċi tas-sors se jsib butterscotch hemmhekk, mhux kulħadd jogħġobha, imma jien ma torbotx il-kodiċi prinċipali mal-funzjonijiet tal-qafas tal-web, ħlief għall-interrupt handler, għalhekk fil-futur nista' niktebha malajr għal kważi kull magna.

Tagħmel:

  • Żvilupp tar-replikatur u d-distributur tiegħek + ġeografiku għall-possibbiltà ta’ użu f’sistemi kbar mingħajr sistemi ta’ fajls cluster (Kollox għall-adulti)
  • Possibbiltà ta' rkupru sħiħ b'lura tal-metadata jekk tintilef kompletament (jekk tuża distributur)
  • Protokoll nattiv għall-abbiltà li tuża konnessjonijiet tan-netwerk persistenti u sewwieqa għal lingwi ta 'programmar differenti
  • Posibiltajiet avvanzati għall-użu tal-komponent NoSQL
  • Kompressjonijiet ta' tipi differenti (gzip, zstd, snappy) għal fajls jew valuri ġewwa arkivji Bolt u għal fajls regolari
  • Encryption ta 'tipi differenti għal fajls jew valuri ġewwa arkivji Bolt u għal fajls regolari
  • Konverżjoni tal-vidjo dewmien fuq in-naħa tas-server, inkluż fuq GPU

Għandi kollox, nittama li dan is-server ikun utli għal xi ħadd, liċenzja BSD-3, copyright doppju, peress li kieku ma kienx hemm kumpanija fejn naħdem, is-server ma kienx ikun miktub. Jien l-uniku żviluppatur. Inkun grat għal xi bugs u talbiet għal karatteristiċi li ssib.

Sors: www.habr.com

Żid kumment