ãã®æçš¿ã§ã¯ã HighLoad ++-2008 ã«é¢ããã¬ããŒãã«åºã¥ããŠãäžé£ã®å°ããªæçš¿ãéããããšæããŸãã ãã®åŸãããã¹ãå šäœã1ã€ã®å€§ããªPDFãšããŠå ¬éãããŸãã
ã¯ããã«
ãŸããäžé£ã®æçš¿ã®ã¿ã€ãã«ïŒæçš¿ã¯ãWebã§ã®ãã£ãã·ã¥ïŒé«è² è·ã®Webãããžã§ã¯ãïŒããã£ãã·ã¥ã®ããã®memcachedã®äœ¿çšãããã³Webãããžã§ã¯ãã§ã®memcachedã®ãã®ä»ã®äœ¿çšã«ã€ããŠã§ãã ã€ãŸããããŸããŸãªçµã¿åããã®3ã€ã®æ§æèŠçŽ åãã¹ãŠãããã®äžé£ã®æçš¿ã§ã«ããŒãããŸãã
ä»æ¥ã®ãã£ãã·ã¥ã¯ãWebãããžã§ã¯ãã®äžå¯æ¬ ãªéšåã§ãããå¿ ãããè² è·ã倧ããããã§ã¯ãããŸããã åãªãœãŒã¹ã«ã€ããŠããŠãŒã¶ãŒã«ãšã£ãŠéèŠãªæ©èœã¯ãµãŒããŒã®å¿çæéã§ãã ãµãŒããŒã®å¿çæéãé·ããããšã蚪åè ãæµåºããŸãã ãããã£ãŠãå¿çæéãæå°éã«æããå¿ èŠããããŸãããã®ããã«ã¯ããŠãŒã¶ãŒãžã®å¿çãäœæããã®ã«å¿ èŠãªæéãççž®ããå¿ èŠãããããŠãŒã¶ãŒãžã®å¿çã«ã¯å€éšãªãœãŒã¹ïŒããã¯ãšã³ãïŒããããŒã¿ãåä¿¡ããå¿ èŠããããŸãã ãããã®ãªãœãŒã¹ã¯ãããŒã¿ããŒã¹ãšä»ã®æ¯èŒçäœéã®ããŒã¿ãœãŒã¹ïŒããšãã°ã空ãé åã®éãæå®ãããªã¢ãŒããã¡ã€ã«ãµãŒããŒïŒã®äž¡æ¹ã«ããããšãã§ããŸãã ããªãè€éãªãªãœãŒã¹ã®1ããŒãžãçæããã«ã¯ããã®ãããªåŒã³åºããäœååãè¡ãå¿ èŠããããŸãã ãããã®å€ãã¯é«éã§ãïŒ20ããªç§ä»¥äžããã ããåžžã«å°æ°ã®èŠæ±ãããããã®èšç®æéã¯æ°ç§ãŸãã¯æ°åã§èšç®ã§ããŸãïŒæé©åãããã·ã¹ãã ã§ããæ°ã¯æå°éã§ããå¿ èŠããããŸããïŒã ã¯ãšãªã®çµæãåŸ ã€ããã«è²»ãããŠããæéããã¹ãŠåèšãããšïŒã¯ãšãªã䞊è¡ããŠå®è¡ããå Žåãæãé·ãã¯ãšãªã®èšç®æéãããããŸãïŒãå¿çæéãäžååã«ãªããŸãã
ãã®åé¡ã®è§£æ±ºçã¯ãã£ãã·ã³ã°ã§ããèšç®çµæããåªããæ å ±ã¢ã¯ã»ã¹æéç¹æ§ãåããã¹ãã¬ãŒãžïŒmemcachedãªã©ïŒã«æ ŒçŽããŸãã ããã§ãäœéã§è€éã§éãããã¯ãšã³ãã«ã¢ã¯ã»ã¹ãã代ããã«ãé«éãã£ãã·ã¥ã®ãªã¯ãšã¹ããå®äºããã ãã§ååã§ãã
Memcachedãšãã£ãã·ã¥
å±ææ§ã®åç
é»åããã€ã¹ããœãããŠã§ã¢ã¢ãŒããã¯ãã£ïŒCPUãã£ãã·ã¥ïŒç¬¬1ã¬ãã«ããã³ç¬¬2ã¬ãã«ïŒãããŒããã£ã¹ã¯ãããã¡ãŒããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã£ãã·ã¥ãã«ãŒã©ãžãªã®ãããã¡ãŒã®ã©ãã«ã§ããã£ãã·ã¥ãŸãã¯ãã£ãã·ã¥ã¢ãââããŒãããããŸãã ãã®ãããªãã£ãã·ã¥ã®æåã決å®ãããã®ã¯äœã§ããïŒ çãã¯å±ææ§ã®ååã«ãããŸããããã°ã©ã ãããã€ã¹ã®å Žåãäžå®ã®æéãå ±éã»ããã®ããŒã¿ã®ç¹å®ã®ãµãã»ãããåŠçããã®ãäžè¬çã§ãã RAMã®å Žåãããã¯ãããã°ã©ã ãã¢ãã¬ã¹100ã«ããããŒã¿ãåŠçããå Žåã次ã®åŒã³åºããã¢ãã¬ã¹10000ã§ã¯ãªããã¢ãã¬ã¹101ã102ãªã©ã«ããå¯èœæ§ãé«ãããšãæå³ããŸãã ããŒããã£ã¹ã¯ã§ãåãããšãèšããŸãïŒæ¯èŒçå°ããªãã¡ã€ã«ã»ããã§ã¯ãªããããŒããã£ã¹ã¯ã®ãã¹ãŠã®ã³ã³ãã³ãã§ããã°ã©ã ãäžæç¹ã§åäœããŠããå Žåããããã¡ã¯æåŸã®èªã¿åãã»ã¯ã¿ã«é£æ¥ããé åããã®ããŒã¿ã§æºããããŸããããããã¡ã¯ç¡æå³ã§ãã ã«ãŒã©ãžãªãããã¡ãŒã¯ããã£ã¹ã¯ããé³æ¥œã®æ¬¡ã®æ°åãå åãããŸããããã¯ãé³æ¥œã»ãããªã©ãã¹ããããããããé³æ¥œãã¡ã€ã«ãé çªã«èŽãå¯èœæ§ãé«ãããã§ãã
Webãããžã§ã¯ãã®å Žåããã£ãã·ã³ã°ã®æåã¯ããµã€ãã«åžžã«æã人æ°ã®ããããŒãžãããããšãäžéšã®ããŒã¿ããã¹ãŠãŸãã¯ã»ãŒãã¹ãŠã®ããŒãžã§äœ¿çšãããŠããããšãã€ãŸããä»ã®ãµã³ãã«ãããé »ç¹ã«èŠæ±ããããµã³ãã«ãããããšã«ãã£ãŠæ±ºãŸããŸãã ãã£ãã·ã¥ãæ§ç¯ããããã«ãããã¯ãšã³ããžã®è€æ°ã®åŒã³åºãã1ã€ã®åŒã³åºãã«çœ®ãæããŸãããã®åŸããã¹ãŠã®åŸç¶ã®åŒã³åºãã¯é«éå®è¡ãã£ãã·ã¥ãéããŠè¡ãããŸãã
ãã£ãã·ã¥ã¯åžžã«å ã®ããŒã¿ãœãŒã¹ãããåªããŠããŸããCPUãã£ãã·ã¥ã¯RAMãããæ¡éãã«é«éã§ãããRAMããã£ãã·ã¥ã»ã©éãããããšã¯ã§ããŸãããçµæžçã«éå¹ççã§æè¡çã«å°é£ã§ãã ããŒããã£ã¹ã¯ãããã¡ã¯ãããŒããã£ã¹ã¯èªäœãããã¯ããã«é«éã«ããŒã¿ã®èŠæ±ãæºãããŸããããããã¡ã«ã¯é»æºãââãªãã«ãªã£ããšãã«ããŒã¿ãä¿åããæ©èœããããŸããããã®æå³ã§ã¯ãããã€ã¹èªäœãããå£ã£ãŠããŸãã åæ§ã®ç¶æ³ã¯ãWebã§ã®ãã£ãã·ã¥ã®å Žåã§ãããã£ãã·ã¥ã¯ããã¯ãšã³ããããé«éã§å¹ççã§ãããéåžžããµãŒããŒã®åèµ·åãŸãã¯ã¯ã©ãã·ã¥ãçºçããå Žåã«ããŒã¿ãä¿åã§ãããçµæãèšç®ããããžãã¯ããããŸããã以åã«å ¥ãããã®ã
Memcached
Memcachedã¯ããããã¯ãŒã¯ãããã³ã«çµç±ã§ã¢ã¯ã»ã¹å¯èœãªRAMå ã®å·šå€§ãªããã·ã¥ããŒãã«ã§ãã ããŒã«é¢é£ä»ããããå€ãä¿åãããµãŒãã¹ãæäŸããŸãã åçŽãªãããã¯ãŒã¯ãããã³ã«ãä»ããŠããã·ã¥ã«ã¢ã¯ã»ã¹ããŸã;ã¯ã©ã€ã¢ã³ãã¯ãä»»æã®ããã°ã©ãã³ã°èšèªã§èšè¿°ãããããã°ã©ã ã«ããããšãã§ããŸãïŒC / C ++ãPHPãPerlãJavaãªã©ã®ã¯ã©ã€ã¢ã³ãããããŸãïŒã
æãç°¡åãªæäœã¯ãæå®ãããããŒã®å€ãååŸïŒgetïŒãããŒã®å€ãèšå®ïŒsetïŒãããã³ããŒãåé€ïŒdelïŒããããšã§ãã ã¢ãããã¯æäœã®ãã§ãŒã³ãå®è£ ããã«ã¯ïŒäžŠåããã»ã¹ããmemcachedãžã®åæã¢ã¯ã»ã¹ã®å¯Ÿè±¡ïŒãè¿œå ã®æäœã䜿çšãããŸãïŒããŒå€ã®ã€ã³ã¯ãªã¡ã³ã/ãã¯ãªã¡ã³ãïŒincr / decrïŒãããŒå€ãžã®ããŒã¿ã®å é ãŸãã¯æ«å°Ÿãžã®è¿œå ïŒappend / prependïŒãã¢ãããã¯ãã³ãã«å€ã®ååŸ/èšå®ïŒgets / casïŒãªã©ã
Memcachedã¯ãLiveJournalãããžã§ã¯ãã®äžéšãšããŠBrad Fitzpatrickã«ãã£ãŠå®è£ ãããŸããã ããŒãžã³ã³ãã³ããè¿ããšãã«ãã¯ãšãªããããŒã¿ããŒã¹ããªãããŒãããããã«äœ¿çšãããŸããã ä»æ¥ãmemcachedã¯ããŠã£ãããã£ã¢ãYouTubeãFacebookãªã©ã®å€ãã®å€§èŠæš¡ãããžã§ã¯ãã®ã³ã¢ã§ãã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠããŸãã
äžè¬çãªãã£ãã·ã¥ã¹ããŒã
![å³1](https://habrastorage.org/getpro/habr/post_images/8b2/10b/953/8b210b95380dbf345ab004fc8d8f55dd.gif)
äžè¬ã«ããã£ãã·ã¥ã¹ããŒã ã¯æ¬¡ã®ãšããã§ããããã³ããšã³ãïŒãŠãŒã¶ãŒãžã®å¿çã圢æãããããžã§ã¯ãã®äžéšïŒã¯ãäœããã®ããŒã¿ãååŸããå¿ èŠããããŸãã ããã³ããšã³ãã¯ããã§ãããã£ãã·ã¥ïŒååŸèŠæ±ïŒã®ããã«ããŒã¿ãŒmemcachedãµãŒããŒãšããŠé«éã«ã¢ã¯ã»ã¹ããŸãã 察å¿ããããŒãèŠã€ãã£ãå Žåãäœæ¥ã¯ããã§çµäºããŸãã ãã以å€ã®å Žåã¯ãéããé ãã匷åãªïŒè±¡ã®ãããªïŒããã¯ãšã³ãã«ã¢ããŒã«ããå¿ èŠããããŸããããã¯ãããŒã¿ããŒã¹ã«ãã£ãŠæãé »ç¹ã«åçãããŸãã çµæã¯ããã«memcachedã«ãã£ãã·ã¥ïŒã»ãããªã¯ãšã¹ãïŒãšããŠæžã蟌ãŸããŸãã ãã®å ŽåãããŒã¯éåžžããã£ãã·ã¥ã®ãªã»ããã®ç¬éã«å¯Ÿå¿ããæ倧æå¹æéïŒæå¹æéïŒã«èšå®ãããŸãã
ãã®æšæºãã£ãã·ã³ã°ã¹ããŒã ã¯åžžã«å®è£ ãããŸãã memcachedã®ä»£ããã«ãäžéšã®ãããžã§ã¯ãã¯ããŒã«ã«ãã¡ã€ã«ãä»ã®ã¹ãã¬ãŒãžã¡ãœããïŒå¥ã®ããŒã¿ããŒã¹ãPHPã¢ã¯ã»ã©ã¬ãŒã¿ãã£ãã·ã¥ãªã©ïŒã䜿çšããå ŽåããããŸãããã ããåŸã§ç€ºãããã«ãè² è·ã®é«ããããžã§ã¯ãã§ã¯ãã®ã¹ããŒã ã¯æãå¹ççãªæ¹æ³ã§åäœããªãå ŽåããããŸãã ããã«ãããããããä»åŸã®è©±ã§ã¯ããã®ã¹ããŒã ã«æ£ç¢ºã«äŸåããŸãã
Memcachedã¢ãŒããã¯ãã£
memcachedã¯ã©ã®ããã«é 眮ãããŠããŸããïŒ ãµã€ãã®1ããŒãžãåŠçããæ°å件ã®memcachedãªã¯ãšã¹ãã§ãããå€§å¹ ãªé 延ã«ã€ãªãããªãã»ã©é«éã«åäœããæ¹æ³ åæã«ãmemcachedã¯ã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ã«å¯ŸããŠéåžžã«èŠæ±ãå³ãããããŸãããããŒããããã€ã³ã¹ããŒã«ã§ã¯ãmemcachedã«ãã£ãŠäœ¿çšãããããã»ããµæéã10ïŒ ãè¶ ããããšã¯ãã£ãã«ãããŸããã
ãŸããmemcachedã¯ããã¹ãŠã®æäœãã¢ã«ãŽãªãºã ã®è€éãOïŒ1ïŒãæã€ããã«èšèšãããŠããŸãã æäœã®å®è¡æéã¯ãmemcachedãä¿åããããŒã®æ°ã«äŸåããŸããã ããã¯ãå®è£ ã«ç·åœ¢ïŒOïŒnïŒïŒæéã®ã¿ãå¿ èŠãªå Žåãäžéšã®æäœïŒãŸãã¯æ©èœïŒãååšããªãããšãæå³ããŸãã ãããã£ãŠãmemcachedã«ã¯ããŒãããã©ã«ãã«ãçµåããæ©èœããããŸãããã€ãŸãã ããŒã®ã°ã«ãŒãåãããŒãŸãã¯ãã®å€ã«å¯Ÿããã°ã«ãŒãæäœãèŠã€ãããŸããã
äž»ãªæé©åãããæäœã¯ãããŒãæ ŒçŽããããã®ã¡ã¢ãªãããã¯ã®å²ãåœãŠ/å²ãåœãŠè§£é€ã§ãããã¡ã¢ãªãäžè¶³ããŠãããšãã«ãã£ãã·ã¥ãã¯ãªã¢ããããã®æãæªäœ¿çšã®ããŒïŒLRUïŒã®ããªã·ãŒã決å®ããŸãã ããŒã®æ€çŽ¢ã¯ããã·ã¥ãä»ããŠè¡ããããããè€éãã¯OïŒ1ïŒã§ãã
éåæå ¥åºåã䜿çšãããã¹ã¬ããã¯äœ¿çšãããªããããããã©ãŒãã³ã¹ãåäžãããªãœãŒã¹èŠä»¶ãäœããªããŸãã å®éãmemcachedã¯ã¹ã¬ããã䜿çšã§ããŸãããããã¯ãè² è·ã倧ããããå Žåã«ãµãŒããŒã§äœ¿çšå¯èœãªãã¹ãŠã®ã³ã¢ãŸãã¯ããã»ããµã䜿çšããå Žåã«ã®ã¿å¿ èŠã§ãããããã®å Žåããæ¥ç¶ããšã«ã¹ã¬ããã¯äœæãããŸããã
å®éãmemcachedãµãŒããŒã®å¿çæéã¯ãããã¯ãŒã¯ã³ã¹ãã«ãã£ãŠã®ã¿æ±ºå®ãããããã³ããšã³ãããmemcachedãµãŒããŒïŒRTTïŒã«ãã±ãããéä¿¡ããã®ã«ããã£ãæéãšã»ãŒçãããšèšããŸãã ãã®ãããªç¹åŸŽã«ãããmemcachedãè² è·ã®é«ãWebãããžã§ã¯ãã§äœ¿çšããŠãããŒã¿ãã£ãã·ã³ã°ãªã©ã®ããŸããŸãªåé¡ã解決ã§ããŸãã
ããŒçŽå€±
Memcachedã¯ä¿¡é Œã§ããã¹ãã¬ãŒãžã§ã¯ãããŸãã-æå¹æéãåããåã«ããŒããã£ãã·ã¥ããåé€ãããå¯èœæ§ããããŸãã ãã®ãããªç¶æ³ã«åããŠããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ãæºåããããŒã®çŽå€±ã«æè»ã«å¯Ÿå¿ããå¿ èŠããããŸãã ããŒã倱ãããäž»ãªçç±ã¯3ã€ãããŸãã
- ä»ã®ããŒã®å€ãä¿åããããã®ã¡ã¢ãªãäžè¶³ããŠãããããããŒã¯ãã®æå¹æéããåã«åé€ãããŸããã Memcachedã¯LRUããªã·ãŒã䜿çšããããããã®æ倱ã¯ãã®ããŒãã»ãšãã©äœ¿çšãããããã£ãã·ã¥ã¡ã¢ãªã解æŸãããŠããäžè¬çãªããŒãä¿åã§ããããšãæå³ããŸãã
- ããŒã¯ããã®æå¹æéãåããããåé€ãããŸããã å³å¯ã«èšãã°ãããŒã®æå¹æéãå¶éããŠããããããã®ç¶æ³ã¯æ倱ã§ã¯ãããŸããããmemcachedã³ãŒãã«é¢ããã¯ã©ã€ã¢ã³ãã®å Žåããã®ãããªæ倱ã¯ä»ã®ã±ãŒã¹ãšåºå¥ã§ããŸãã-memcachedã«ã¢ã¯ã»ã¹ãããšãããã®ãããªããŒã¯ãããŸããããšããçããè¿ãããŸãã
- æãäžå¿«ãªç¶æ³ã¯ãmemcachedããã»ã¹ãŸãã¯ãããé 眮ãããŠãããµãŒããŒã®åŽ©å£ã§ãã ãã®ç¶æ³ã§ã¯ããã£ãã·ã¥ã«ä¿åããããã¹ãŠã®ããŒã倱ãããŸãã ã¯ã©ã¹ã¿ãŒæ§æã§ã¯ããããžã§ã¯ãããŒããæ¡æ£ãããå€ãã®memcachedãµãŒããŒã®åœ±é¿ãå°ãç·©åã§ããŸãããã®ããã1ã€ã®ãã£ãã·ã¥ã®é害ã®åœ±é¿ã¯ç®ç«ããªããªããŸãã
memcachedã§åäœãããœãããŠã§ã¢ãéçºãããšãã¯ã説æãããŠãããã¹ãŠã®ç¶æ³ã«çæããå¿ èŠããããŸãã memcachedã«æ ŒçŽãããŠããããŒã¿ã¯ãæ倱ã®é倧床ã«å¿ããŠåé¢ã§ããŸãã
ã倱ãå¯èœæ§ããããŸãã ã ãã®ã«ããŽãªã«ã¯ãããŒã¿ããŒã¹ãã§ããã®ãã£ãã·ã¥ãå«ãŸããŸãã ãã®ãããªããŒãçŽå€±ããŠãããã»ã©å¿é ããããšã¯ãããŸãããããã¯ãšã³ãã«å床ã¢ã¯ã»ã¹ããããšã§ç°¡åã«å€ã埩å ã§ããããã§ãã ãã ããé »ç¹ã«ãã£ãã·ã¥ã倱ããããšãããŒã¿ããŒã¹ãžã®éå°ãªåŒã³åºããçºçããŸãã
ãè² ããããªãã ããã§ã¯ããµã€ã蚪åè ããªãœãŒã¹ãã¥ãŒãªã©ã®ã«ãŠã³ã¿ãŒã«èšåã§ããŸãã ãããã®å€ãçŽæ¥åŸ©å ããããšã¯çŽæ¥äžå¯èœãªå ŽåããããŸããããããã®ããŒã®å€ã«ã¯æéå¶éã®æå³ããããŸããæ°ååŸããããã®å€ã¯é¢ä¿ããªããªããæ°ããå€ãèšç®ãããŸãã
ã圌ãã¯ãŸã£ãã倱ãã¹ãã§ã¯ãããŸãã ã ã Memcachedã¯ãŠãŒã¶ãŒã»ãã·ã§ã³ãä¿åããã®ã«äŸ¿å©ã§ããããã³ããšã³ãã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®ãµãŒããŒãããã¹ãŠã®ã»ãã·ã§ã³ã«çããã¢ã¯ã»ã¹ã§ããŸãã ãã®ãããã»ãã·ã§ã³ã®å 容ã倱ãããšã¯çµ¶å¯Ÿã«ãããŸãããããããªããšããµã€ãã®ãŠãŒã¶ãŒã¯ããã°ã¢ãŠãããããŸãã åé¿ããæ¹æ³ ã¯ã©ã¹ã¿ãŒããè€æ°ã®memcachedãµãŒããŒã§ã»ãã·ã§ã³ããŒãè€è£œã§ãããããæ倱ã®å¯èœæ§ãäœããªããŸãã