ã³ãã¥ããã£ã®çæ§ããã®èšäºã§ã¯ãæ°åã®å°ããªãã¡ã€ã«ãå¹ççã«ä¿åããã³ååŸããããšã«çŠç¹ãåœãŠãŸãã çŸæ®µéã§ã¯ãã¯ã©ã¹ã¿ ããã¯ãå«ãããã¯ãå®å
šã«ãµããŒãããäžèŠæŸèæããªããŠãèŠãã POSIX äºæãã¡ã€ã« ã·ã¹ãã çšã®æçµãœãªã¥ãŒã·ã§ã³ãææ¡ãããŠããŸãã
ããã§ããã®ç®çã®ããã«ç¬èªã®ã«ã¹ã¿ã ãµãŒããŒãäœæããŸããã
ãã®ã¿ã¹ã¯ãå®è£
ããéçšã§ãç§ãã¡ã¯äž»ãªåé¡ã解決ããããšãã§ããåæã«ã¯ã©ã¹ã¿ãŒ ãã¡ã€ã« ã·ã¹ãã ã容赊ãªãæ¶è²»ããŠãããã£ã¹ã¯é åãš RAM ãç¯çŽããããšãã§ããŸããã å®éããã®ãããªæ°ã®ãã¡ã€ã«ã¯ãã¯ã©ã¹ã¿åããããã¡ã€ã« ã·ã¹ãã ã«ãšã£ãŠæ害ã§ââãã
ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã
ç°¡åã«èšããšãå°ããªãã¡ã€ã«ã¯ãµãŒããŒçµç±ã§ã¢ããããŒããããã¢ãŒã«ã€ãã«çŽæ¥ä¿åãããã¢ãŒã«ã€ãããèªã¿åããã倧ããªãã¡ã€ã«ã¯äžŠã¹ãŠé 眮ãããŸãã ã¹ããŒã : 1 ãã©ã«ã㌠= 1 ã¢ãŒã«ã€ããåèšã§ãæ°åã®ãã¡ã€ã«ã§ã¯ãªããå°ããªãã¡ã€ã«ãå«ãæ°çŸäžã®ã¢ãŒã«ã€ãããããŸãã ããããã¹ãŠã¯ãã¹ã¯ãªããã䜿çšãããããã¡ã€ã«ã tar/zip ã¢ãŒã«ã€ãã«å ¥ãããããããšãªããå®å šã«å®è£ ãããŸãã
çãããããã«åªããŸãããæçš¿ãé·ããªãå Žåã¯äºããäºæ¿ãã ããã
ãã¹ãŠã¯ãåŸæ¥ã®ã¢ãŒã«ã€ãããªããžã§ã¯ã ã¹ãã¬ãŒãžã«ç¹æã®æ¬ ç¹ãæããã«ãHTTP ãããã³ã«çµç±ã§åä¿¡ããããŒã¿ãçŽæ¥ã¢ãŒã«ã€ãã«ä¿åã§ããé©åãªãµãŒããŒãäžçäžã§èŠã€ãããªãã£ããšããäºå®ããå§ãŸããŸããã ãããŠãæ€çŽ¢ã®çç±ã¯ã10 å°ã®ãµãŒããŒãããªããªãªãžã³ ã¯ã©ã¹ã¿ãŒã倧èŠæš¡ã«æé·ãããã§ã« 250,000,000 å XNUMX åã®å°ããªãã¡ã€ã«ãèç©ãããŠããããã®å¢å åŸåãæ¢ãŸããªãã£ãããšã§ãã
èšäºãèªãã®ã奜ãã§ã¯ãªã人ã«ãšã£ãŠã¯ãã¡ãã£ãšããããã¥ã¡ã³ãã®æ¹ãç°¡åã§ãã
åæã« docker ã䜿çšããå Žåã念ã®ããå éšã« 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 KB ãå æããŸãã ã€ãŸãããµã€ãºã 3ã10ããŸã㯠30 KB ã®ãã¡ã€ã«ã®å Žåããã£ã¹ã¯äžã« 64 KB ãå¿ èŠã«ãªããŸãã ãã¡ã€ã«ã 2 ååããå Žåã10 ãã©ãã€ããã 1 ãã©ãã€ãã倱ãããŸãã MooseFS ã«ã¯ãåãã¡ã€ã«ã® XNUMX ã€ã®ã¬ããªã«ã§ XNUMX åãè¶ ããªããšããå¶éããããããæ°ãããã¡ã€ã«ãç¡å¶éã«äœæããããšã¯ã§ããŸããã
ãã¡ã€ã«ã®æ°ãå¢ãããšãã¡ã¿ããŒã¿çšã«å€§éã® RAM ãå¿ èŠã«ãªããŸãã 倧èŠæš¡ãªã¡ã¿ããŒã¿ ãã³ããé »ç¹ã«çºçããããšããSSD ãã©ã€ãã®æ¶èã®åå ãšãªããŸãã
wZDãµãŒããŒã ãã£ã¹ã¯äžã§ç©äºãæŽçããŸãã
ãµãŒããŒã¯ Go ã§æžãããŠããŸãã ãŸã第äžã«ããã¡ã€ã«ã®æ°ãæžããå¿ èŠããããŸããã ã©ããã£ãŠããã®ïŒ ã¢ãŒã«ã€ãã®ããã§ãããç§ã®ãã¡ã€ã«ã¯åãªãå§çž®ãããç»åã§ããããããã®å Žåã¯å§çž®ãªãã§ãã äŸç¶ãšããŠæ¬ ç¹ãåãé€ãå¿ èŠããã£ããããBoltDB ã圹ã«ç«ã¡ãŸãããããã¯ããã¥ã¡ã³ãã«åæ ãããŠããŸãã
ç§ã®å Žåãåèšã§ 10 ååã®ãã¡ã€ã«ã§ã¯ãªãã1 äžåã®ãã«ã ã¢ãŒã«ã€ãããæ®ã£ãŠããŸããã§ããã çŸåšã®ãã£ã¬ã¯ããªã®ãã¡ã€ã«æ§é ãå€æŽããæ©äŒãããã°ããã¡ã€ã«æ°ãçŽ XNUMX äžåãŸã§æžããããšãã§ããã§ãããã
ãã¹ãŠã®å°ããªãã¡ã€ã«ã¯ãBolt ã¢ãŒã«ã€ãã«ããã¯ããããã¡ã€ã«ãé 眮ãããŠãããã£ã¬ã¯ããªã®ååãèªåçã«ååŸããããã¹ãŠã®å€§ããªãã¡ã€ã«ã¯ã¢ãŒã«ã€ãã®é£ã«æ®ããŸããããã¯ããããšã«æå³ã¯ãããŸãããããã¯ã«ã¹ã¿ãã€ãºå¯èœã§ãã å°ãããã®ã¯ã¢ãŒã«ã€ãããã倧ãããã®ã¯å€æŽãããã«æ®ããŸãã ãµãŒããŒã¯äž¡æ¹ã«å¯ŸããŠééçã«åäœããŸãã
wZD ãµãŒããŒã®ã¢ãŒããã¯ãã£ãšæ©èœã
ãµãŒããŒã¯ãLinuxãBSDãSolarisãããã³ OSX ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§åäœããŸãã Linux ã§ã¯ AMD64 ã¢ãŒããã¯ãã£ã®ã¿ããã¹ãããŸããããARM64ãPPC64ãMIPS64 ã§ãåäœããã¯ãã§ãã
äž»ãªç¹åŸŽïŒ
- ãã«ãã¹ã¬ããã
- ãã«ããµãŒããŒãèé害æ§ãšè² è·åæ£ãæäŸããŸãã
- ãŠãŒã¶ãŒãŸãã¯éçºè ã«å¯Ÿããæ倧éã®éææ§ã
- ãµããŒããããŠãã HTTP ã¡ãœãã: GETãHEADãPUTãããã³ DELETEã
- ã¯ã©ã€ã¢ã³ãåŽããããŒã«ããèªã¿åãããã³æžã蟌ã¿åäœã®ç®¡çã
- é«åºŠã«æ§æå¯èœãªä»®æ³ãã¹ãã®ãµããŒãã
- æžã蟌ã¿/èªã¿åãæã® CRC ããŒã¿æŽåæ§ããµããŒãããŸãã
- ã¡ã¢ãªæ¶è²»ãæå°éã«æãããããã¯ãŒã¯ ããã©ãŒãã³ã¹ãæé©ã«èª¿æŽããããã®ååçãããã¡ã
- ããŒã¿å§çž®ã®é 延ã
- ããã«ããµãŒãã¹ãåæ¢ããã«ãã¡ã€ã«ã移è¡ããããã®ãã«ãã¹ã¬ãã ã¢ãŒã«ã€ã wZA ãæäŸãããŠããŸãã
å®éã®çµéš:
ç§ã¯ããªãé·ãéãã©ã€ã ããŒã¿ã䜿çšããŠãµãŒããŒãšã¢ãŒã«ã€ããéçºããã³ãã¹ãããŠããŸããããçŸåšã§ã¯ãå¥åã® SATA ãã©ã€ãäžã® 250,000,000 ãã£ã¬ã¯ããªã«ãã 15,000,000 åã®å°ããªãã¡ã€ã« (ç»å) ãå«ãã¯ã©ã¹ã¿äžã§æ£åžžã«åäœããŠããŸãã 10 å°ã®ãµãŒããŒãããªãã¯ã©ã¹ã¿ãŒã¯ãCDN ãããã¯ãŒã¯ã®èåŸã«ã€ã³ã¹ããŒã«ããããªãªãžã³ ãµãŒããŒã§ãã ããããµãŒãã¹ããã«ã¯ã2 ã€ã® Nginx ãµãŒã㌠+ 2 ã€ã® wZD ãµãŒããŒã䜿çšãããŸãã
ãã®ãµãŒããŒã䜿çšããããšã«æ±ºããå Žåã¯ã䜿çšããåã«ãå¿ èŠã«å¿ããŠãã£ã¬ã¯ããªæ§é ãèšç»ããããšãè³¢æã§ãã ããã«äºçŽããŠãããŸããããµãŒããŒã¯ 1 Bolt ã¢ãŒã«ã€ãã«ãã¹ãŠãè©°ã蟌ãããšãæå³ãããã®ã§ã¯ãããŸããã
æ§èœè©ŠéšïŒ
ZIP ãã¡ã€ã«ã®ãµã€ãºãå°ããã»ã©ããã®ãã¡ã€ã«ã«å¯Ÿãã GET ããã³ PUT æäœã®å®è¡ãéããªããŸãã HTTP ã¯ã©ã€ã¢ã³ãã«ããéåžžã®ãã¡ã€ã«ãšBolt ã¢ãŒã«ã€ããžã®æžã蟌ã¿æéãšèªã¿åãæéã®åèšãæ¯èŒããŠã¿ãŸãããã ãµã€ãº 32 KBã256 KBã1024 KBã4096 KBãããã³ 32768 KB ã®ãã¡ã€ã«ã§ã®äœæ¥ãæ¯èŒãããŸãã
Bolt ã¢ãŒã«ã€ãã䜿çšããå Žåãåãã¡ã€ã«ã®ããŒã¿æŽåæ§ããã§ãã¯ãã (CRC ã䜿çšãããŸã)ãèšé²åãšèšé²åŸã«ãªã³ã¶ãã©ã€ã®èªã¿åããšåèšç®ãçºçããŸããããã«ããåœç¶é 延ãçºçããŸãããéèŠãªã®ã¯ããŒã¿ã®ã»ãã¥ãªãã£ã§ãã
SATA ãã©ã€ãã§ã®ãã¹ãã§ã¯æ確ãªéãã瀺ãããªããããSSD ãã©ã€ãã§ããã©ãŒãã³ã¹ ãã¹ããå®æœããŸããã
ãã¹ãçµæã«åºã¥ãã°ã©ã:
ã芧ã®ãšãããå°ããªãã¡ã€ã«ã®å Žåãã¢ãŒã«ã€ãããããã¡ã€ã«ãšã¢ãŒã«ã€ããããŠããªããã¡ã€ã«ã®éã®èªã¿åãæéãšæžã蟌ã¿æéã®å·®ã¯ãããã§ãã
ãµã€ãºã 32 MB ã®ãã¡ã€ã«ã®èªã¿åããšæžã蟌ã¿ããã¹ããããšããŸã£ããç°ãªãç¶æ³ãåŸãããŸãã
ãã¡ã€ã«ã®èªã¿åãéã®æé差㯠5 ïœ 25 ããªç§ä»¥å
ã§ãã é²é³ãããšç¶æ³ã¯ããã«æªåãããã®å·®ã¯çŽ 150 ããªç§ã«ãªããŸãã ãã ãããã®å Žåã倧ããªãã¡ã€ã«ãã¢ããããŒãããå¿
èŠã¯ãªããã¢ããããŒãããããšã«ãŸã£ããæå³ããªããã¢ãŒã«ã€ããšã¯å¥ã«ä¿åããããšãã§ããŸãã
*æè¡çã«ã¯ããã®ãµãŒããŒã¯ NoSQL ãå¿ èŠãšããã¿ã¹ã¯ã«äœ¿çšã§ããŸãã
wZD ãµãŒããŒãæäœããåºæ¬çãªæ¹æ³:
éåžžã®ãã¡ã€ã«ãããŒããã:
curl -X PUT --data-binary @test.jpg http://localhost/test/test.jpg
ãã¡ã€ã«ãBoltã¢ãŒã«ã€ãã«ã¢ããããŒãããŸã(ã¢ãŒã«ã€ãã«å«ããããšãã§ããæ倧ãã¡ã€ã«ãµã€ãºã決å®ãããµãŒããŒãã©ã¡ãŒã¿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
Bolt ã¢ãŒã«ã€ããããã¡ã€ã«ãããŠã³ããŒããã (匷å¶):
curl -o test.jpg -H "FromArchive: 1" http://localhost/test/test.jpg
ä»ã®ã¡ãœããã®èª¬æã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
ãµãŒããŒã¯çŸåš HTTP ãããã³ã«ã®ã¿ããµããŒãããŠãããHTTPS ã§ã¯ãŸã åäœããŸããã POSTã¡ãœããããµããŒãããŠããŸãã(èŠåŠã¯æªå®)ã
ãœãŒã¹ ã³ãŒããæãäžãã人ã¯èª°ã§ãããã«ãã¿ãŒã¹ã³ãããèŠã€ããã§ãããã誰ããããã奜ãããã§ã¯ãããŸããããå²ã蟌ã¿ãã³ãã©ãŒãé€ããŠãã¡ã€ã³ ã³ãŒãã Web ãã¬ãŒã ã¯ãŒã¯ã®é¢æ°ã«çµã³ä»ããŠããªãã®ã§ãå°æ¥çã«ã¯ãã»ãšãã©ãã¹ãŠã®ã³ãŒããç°¡åã«æžãçŽãããšãã§ããŸãããšã³ãžã³ã
TODOïŒ
- ã¯ã©ã¹ã¿ãŒãã¡ã€ã«ã·ã¹ãã ãæããªã倧èŠæš¡ã·ã¹ãã ã§ã®äœ¿çšãå¯èœã«ããç¬èªã®ã¬ããªã±ãŒã¿ãŒãšãã£ã¹ããªãã¥ãŒã¿ãŒ + geo ã®éçº (ãã¹ãŠå€§äººåã)
- ã¡ã¿ããŒã¿ãå®å šã«å€±ãããå Žåã®å®å šãªéå埩ã®å¯èœæ§ïŒãã£ã¹ããªãã¥ãŒã¿ã䜿çšããŠããå ŽåïŒ
- æ°žç¶çãªãããã¯ãŒã¯æ¥ç¶ãšããŸããŸãªããã°ã©ãã³ã°èšèªã®ãã©ã€ããŒã䜿çšã§ãããã€ãã£ã ãããã³ã«
- NoSQL ã³ã³ããŒãã³ãã䜿çšããããã®é«åºŠãªå¯èœæ§
- Bolt ã¢ãŒã«ã€ãå ã®ãã¡ã€ã«ãŸãã¯å€ãããã³éåžžã®ãã¡ã€ã«ã®ããŸããŸãªã¿ã€ãã®å§çž® (gzipãzstdãsnappy)
- Bolt ã¢ãŒã«ã€ãå ã®ãã¡ã€ã«ãŸãã¯å€ãšéåžžã®ãã¡ã€ã«ã®ããŸããŸãªã¿ã€ãã®æå·å
- GPU ãå«ããµãŒããŒåŽã®ãããªå€æã®é 延
ç§ã¯ãã¹ãŠãæã£ãŠããŸãããã®ãµãŒããŒã誰ãã®åœ¹ã«ç«ãŠã°å¹žãã§ããBSD-3 ã©ã€ã»ã³ã¹ãäºéèäœæš©ãããç§ãåããŠããäŒç€Ÿããªããã°ããµãŒããŒã¯äœæãããªãã£ãã§ãããã éçºè
ã¯ç§ã ãã§ãã ãã°ãæ©èœã®ãªã¯ãšã¹ããèŠã€ããŠããã ããã°å¹žãã§ãã
åºæïŒ habr.com