E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī

E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī

Aloha Kaiaulu, E kālele ana kēia ʻatikala i ka mālama pono ʻana a me ka hoʻihoʻi ʻana i nā haneli miliona o nā faila liʻiliʻi. I kēia pae, ua noi ʻia ka hopena hope loa no nā ʻōnaehana faila kūpono me POSIX me ke kākoʻo piha no nā laka, me nā laka cluster, a me ka ʻike ʻole ʻia me ka ʻole o nā koʻokoʻo.

No laila ua kākau wau i kaʻu kikowaena maʻamau no kēia kumu.
I ka hoʻokō ʻana i kēia hana, ua hoʻokō mākou i ka hoʻoponopono ʻana i ka pilikia nui, a i ka manawa like e hoʻokō ai i ka mālama ʻana i ka disk space a me ka RAM, kahi i hoʻopau ʻole ʻia e kā mākou ʻōnaehana file cluster. ʻOiaʻiʻo, ʻo ia mau faila he mea pōʻino no kēlā me kēia ʻōnaehana file clustered.

ʻO ka manaʻo kēia:

Ma nā huaʻōlelo maʻalahi, hoʻoili ʻia nā faila liʻiliʻi ma o ke kikowaena, mālama pono ʻia lākou i loko o ka waihona, a heluhelu pū ʻia mai ia mea, a waiho ʻia nā faila nui i kēlā me kēia ʻaoʻao. Papahana: 1 waihona = 1 waihona, i ka huina he mau miliona waihona me nā faila liʻiliʻi, ʻaʻole he mau haneli miliona mau faila. A ua hoʻokō piha ʻia kēia mau mea, me ka ʻole o nā palapala a i ʻole ka waiho ʻana i nā faila i loko o nā waihona tar/zip.

E ho'āʻo wau e hoʻopōkole, e kala aku ma mua inā lōʻihi ka leka.

Hoʻomaka ia me ka ʻike ʻole i loaʻa iaʻu kahi kikowaena kūpono i ka honua e hiki ke mālama i ka ʻikepili i loaʻa ma o ka protocol HTTP pololei i loko o nā waihona, me ka ʻole o nā hemahema i loaʻa i nā waihona maʻamau a me ka mālama ʻana i nā mea. A ʻo ke kumu o ka ʻimi ʻana, ʻo ia ka pūʻulu Origin o 10 mau kikowaena i ulu i kahi ʻano nui, kahi 250,000,000 mau faila liʻiliʻi i hōʻiliʻili ʻia, a ʻaʻole e pau ka ulu ʻana.

No ka poʻe makemake ʻole e heluhelu i nā ʻatikala, ʻoi aku ka maʻalahi o kahi palapala liʻiliʻi:

maanei и maanei.

A ʻo docker i ka manawa like, aia kahi koho me ka nginx i loko wale nō i ka hihia:

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

Eia kekahi:

Inā nui nā faila, pono nā kumuwaiwai koʻikoʻi, a ʻo ka hapa maikaʻi loa ʻo ia ka pau ʻana o kekahi o lākou. No ka laʻana, i ka hoʻohana ʻana i kahi ʻōnaehana file clustered (ma kēia hihia, MooseFS), ʻo ka faila, me ka nānā ʻole i kona nui maoli, lawe mau ʻia ma kahi o 64 KB. ʻO ia hoʻi, no nā faila o 3, 10 a i ʻole 30 KB ka nui, koi ʻia ka 64 KB ma ka disk. Inā he hapaha o ka piliona waihona, nalowale mākou mai 2 a 10 terabytes. ʻAʻole hiki ke hana i nā faila hou no ka manawa pau ʻole, no ka mea he palena ko MooseFS: ʻaʻole ʻoi aku ma mua o 1 biliona me hoʻokahi kope o kēlā me kēia faila.

Ke hoʻonui nei ka nui o nā faila, pono ka nui o ka RAM no ka metadata. Hoʻokomo pū ka hoʻolei metadata nui i ka lole a me ka waimaka o nā drive SSD.

kikowaena wZD. Hoʻonohonoho mākou i nā mea ma nā diski.

Ua kākau ʻia ke kikowaena ma Go. ʻO ka mea mua, pono wau e hōʻemi i ka nui o nā faila. Pehea e hana ai? Ma muli o ka hoʻopaʻa ʻana, akā i kēia hihia me ka ʻole o ke kaomi ʻana, ʻoiai ʻo kaʻu mau faila he mau kiʻi paʻi wale nō. Ua hele mai ʻo BoltDB i ka hoʻopakele, pono e hoʻopau ʻia mai kāna mau hemahema, ʻike ʻia kēia i ka palapala.

Ma ka huina, ma kahi o ka hapaha o ka piliona waihona, i koʻu hihia aia wale nō 10 miliona Bolt waihona i koe. Inā loaʻa iaʻu ka manawa e hoʻololi ai i ke ʻano o ka faila papa kuhikuhi i kēia manawa, hiki ke hoʻemi ʻia i kahi o 1 miliona mau faila.

Hoʻopili ʻia nā faila liʻiliʻi a pau i loko o nā waihona Bolt, kahi e loaʻa ai nā inoa o nā papa kuhikuhi kahi i loaʻa ai lākou, a waiho ʻia nā faila nui āpau ma ka ʻaoʻao o nā waihona; ʻaʻohe kumu o ka hoʻopili ʻana iā lākou, hiki ke maʻalahi. Hoʻopaʻa ʻia nā mea liʻiliʻi, waiho ʻia nā mea nui me ka loli ʻole. Hana pono ke kikowaena me nā mea ʻelua.

Hoʻolālā a me nā hiʻohiʻona o ke kikowaena wZD.

E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī

Ke hana nei ke kikowaena ma lalo o Linux, BSD, Solaris a me nā ʻōnaehana hana OSX. Ua hoʻāʻo wale wau no ka hoʻolālā AMD64 ma lalo o Linux, akā pono ia e hana no ARM64, PPC64, MIPS64.

Nā hiʻohiʻona nui:

  • Multithreading;
  • Multiserver, e hāʻawi ana i ka hoʻomanawanui hewa a me ke kaupaona ʻana;
  • ʻO ka ʻike nui loa no ka mea hoʻohana a mea hoʻomohala paha;
  • Kākoʻo ʻia nā ʻano HTTP: GET, HEAD, PUT a DELETE;
  • Ka mālama ʻana i ka heluhelu a me ke kākau ʻana ma o nā poʻomanaʻo o nā mea kūʻai aku;
  • Kākoʻo no nā pūʻali virtual maʻalahi;
  • Kākoʻo i ka pono o ka ʻikepili CRC ke kākau/heluhelu;
  • Nā pale Semi-dynamic no ka hoʻohana ʻana i ka hoʻomanaʻo liʻiliʻi a me ka hoʻokō pono ʻana o ka ʻoihana pūnaewele;
  • Hoʻopili ʻia ka ʻikepili i hoʻopaneʻe ʻia;
  • Eia kekahi, hāʻawi ʻia kahi waihona wZA multi-threaded no ka neʻe ʻana i nā faila me ka ʻole o ka hoʻōki ʻana i ka lawelawe.

ʻIke maoli:

Ke hoʻomohala nei au a hoʻāʻo i ka server a me ka waihona ma ka ʻikepili ola no ka manawa lōʻihi, i kēia manawa ke hana maikaʻi nei ia ma kahi hui pū me nā faila liʻiliʻi 250,000,000 (kiʻi) aia ma nā papa kuhikuhi 15,000,000 ma nā kaʻa SATA ʻokoʻa. ʻO kahi pūʻulu o nā kikowaena 10 kahi kikowaena Origin i hoʻokomo ʻia ma hope o kahi pūnaewele CDN. No ka lawelawe ʻana, hoʻohana ʻia nā kikowaena Nginx 2 + 2 wZD server.

No ka poʻe i hoʻoholo e hoʻohana i kēia kikowaena, pono e hoʻolālā i ka hoʻolālā papa kuhikuhi, inā pili, ma mua o ka hoʻohana ʻana. E ʻae mai iaʻu e hoʻopaʻa koke ʻaʻole i manaʻo ʻia ke kikowaena e hoʻopili i nā mea āpau i kahi waihona 1 Bolt.

Hoʻāʻo hana:

ʻOi aku ka liʻiliʻi o ka faila i hoʻopaʻa ʻia, ʻoi aku ka wikiwiki o nā hana GET a me PUT ma luna. E hoʻohālikelike kākou i ka nui o ka manawa no ka kākau ʻana o ka mea kūʻai aku HTTP i nā faila maʻamau a me nā waihona Bolt, a me ka heluhelu ʻana. Hoʻohālikelike ʻia ka hana me nā faila o ka nui 32 KB, 256 KB, 1024 KB, 4096 KB a me 32768 KB.

I ka hana ʻana me nā waihona Bolt, ʻike ʻia ka paʻa ʻikepili o kēlā me kēia faila (hoʻohana ʻia ka CRC), ma mua o ka hoʻopaʻa ʻana a ma hope hoʻi o ka hoʻopaʻa ʻana, hiki i ka heluhelu ʻana a me ka helu hou ʻana, hoʻopuka maoli kēia i nā lohi, akā ʻo ka mea nui ka palekana ʻikepili.

Ua alakaʻi au i nā hoʻokolohua hana ma nā drive SSD, no ka mea ʻaʻole ʻike ʻia nā hoʻokolohua ma nā drive SATA i kahi ʻokoʻa.

Nā kiʻi ma muli o nā hopena hoʻāʻo:

E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī
E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī

E like me kāu e ʻike ai, no nā faila liʻiliʻi he liʻiliʻi ka ʻokoʻa o ka heluhelu a me ke kākau ʻana ma waena o nā faila waihona a me nā faila ʻole.

Loaʻa iā mākou ke kiʻi ʻokoʻa loa i ka wā e hoʻāʻo ai i ka heluhelu a me ke kākau ʻana i nā faila o 32 MB ka nui:

E mālama pono i nā haneli miliona o nā faila liʻiliʻi. Haʻina hoʻopaʻa ponoʻī

ʻO ka ʻokoʻa manawa ma waena o ka heluhelu ʻana i nā faila i loko o 5-25 ms. Me ka hoʻopaʻa ʻana, ʻoi aku ka maikaʻi o nā mea, ʻo ka ʻokoʻa ma kahi o 150 ms. Akā i kēia hihia, ʻaʻohe pono e hoʻouka i nā faila nui; ʻaʻohe kumu e hana ai; hiki iā lākou ke noho kaʻawale mai ka waihona.

* Ma ke ʻano loea, hiki iā ʻoe ke hoʻohana i kēia kikowaena no nā hana e koi ai iā NoSQL.

Nā ʻano kumu o ka hana ʻana me ka server wZD:

Ke hoʻouka nei i kahi faila maʻamau:

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

Ke hoʻouka ʻana i kahi faila i ka waihona Bolt (inā ʻaʻole i ʻoi aku ka nui o ka faila fmaxsize, e hoʻoholo ana i ka nui o ka faila i hiki ke hoʻokomo ʻia i loko o ka waihona;

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

Ke hoʻoiho ʻana i kahi faila (inā loaʻa nā faila me nā inoa like ma ka disk a ma ka waihona, a laila i ka wā e hoʻoiho ai, hāʻawi ʻia ka mea nui i ka faila unarchived):

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

Ke hoʻoiho ʻana i kahi faila mai ka waihona Bolt (koi ʻia):

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

Aia nā wehewehe ʻana o nā ʻano hana ʻē aʻe i ka palapala.

wZD Palapala
wZA Palapala

Ke kākoʻo wale nei ke kikowaena i ka protocol HTTP; ʻaʻole ia e hana me HTTPS. ʻAʻole kākoʻo ʻia ke ala POST (ʻaʻole i hoʻoholo ʻia inā pono a ʻaʻole paha).

ʻO ka mea e ʻeli i ke kumu kumu e ʻike ʻo ia i ka butterscotch ma laila, ʻaʻole makemake nā mea a pau, akā ʻaʻole wau i hoʻopaʻa i ke code nui i nā hana o ka ʻōnaehana pūnaewele, koe wale nō ka mea hoʻokele interrupt, no laila hiki iaʻu ke kākau hou iā ia no nā mea āpau. ʻenekini.

E hana:

  • Ka hoʻomohala ʻana i kāu mea hoʻopiʻi a me ka mea hoʻolaha + geo no ka hiki ke hoʻohana i nā ʻōnaehana nui me ka ʻole o nā ʻōnaehana file cluster (nā mea āpau no nā pākeke)
  • Hiki ke hoʻihoʻi hou i ka metadata inā nalowale loa (inā e hoʻohana ana i kahi mea hoʻolaha)
  • ʻO ka protocol maoli no ka hiki ke hoʻohana i nā pili pūnaewele hoʻomau a me nā mea hoʻokele no nā ʻōlelo papahana like ʻole
  • Nā mea hiki ke hoʻohana i ka ʻāpana NoSQL
  • Hoʻopili i nā ʻano like ʻole (gzip, zstd, snappy) no nā faila a i ʻole nā ​​​​waiwai i loko o nā waihona Bolt a no nā faila maʻamau.
  • Hoʻopili i nā ʻano like ʻole no nā faila a i ʻole nā ​​​​waiwai i loko o nā waihona Bolt a no nā faila maʻamau
  • Hoʻopaneʻe ka hoʻololi wikiō ʻaoʻao server, me ka GPU

Loaʻa iaʻu nā mea āpau, manaʻolana wau e pono kēia kikowaena i kekahi, laikini BSD-3, kope kope pālua, no ka mea inā ʻaʻohe ʻoihana kahi aʻu e hana ai, ʻaʻole i kākau ʻia ke kikowaena. ʻO wau wale nō ka mea hoʻomohala. Mahalo nui wau i nā hewa a me nā noi hiʻohiʻona āu e ʻike ai.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka