ã¯ã©ãŠãããŒã¹ã®VLSI Webã¢ããªã±ãŒã·ã§ã³ã®ãã©ãããã©ãŒã ïŒäžéšã®åºç€ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ã®ããŒã¹ãšãªããã¬ãŒã ã¯ãŒã¯ïŒã®äœæã®ã»ãŒæåã«ããµãŒããŒããã®ã€ãã³ãããŠãŒã¶ãŒã«éç¥ã§ããããŒã«ãªãã§ã¯çããŠããã®ã¯ããªãé£ããããšãèªèããŸããã ç§ãã¡ã¯çãååïŒ10ã¡ãŒãã«ãæ©ãã®ãé¢åïŒããã®æ°ããã¡ãã»ãŒãžãããã«èŠãããšæã£ãŠããŸãã ãããããªããŸã§ã®éã®ãã¯åä»ãªãã®ã ã£ãã®ã§ããŠãŒã¶ãŒããã®åææ¥ç¶ã5.0e3ãã1.0e6ã«æé·ãããšãã«çŽé¢ããå°é£ã«ã€ããŠå°ã話ããŸãããã
![](https://habrastorage.org/webt/di/pa/yz/dipayzml4jsvzsq8uladrqrh_c8.png)
éå§ãã
ãé¡ã®ã解決çã¯ããµãŒããŒåŽã®ãã©ãŠã¶ããã®å®æçãªèª¿æ»ãããããŸããã ãããããã§ã«ïŒ2013幎ã人ã ããŸã Harlem Shakeã®äžã§ã¯ãªãããæ®åœ±ããŠãããšãïŒç§ãã¡ã¯ããŸããŸãªãµãŒãã¹ãå©çšããŠãããããå®æçãªèª¿æ»ã«ãã1ç§ãããã®ãªã¯ãšã¹ãã®ã¡ããªãã¯ãå€§å¹ ã«åäžããŸããã ãããã£ãŠã質åã¯ãä»»æã®ãµãŒãã¹ã®ä»»æã®ããã¯ãšã³ããä»»æã®ãŠãŒã¶ãŒã«ããŒã¿ãéä¿¡ã§ããããã«ããäžéã¹ãŒããŒãµãŒãã¹ããçããŸããïŒéã®çžäºäœçšã¯HTTPçµç±ã§æ©èœããŸãïŒã
åœæããŠã§ããœã±ããã¯ãã§ã«ååãªäººæ°ãåŸãŠãããããå šäœçãªè² è·ã軜æžããããã«ããŠãŒã¶ãŒã®ãã©ãŠã¶ãžã®æ å ±é ä¿¡ã®é 延ãæå°éã«æããããšãã§ããŸããã ããããæ®å¿µãªããããæ°ã«å ¥ãã®ãŠãŒã¶ãŒã«äººæ°ã®ãããã¹ãŠã®ãã©ãŠã¶ãŒãWebãœã±ããããµããŒãããŠããããã§ã¯ãªãããïŒãã¹ãŠã®ãããã·ãä»å±ç©ã§ããããèŠã€ããããšãã§ããªãããã§ã¯ãããŸããïŒãXHRããŒãªã³ã°ãXHRã¹ããªãŒãã³ã°ãªã©ã®ããäžè¬çãªãã¯ãããžãŒã®ãµããŒããå¿ èŠã§ããã
ãã®ãµãŒãã¹ã¯ãæšæ¥ãå¿ èŠã ã£ããããéçºæŠç¥ããã²ãããšçç£ãã«ãªããªãããã«ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ãæ¢ãããšã«ããŸããã æ€çŽ¢ã®çµæãRabbitMQãããŒã«ãŒã«ç§»åããŸããããã®ãããŒã«ãŒã«ã¯ãWebç°å¢ãæäœããããã®ãã©ã°ã€ã³ïŒWeb STOMPã¢ããã¿ãŒãšSockJSïŒãæ¢ã«ãããŸããã 1ã€ç®ã¯AMQPãã€ããªãããã³ã«ãããã¹ãSTOMPã«é¢é£ä»ããããšãã§ãã2ã€ç®ã¯ãŠãŒã¶ãŒãšã®Webãœã±ããã®ãããªæ¥ç¶ã確ç«ããããšãå¯èœã«ããŸãïŒãµããŒããããŠãããã©ã³ã¹ããŒãã®éžæãæ åœããŸãïŒã å®ãå€ãååãæåŸ ããŠãããã€ãã®ããŒãã®ã¯ã©ã¹ã¿ãŒãå±éããŠãã¹ãããŸããã RabbitMQã¯åæºãããããã«åºã¥ããŠãŠãŒã¶ãŒéç¥ã·ã¹ãã ãæ§ç¯ããããšã«ããŸããã æåã¯ãã¹ãŠé 調ã§ããããWebã¢ããªã±ãŒã·ã§ã³ã®æ©èœã®éçºãšã¢ã¯ãã£ããŠãŒã¶ãŒã®æ°ã®å¢å ãããæã¯ã³ãŒããŒã ãã§ã¯å§ãŸããªãããšããããå§ããŸããã
RabbitMQã«ã€ããŠäžèš
RabbitMQã¯ãã«ããããã³ã«ã¡ãã»ãŒãžãããŒã«ãŒã§ãããåããŒããèªã¿åãããã³æžã蟌ã¿èŠæ±ãåŠçã§ããè€æ°ã®ããŒããžã®å®å šãªããŒã¿ã¬ããªã±ãŒã·ã§ã³ãåãããã§ãŒã«ã»ãŒãã¯ã©ã¹ã¿ãŒãç·šæã§ããŸãã Erlangã§æžãããŠããã AMQPãããã³ã«ããŒãžã§ã³0.9ãäž»ãªãã®ãšããŠäœ¿çšããŠããŸãã AMQPã®ãªããžã§ã¯ãã®çžäºäœçšã®ç°¡åãªå³ãèããŠã¿ãŸãããã
å³ 1. AMQPã®ãªããžã§ã¯ãã®çžäºäœçšã
ãã¥ãŒã¯ãã¹ãŠã®çä¿¡ã¡ãã»ãŒãžãä¿åããã³ã³ã·ã¥ãŒããŒã«æäŸããŸãã ãšã¯ã¹ãã§ã³ãžã£ãŒïŒãšã¯ã¹ãã§ã³ãžïŒã¯ããã¥ãŒïŒãŸãã¯ä»ã®ãšã¯ã¹ãã§ã³ãžã£ãŒ ïŒãšã®éã«äœæããããªã³ã¯ïŒãã€ã³ãã£ã³ã°ïŒã«åºã¥ããŠã¡ãã»ãŒãžãã«ãŒãã£ã³ã°ããŸãïŒä¿åããŸããïŒã RabbitMQã®èŠ³ç¹ããèŠããšããã¥ãŒã¯ç¶æ ïŒã¡ãã»ãŒãžèªäœããã£ãã·ã¥ã§ããïŒãæã€Erlangããã»ã¹ã§ããã亀ææ©ã¯ã«ãŒãã£ã³ã°ããžãã¯ãååšããã³ãŒããæã€ã¢ãžã¥ãŒã«ãžã®ããªã³ã¯ãã§ãã ã€ãŸããããšãã°ã10,000åã®ãã¥ãŒããã§ã«çŽ800 MBã§ããå Žåã10,000åã®äº€ææ©ãçŽ12 MBã®ã¡ã¢ãªãæ¶è²»ããŸãã
ã¯ã©ã¹ã¿ãŒã¢ãŒãã§ã¯ ãã¡ã¿æ å ±ããã¹ãŠã®ããŒãã«ã³ããŒãããŸãã ã€ãŸããåããŒãã«ã¯ã亀ææ©ããã¥ãŒããããã®æ¥ç¶ãã³ã³ã·ã¥ãŒããŒãããã³ãã®ä»ã®ãªããžã§ã¯ãã®å®å šãªãªã¹ããå«ãŸããŠããŸãã ãã¥ãŒèªäœã®ããã»ã¹ã¯ããã©ã«ãã§1ã€ã®ããŒãã«ã®ã¿é 眮ãããŸãããããªã·ãŒã®å©ããåããŠã¬ããªã±ãŒã·ã§ã³ïŒ ãã©ãŒåããããã¥ãŒ ïŒãæå¹ã«ã§ããããŒã¿ã¯å¿ èŠãªæ°ã®ããŒãã«èªåçã«ã³ããŒãããŸãã
çŽ æŽãªå®è£
æåã®å®è£ ã¯éåžžã«ç°¡åã§ããïŒ
- ããã¯ãšã³ããšã¯ã©ã€ã¢ã³ãã®äž¡æ¹ãæ¥ç¶ããã3ããŒãã®RabbitMQã¯ã©ã¹ã¿ãŒã
- éå§æã«ãããã¯ãšã³ãã¯ãã€ãã³ãã®ååïŒãonline.sbis.ru:contacts.new-messageããªã©ã®Webãµã€ãã®ååãå«ãïŒãšçŽæ¥ã¿ã€ãã䜿çšããŠäº€ææ©ãäœæããŸããã
- ã¯ã©ã€ã¢ã³ãã¯SockJSãä»ããŠæ¥ç¶ãããŠãŒã¶ãŒIDãšçããããŒã§å¯Ÿå¿ãã亀ææ©ã«ãµãã¹ã¯ã©ã€ãããããšã«ãããå¿ èŠãªã€ãã³ããããªã¹ãã³ã°ãããŸããã
- ã€ãã³ããçºçããæç¹ã§ãããã¯ãšã³ãã¯AMQPã¡ãã»ãŒãžã察å¿ãã亀ææ©ã«éä¿¡ããŸããã ã¡ãã»ãŒãžã«ã¯ãã«ãŒãã£ã³ã°ããŒãšããŠåä¿¡è èå¥åããããŸããã
æŠç¥çã«ã¯ããã¹ãŠæ¬¡ã®ããã«ãªããŸããã
å³ 3.ãããŒã«ãŒå
ã®ãªããžã§ã¯ãã®ã¹ããŒã ã
AMQPã«ã¯ããã¡ã³ã¢ãŠãããã€ã¬ã¯ãããããã¯ãšãã3ã€ã®äž»èŠãªã¿ã€ãã®äº€ææ©ããããŸãã
æãåçŽã§æéã®ã¿ã€ãã¯ãã¡ã³ã¢ãŠãã§ãã ãããšã®éä¿¡ã«ã¯ãã©ã¡ãŒã¿ãŒããªããã¡ãã»ãŒãžã®åä¿¡ã«ã¯ãã©ã¡ãŒã¿ãŒã®ååšã®ã¿ãéèŠã§ãã
å³ 4.ãã¡ã³ã¢ãŠããšã¯ã¹ãã§ã³ãžã£ãŒã
ããã§ãç¹ç·ã¯æ¥ç¶ã瀺ããç·ã®ç·ã¯éä¿¡ãã¹ã§ãã ãã¹ãŠã®ãã¥ãŒã«ã³ããŒãããŸãã
çŽæ¥äº€ææ©ã®å Žåãæ¥ç¶ãäœæãããšãã«ãã¡ãã»ãŒãžãåä¿¡ããåè£ã®éžæã«é¢äžããæååããŒã瀺ãããŸãã 圌ã®äœåã®é床ã¯ãã¡ã³ã¢ãŠãã®é床ãããããã«å£ã£ãŠããŸãã ã¡ãã»ãŒãžãå ¬éããããšãã«ãŒãã£ã³ã°ããŒã瀺ããããã®ããŒãéä¿¡ããŒãšå®å šã«äžèŽããå Žåãæçµãã¥ãŒã¯ã¡ãã»ãŒãžãåä¿¡ããŸãã
å³ 5.ãã€ã¬ã¯ããšã¯ã¹ãã§ã³ãžã£ãŒã
ãããã¯ã¯ãããŒãåãªãæååãšããŠã§ã¯ãªãããããã§åºåãããããŒã¯ã³ã®ã»ãããšããŠèŠãªããŸãã ã¢ã¹ã¿ãªã¹ã¯èšå·ã䜿çšããŠãããŒã¯ã³å€ãéèŠã§ãªãããšã瀺ãããšãããŒãå以äžã®ããŒã¯ã³ã眮ãæãããã³ãèšå·ã䜿çšããããšãã§ããŸãã
å³ 6.ãããã¯ãšã¯ã¹ãã§ã³ãžã£ãŒã
ãã®ãããªäº€ææ©ã®é床ã¯ãããŒã®è€éããšãã®äžã®ããŒã¯ã³ã®æ°ã«äŸåããæãåçŽãªå ŽåãçŽæ¥äº€ææ©ã®é床ã«äŒŒãŠããŸãã
å¥ã®ã¿ã€ãã®äº€ææ©ããããŸã-ããããŒã§ãããäœæ¥ã®é床ã®ããã«äœ¿çšããããšã¯ãå§ãããŸããã®ã§ãçç¥ããŸãããã
ã€ãã³ãã®æé·
åœæããã©ãŠã¶ã®ã¯ã©ã€ã¢ã³ãã³ãŒãã¯1ããŒãžãããå¹³åã§çŽ10åã®ã€ãã³ããããªãã¹ã³ãããŠããŸããããæé·ã«ã¯ããã»ã©æéã¯ããããŸããã§ããïŒããšãã°ãã¡ã€ã³ããŒãžã«çŽ70åãããããŸããïŒã äºæž¬äžå¯èœãªç掻ã«çã¿ãå ããŸã-ãã€ã§ããã©ããªæéééã§ãã€ãã³ããå¿ èŠã«ãªãå ŽåããããŸãã
ãã ããSTOMPãä»ããŠä»»æã®äº€ææ©ã«ãµãã¹ã¯ã©ã€ããããšã亀ææ©ã«æ¢ã«é¢é£ä»ããããŠãããã¥ãŒãèªåçã«äœæããããšããäºå®ã«ãã£ãŠãäž»ãªåé¡ã¯ãã¡ããäœæãããŸããã ãããŠããã®ãããªãµãã¹ã¯ãªãã·ã§ã³ã30åããå ŽåãïŒ1ã€ã®æ¥ç¶å ã«ïŒ30åã®ãã¥ãŒããããæ¶è²»ããããªãœãŒã¹ãšãã©ãŒã®OOMãµãŒãã¹ãžã®åŒã³åºãã®é »åºŠã«åœ±é¿ãäžãã以å€ã«ãããŸããã
ãã®åé¡ã解決ããããã«ãã¢ãããŒããå€æŽããAMQPã¡ãã»ãŒãžèªäœã®ããããŒå ã®äº€ææ©ã®ååããã€ãã³ãã®ååãåé€ããŸããã æ§é ã¯åçŽåããã次ã®ããã«ãªãå§ããŸããã
å³ 7.æåã®æ¹ååŸã®ãªããžã§ã¯ãã®æ§é ã
ãããã£ãŠãããŒãžäžã®ã€ãã³ãã®æ°ãžã®äŸåãåé€ãããŠãŒã¶ãŒããã®ãµãã¹ã¯ãªãã·ã§ã³ã1ã€ã ãå¿ èŠã«ãªããŸããã ããããæ°ããã¢ãããŒãã§ã¯ãã€ãã³ãããŠãŒã¶ãŒã«é ä¿¡ãããŠåããŠãŠãŒã¶ãŒã«ã€ãã³ããå¿ èŠãã©ãããç解ã§ããããããã©ãã£ãã¯ãç ç²ã«ããªããã°ãªããŸããã§ããã
åºçãšãªã¢
ç§ãã¡ã®ã·ã¹ãã ã«ã¯ãã顧客ãïŒåœç€Ÿã®è£œåã䜿çšããäŒç€ŸïŒãšããŠãŒã¶ãŒãïŒé¡§å®¢ã®åŸæ¥å¡ïŒã®æŠå¿µããããŸãã äŒæ¥ã¯å®å šã«ç°ãªã£ãŠããã誰ããæ°äººã®åŸæ¥å¡ãæ±ããŠããäžæ¹ã§ã誰ãã2人ãŸãã¯3人ã®åŸæ¥å¡ãæ±ããŠããå ŽåããããŸãã ã¯ã©ã€ã¢ã³ãã®ãã¹ãŠã®ãŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ãããå Žåã¯ããªã¹ãå šäœããµã€ã¯ã«ã§ç¢ºèªããå¿ èŠããããæéãããããŸãã ãããã£ãŠãããã§äœããããããšãæ¥åã§ããã
解決çã¯ããŠãŒã¶ãŒãã¯ã©ã€ã¢ã³ãããããŠãã¹ãŠã®äººã«åãã3ã€ã®åºçåéãäœæããããšã§ããã ã·ã¹ãã æ å ±ãéä¿¡ããã«ã¯ã°ããŒãã«ãšãªã¢ãå¿ èŠã§ããããšãã°ãããã¯ãšã³ããæŽæ°ããåŸã«ããŒãžããªããŒãããŠãã ããã åãšãªã¢ã¯ãçŽæ¥ã¿ã€ãã®äº€ææ©ãšããŠRabbitMQã«å®è£ ãããã¯ã©ã€ã¢ã³ãã«è€æ°ã®ãµãã¹ã¯ãªãã·ã§ã³ãå床è¡ãããªãããã«ããã¡ã³ã¢ãŠãã¿ã€ãã®å¥ã®äº€ææ©-ããŒãœãã«ãŠãŒã¶ãŒäº€ææ©ãè¿œå ãããŸããã
å³ 8.åºçç©ã®é åãšããŒãœãã«ãšã¯ã¹ãã§ã³ãžã£ãŒãåãããªããžã§ã¯ãã®æ§é ã
ããŒãœãã«ãšã¯ã¹ãã§ã³ãžã£ãŒã¯å¿ èŠãªèå¥åã§ãšãªã¢ãšã¯ã¹ãã§ã³ãžã£ãŒã«é£çµ¡ãããŠãŒã¶ãŒã¯ãã©ã¡ãŒã¿ãŒãªãã§ããã«æ¥ç¶ããå¿ èŠããããŸããã ãã ãããŠãŒã¶ãŒããµãã¹ã¯ã©ã€ãããåã«ããŒãœãã«ãšã¯ã¹ãã§ã³ãžã£ãŒãäœæããå¿ èŠããããŸãããããããªããšãšã©ãŒãçºçããŸãã æ¢åã®ãã¹ãŠã®ãŠãŒã¶ãŒã«å¯ŸããŠãªããžã§ã¯ããäºåã«äœæããã®ã¯éåžžã«é«äŸ¡ã§ãã ãã®ãããæ¥ç¶æã«åçã«äœæããããšã«ããŸããã ãããè¡ãããã«ãNginxïŒRabbitMQã®åã«ç«ã€ïŒã§Luaã¹ã¯ãªãããäœæããããªã¯ãšã¹ãããããŒã«ãŒã«ãããã·ããåã«è£å©ãŠãŒãã£ãªãã£ããã«ããŸããã ãŠãŒãã£ãªãã£ã¯ãå¿ èŠãªãã¹ãŠã®ãã®ã®ååšããã§ãã¯ããäžåšã§äœæããŸããã ãã®åŸã圌ãã¯SockJSã«å¿ é ã®/ infoãªã¯ãšã¹ãã«å¯ŸããŠã®ã¿ãŠãŒãã£ãªãã£åŒã³åºããè¡ããŸããã
ãã¥ãŒã®èªååé€
æåã¯ãåæåŸã«èªåçã«åé€ããããã¥ãŒïŒèªååé€ïŒãäœæããŸããããããã«ãã2ã€ã®å€§ããªåé¡ãçºçããŸããã
ã³ãã¥ãã±ãŒã·ã§ã³ãå°ãéåããããããŸã å±ããŠããªãã¡ãã»ãŒãžã倱ããŸããã
- ç¹ã«ãµãã¹ã¯ãªãã·ã§ã³ã®æ°ãæé©åããããŸã§ããã¥ãŒããã³ãªã³ã¯ãäœæ/åé€ããããã«ãã·ã¹ãã ã§å€æ°ã®æäœãå®è¡ãããŸããã ã¯ã©ã¹ã¿ãŒã¢ãŒãã§ã¯ããã®ãããªå€§èŠæš¡ãªã¯ãŒã¯ãããŒããã¹ãŠã®ããŒãã«åºãããè² è·ãå¢å ããŸããã ãã®çŸè±¡ã¯ãã€ã³ãã£ã³ã°ãã£ãŒã³ãšåŒã°ããŸãã
ãã®çµæãåææã«åé€ãããªãã£ãæ°žç¶ãã¥ãŒã«åãæ¿ããŸãããããŠãŒã¶ãŒã5å以äžçå®ã«ãªã£ãå Žåããããã®æå¹æéããªã·ãŒãåæããŸããã ïŒãã®ã·ã¹ãã ã¯ããŠãŒã¶ãŒãæ°žä¹ ã«åä¿¡ãããã®ã§ã¯ãªãããŒã¿ãä¿åããããšãç®çãšããŠããããè¿ éãªé ä¿¡ã®ããã«ã®ã¿éçºãããŠããŸããïŒ
RabbitMQã¯ã©ã¹ã¿ãŒã®è² è·ã¯æžå°ããŸãããããŠãŒã¶ãŒã®æé·ã¯ç¶ç¶ããŠããŸãã åæãŠãŒã¶ãŒ5äžäººãè¶ ãããšãã·ã¹ãã ã¯ãªãœãŒã¹æ¶è²»ã®éçã«è¿ã¥ããŸããã ããäžåºŠå€æŽããå¿ èŠããããŸããã
ã¢ã©ãŒã2.0
以åã«åé¡ãçºçããåŸããã®å ŽåãRabbitMQã¯ã©ã¹ã¿ãŒã®ããŒããå¢ãããŠã¹ã±ãŒã«ã¢ããããããšã¯ãæé©ãªæ¹æ³ã§ã¯ãªãããšã«æ°ä»ããŸãã.1ã€ã®ããŒãã®åé¡ãä»ã®ããŒãã®ããã©ãŒãã³ã¹ã«åœ±é¿ããããŒã¿è€è£œã®ã¬ãã«ã§ã®äœããã®ãã©ãŒã«ããã¬ã©ã³ã¹ãã·ã¹ãã ã«å¿ èŠã§ã¯ãªãããã§ãã ããããäžæ¹ã§ãããã¯ãšã³ããæ¥ç¶ã®ããã®åäžã®ãã€ã³ããæã€ããšã¯éåžžã«äŸ¿å©ã§ãã ããã€ãã®è°è«ã®åŸãã·ã¹ãã ã2ã€ã®ã¬ã€ã€ãŒã«åå²ããå¿ èŠããããšããçµè«ã«éããŸããã1ïŒããã¯ãšã³ããæ¥ç¶ããããã®RabbitMQã¯ã©ã¹ã¿ãŒãšã2ïŒãŠãŒã¶ãŒãæ¥ç¶ããããã®ç¬ç«ããRabbitMQããŒãã ãã®çµæã次ã®ã¹ããŒã ããããŸãã
å³ 9. 2å±€é ç·å³ã
ãŠãŒã¶ãŒã¯Webãããã³ã«ãä»ããŠæ¥ç¶ãããããç¬ç«ãããµã€ãã«ã¯ãWebããšããååãä»ããããŸããã ãããã®ããŒãèªäœã¯ã RabbitMQ ãã©ã°ã€ã³Federationã䜿çšããŠã¯ã©ã¹ã¿ãŒã«æ¥ç¶ãããŸãã
å³ 10. 2å±€ã¹ããŒã ã®ãªããžã§ã¯ãã®æ§é ã
Webãµã€ãã§ã®ãã§ãã¬ãŒã·ã§ã³ã®ã»ããã¢ããã¯éåžžã«ç°¡åã§ãã
- ã¢ããã¹ããªãŒã ïŒã¢ããã¹ããªãŒã ããœãŒã¹ïŒãäœæããŸã;åäžããŒããšãã©ãŒã«ããã¬ã©ã³ã¹çšã®ããŒãã®ãªã¹ãã®äž¡æ¹ã§æ§æã§ããŸãã
- ãã®ãããªååãã³ãã¬ãŒããæã€äº€ææ©ã¯ã¢ããã¹ããªãŒã ãšåæããå¿ èŠããããšããããªã·ãŒãäœæããŸãã
ãã®åŸããã§ãã¬ãŒã·ã§ã³ã¯ã¢ããã¹ããªãŒã ããŒãã«æ¥ç¶ãããããã«ç¬èªã®ãã¥ãŒãäœæããå¿ èŠãªäº€ææ©ã«çœ²åããŸãããã®åŸãã¡ãã»ãŒãžãåä¿¡ããããŒã«ã«äº€ææ©ã§ããããè€è£œããŸãã
ãããã£ãŠãã¯ã©ã¹ã¿ãŒã®äº€ææ©ã§å ¬éãããã¡ãã»ãŒãžã¯ããã¹ãŠã®Webãµã€ãã®åã亀ææ©ã«éãããŸãã åŸè ã¯ããŠãŒã¶ãŒæ°ã«å¿ããŠã»ãŒçŽç·çã«ã¹ã±ãŒãªã³ã°ã§ããŸãã ãããïŒ
顧客ã®ååž
æãçæ³çãªã·ããªãªã¯ããã¹ãŠã®Webãµã€ãéã§ã®ã¯ã©ã€ã¢ã³ãæ¥ç¶ã®åäžãªåæ£ãšããã®ãã¡ã®1ã€ã®ã¿ãžã®ãå¿ å®åºŠãã§ããããã«ããããŠãŒã¶ãŒã®ãªãŒããŒããããåæžã§ããŸãã ãã ããããŒãã倱æããããšãå¿ããªãã§ãã ããããŠãŒã¶ãŒã¯ããã®ããŒãã修埩ããããŸã§åŸ ã€å¿ èŠã¯ãããŸããã Nåã®Webãµã€ãã®åã«ã¯ãMåã®ãã£ã¹ãããã£ããããŸãïŒNginxãå¿ èŠãªããã¯ãšã³ããžã®ãããã·èŠæ±ïŒã ãããŠãç§ãã¡ãããªããã°ãªããªãã£ãã®ã¯ããã£ã¹ãããã£ã®èšå®ãåäžã§ããããšã確èªãããŠãŒã¶ãŒIDã§ããã¯ãšã³ããéžæããããã«èšå®ããããšã§ãïŒããšãã°ã ããã·ã¥ãã£ã¬ã¯ãã£ãã䜿çšããŠïŒã
çµæã®ã¹ããŒã ã«ã¯æ¬ é¥ããªãããã§ã¯ãããŸããããæçµçã«ã¯ããå€ãã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸãã8ã€ã®Webãµã€ããžã®çŽ30äžã®åææ¥ç¶ã«èããããšãã§ããŸããã
ã¢ã©ãŒã3.0ïŒæ°ããåžæ
ãã§ãã¬ãŒã·ã§ã³ãã¹ããŒããªåæ¢ïŒ
ãã§ãã¬ãŒã·ã§ã³ã¯ããèªäœã§ãã¹ãŠãäœæãããšããç¹ã§äŸ¿å©ã§ããããã®ç®çã¯ããŒãéã®ãã©ãã£ãã¯ãæå°éã«ããããšã§ããããŸãã ãããã£ãŠãããã«ãã£ãŠå¶åŸ¡ããã亀ææ©ã«ããããŒã䜿çšããŠãã¢ããã¹ããªãŒã ã§ã®ã¿ãã¥ãŒã®æ¥ç¶ãäœæããŸãã ãããŠãç§ãã¡ã®å ŽåãããŒã¯ç¹å®ã®Webãµã€ãã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒã®æ°ã«ãããã®ã§ããããšãå€æããŸããã æ¥äžã¯5äžäººã«éããå¯èœæ§ããããŸãã ãŸããããããã®ããŒãã§åŽ©å£ãçºçããããåã«éè² è·ã«ãªã£ãå Žåããã®ãŠãŒã¶ãŒã¯ä»ã®ããŒãã§ãç¶æ¿ãã§ããŸãã
ããã«äœãããã®ã§ããããïŒ ãã ãã2ã€ã®ãã€ã³ãããããŸãã
- ã¢ããã¹ããªãŒã ããŒãïŒã¯ã©ã¹ã¿ãŒããŒãïŒã«ã¯ãã¢ã¯ãã£ããŠãŒã¶ãŒã®åèšæ°ã«çããéåžžã«å€ãã®æ¥ç¶ããããŸãããéä¿¡ãããã¡ãã»ãŒãžã«ã€ããŠã¯ãæåã«Webãµã€ãã®é¢å¿ã®ãããã¥ãŒãæ€çŽ¢ããå¿ èŠããããŸããã ãŠãŒã¶ãŒã®å¢å ã«äŒŽããããã¯ããã©ãŒãã³ã¹ã«åœ±é¿ããã ãã§ããã
- ãããŠãã±ãŒãã®ãã§ãªãŒã¯åæã§ãã Webãµã€ããåèµ·åããæ»ã£ãããŸãã¯å€±ãããã¢ããã¹ããªãŒã ãžã®æ¥ç¶ã埩å ããåŸããã§ãã¬ãŒã·ã§ã³ãã©ã°ã€ã³ã¯åæããã»ã¹ãéå§ããŸãããããã«ã¯éåžžæ°åããããŸããã ãã®éãã¯ã©ã¹ã¿ãŒããŒãã®ããã»ããµè² è·ãé«ããã¡ãã»ãŒãžé ä¿¡ã«é 延ãçºçããŸããã
代ããã«ãå¥ã®åæ§ã®ãã©ã°ã€ã³ã§ããShovelã詳ãã調ã¹ãããšã«ããŸããã ãã®ç®çã¯ãäžå¿ èŠãªãã©ãã«ãªãã«ïŒããããŒãã®ãã¥ãŒéã§ïŒãããããŒãããå¥ã®ããŒãã«ããŒã¿ã転éããããšã§ãã
亀ææã«ã¯ããããã¯ãŒã¯è² è·ãå¢å ããããšãäºæ³ãããŠããŸããããCPUã³ã¹ãã®åæžãšã¬ã€ãã³ã·ãŒã®åæžã«ã¯äŸ¡å€ããããŸããã ãã®çµæã皌åäžã®ã·ã¹ãã ãžã®ç§»è¡äžã«ãæ°ã®ã¬ãã€ãã®ã¡ã¢ãªã«ããã¯ã©ã¹ã¿ãŒããŒãã®æ¥æ¿ãªãééæ倱ãã«æ°ä»ããWebãµã€ãããªããŒãããŠãè¿œå ã®è² è·ã¯çºçããŸããã§ããã
ã¬ã€ã€ãŒéã®å€æ°ã®ãªã³ã¯
ãŠãŒã¶ãŒãšãµãŒãã¹ã®æ°ã®å¢å ã«å ããŠãã¢ã©ãŒãã·ã¹ãã ãæäŸããã¯ãã®Webãµã€ãã®æ°ãå¢å ããŠããŸãã æåã«ãããã3ã€ãã£ãå Žåããã®åŸãã®æ°ã¯10ã«å¢å ãã誰ãåæ¢ããŸããã§ããã ãªããžã§ã¯ãã®æ§é ã®æåŸã®å³ãããããããã«ãçŸåšã®å®è£ ã§ã¯ãæ¥ç¶ã®æ°ã¯æäŸããããµã€ãã®æ°ã«äŸåããããã«3åïŒå ¬éé åã®æ°ïŒã«äŸåããŸãã ããã«ãShovelãã©ã°ã€ã³ã¯ïŒãã§ãã¬ãŒã·ã§ã³ãã§ããããã«ïŒããªã·ãŒãä»ããŠæ©èœããªãããããããªã±ãŒã·ã§ã³ãšãªã¢ã®åãšã¯ã¹ãã§ã³ãžã£ãŒãäœæããåŸããã¹ãŠã®æ¥ç¶ãæåã§äœæããå¿ èŠããããŸãïŒããã¯ãŠãŒã¶ãŒãæ¥ç¶ãããšãã«å®è¡ãããåãã¹ã¯ãªããã«ãã£ãŠå®è¡ãããŸããïŒã ãã®äŸåé¢ä¿ãåãé€ãããã¹ãŠã®ãµã€ãã«1ã€ã®æ¥ç¶ã䜿çšããããšã¯å¯èœã§ããïŒ -å¿ èŠã§ãïŒ
ç§ãã¡ã¯ããã«å¥ã®ã¿ã€ãã®ãç®±ããåºããŠããã«ã亀ææ©ãæãåºããŸãã-ããããŒã ãªã圌ã¯ããã®ã¢ã·ã¹ã¿ã³ãã§ã¯ãªãã®ã§ããïŒ ãã®åäœã®ååã¯ãæ¥ç¶ãäœæãããšãç¹å®ã®ãã©ã¡ãŒã¿ãŒã»ãããšãã®å€ãèšå®ãããã¡ãã»ãŒãžããããŒã«ã瀺ãããäžèŽããå Žåã¯æ¥ç¶ãããªã¬ãŒããããšãããã®ã§ãã ãã®äŸã§ã¯ããµã€ãåãšå ¬éãšãªã¢ãšãã2ã€ã®ãã©ã¡ãŒã¿ãŒããããŸããã ããšãã°ã site = "online.sbis.ru"ããã³scope = "user"ã§ãã ãã®ãã¢ã¯ãéä¿¡çšãšéä¿¡çšã«èšå®ãããŠããŸãã åæ¢ããã®ã¯ããã®ãããªäº€ææ©ã®é床ãä»ã®äº€ææ©ãšæ¯ã¹ãŠé ããšããææžã®è¿œèšã ãã§ããã ãããã圌ãšã®ã€ãªããã¯ã»ãšãã©ãªããã¡ãã»ãŒãžã®æ°ã¯ããã»ã©å€ããããŸããã§ããã ãã¹ãã¯ã圌ãè² è·ã«éåžžã«ç²Ÿåçã«å¯ŸåŠããŠããããšã瀺ããŸããã ç§ãã¡ã¯ããã«åãæ¿ããããšã«ããŸããã
ãã¹ãã®æéãäžååã ã£ããããããããã®èŠæš¡ã®æåã®å€±æã§ããã 亀ææ©ã®åäœã¯éåžžã«å¥åŠã§ãæåã®æ°æéã¯ãã¹ãŠæ£åžžã«æ©èœããåŠçé床ã¯ãã£ãããšãŒãã«äœäžããŸããããæ¥ç¶ã®æ°ã¯ãŸã£ããå€åããŸããã§ããã ãã®äº€ææ©ã®äœæ¥ãå®è¡ããå€éšã¹ã¯ãªããããã°ããäœæããå¿ èŠããããŸããã æ²ãã¿ã
ãããšãããªãã®äº€ææ©ïŒ
RabbitMQã䜿çšããŠããŸããŸãªåé¡ã解決ããéçšã§ãErlangèšèªã«åºãããããšããããããŸãããä»åºŠã¯ãErlangèšèªãããããå匷ãããšãã§ãã å€æããããã«ãRabbitMQã®äº€ææ©ã®å®è£ ã¯ããã»ã©é£ãããããŸããã ãããŠãã®ç¬éãããç§ãã¡ã¯ãã®ãããŒã«ãŒãšä»äºãããæ°ããæ代ãå§ããŸããã
æšæºäº€ææ©ïŒ fanout ã direct ïŒã®ã³ãŒãã調ã¹ãåŸãã«ãŒãé¢æ°RabbitMQãã¡ãã»ãŒãžã®ã³ããŒãéä¿¡ããããªãœãŒã¹ã®ãªã¹ããåŸ ã£ãŠããããšãæããã«ãªããŸããã æšæºäº€ææ©ã¯ããªã³ã¯ã®å éšããŒã¿ããŒã¹ãããã®ãªãœãŒã¹ã®ãªã¹ããæœåºããŸãã ãã ãããã®å Žåã次ã®äº€ææ©ã®ååã¯éåžžãçä¿¡ã¡ãã»ãŒãžã«åºã¥ããŠèšç®ãããŸãã
route(#exchange{name = #resource{virtual_host = VHost}}, #delivery{message = #basic_message{content = Content}}) -> Headers = (Content#content.properties)#'P_basic'.headers, Scope = case rabbit_misc:table_lookup(Headers, <<"scope">>) of {longstr, Scope} -> Scope; _ -> <<"user">> end, Sites = case rabbit_misc:table_lookup(Headers, <<"sites">>) of {array, Sites} -> [ Site || {longstr, Site} <- Sites ]; _ -> [] end, [ rabbit_misc:r(VHost, exchange, <<Site/binary, ".", Scope/binary>>) || Site <- Sites ].
次ã«ããã¹ãŠãRabbitMQã®ãã©ã°ã€ã³ãšããŠé 眮ããå¿ èŠããããŸããããããéåžžã«åçŽã§ãïŒRabbitMQ 3.5ã®ããŒãžã§ã³ããããããå°ãè€éã§ããïŒã ãã®çµæãããŒã¹ã«ãµã³ãã«ãäžè¶³ããŠããããããã¹ãŠããã¡ã³ã¢ãŠããããéãåäœããããã«ã¯é«éã«åäœããŸããã ãã£ãããïŒ ãšããã§ã亀ææ©ã®ã¿ã€ãã¯sbis-epïŒãšã³ããªãã€ã³ãïŒãšåŒã°ããŠããŸããã
倧ããªã¡ãã»ãŒãžã®åé¡
ããæç¹ã§ããŠã§ããµã€ãã¯èšæ¶äžè¶³ã®ããã«ãããšã®ããã«æ»ã¬ãããã«ãªããŸããã rabbitmq_tracingãã©ã°ã€ã³ã䜿çšããŠã芪åãªäººã ãéç¥ã·ã¹ãã ããäœããã®CDNãæŽçãã1ã€ã®ã¡ãã»ãŒãžã§20 MBã®ããŒã¿ãéä¿¡ããããšãç解ããããšãã§ããŸããã ãããã圌ãã®æ絶ã¯åã³ãè¿œå ããŸããã§ãã-èœäžã¯ç¶ããïŒããäœãé »åºŠã§ïŒã æ倧ã®ã¡ãã»ãŒãžã¯400 Kbã®ãŸãŸã§ããã åçŽãªã€ãã³ãã®å Žåããããéåžžã«å€ããªããŸãããã·ã¹ãã ãããã§æ»ã¬ããšã¯ãããŸããã Erlangã®ãããã°ããŒã«ãç¥ã£ãæåã®å€ã¯çç£çã§ãããæãŸã§ã«ã¯ãã§ã«ããŒãªã³ã°ããããå ¬éãããŠããŸããã SockJSã¯xmerl_ucsã¢ãžã¥ãŒã«ã䜿çšããŠUTF8ãæäœãããã¹ãŠã®ãã€ããªããªã¹ãã«å€æããŠåŠçããããšãå€æããŸããã ãã®çµæãåŠçäžã«400ãããã€ãã®ã¡ãã»ãŒãžã16 MBãè¶ ããã¡ã¢ãªãæ¶è²»ãããšããäºå®ã«ã€ãªãããŸããã ãããŠããã®ãããªã¡ãã»ãŒãžã¯äžåºŠã«è€æ°ã®ãŠãŒã¶ãŒã«éä¿¡ãããŸããã ãããã§ã¯ã UTF8 ã§ã®äœæ¥ã¯ãã€ããªæååã®ã¿ã䜿çšããŠå®å šã«ããçŽããããã®åŸãããããã¯èªèãããŸããã§ããã ç ãã«ã€ãããšãã§ããŸãã
è¡æ¹äžæè ãç¥ã
RabbitMQã«ã¯ãšã¯ã¹ãã§ã³ãžã£ãŒã®Expireãã©ã¡ãŒã¿ãŒããªãïŒãã¥ãŒã®å Žåã®ã¿ïŒãšããäºå®ã«ãããå¥ã®äžå¿«ãªåé¡ã圢æãããŸããã ãŠãŒã¶ãŒãæ¥ããšãã圌ã®ããã«ãã¹ãŠãäœæãããŸãããã圌ãå»ã£ããšãããªãœãŒã¹ã¯åé€ãããŸããã§ããã äºé²ç®çã§ãç§ã¯å®æçã«ãŠã§ããµã€ããéè² è·ã«ããªããã°ãªããŸããã§ããã ç§ãã¡èªèº«ã®äº€ææ©ã®æåã®çµéšã¯ãã©ã¹ã®æ³¢ãæ®ããŸãã-TTLãµããŒããæã€å¥ã®ãã®ã¯ãããããããšãã§ããŸããïŒ ããïŒ ãããããããå人ãŠãŒã¶ãŒãšã¯ã¹ãã§ã³ãžã£ãŒïŒãŸã ãã¡ã³ã¢ãŠããããïŒã§ãããäœæããããšããããäŸåããä»ã®ãã¹ãŠã®ãªããžã§ã¯ããäœæããŸããïŒ ä»ãããã¯ããªã倧人ã§ãïŒ sbis-user exchangeãšåŒã³ãŸã ã
äžæµã®äº€ææ©ãšæ¥ç¶ãã©ã¡ãŒã¿ãŒã®ååã¯ããŠãŒã¶ãŒãšã¯ã©ã€ã¢ã³ãã®èå¥åãããã³ãŠãŒã¶ãŒãäœæ¥ããŠãããµã€ãã®ååã«äŸåããŸãã æ°ãããšã¯ã¹ãã§ã³ãžã£ãŒã®äœæäžã«ããããããã©ã¡ãŒã¿ãŒïŒåŒæ°ïŒã«æž¡ãããšãã§ããŸãã ããŠããã©ã¡ãŒã¿ãä»ããŠå€ç«äº€æåšã®å¯¿åœãå¶åŸ¡ããæ©èœãè¿œå ããŸãããã
亀ææ©ãšæ¥ç¶ãäœæããã«ã¯-è¡ãäœæ¥ã¯ããŸããããŸãããæ¢åã®RabbitMQé¢æ°ãåŒã³åºãã ãã§å¹žçŠãåŸãããŸãã ããããTTLã¡ã«ããºã ãç·šæããã«ã¯ãäŸç¶ãšããŠäžçæžåœåãå¿ èŠããããŸãã å®éã«ã¯ã亀ææ©ã«ã¯ç¬èªã®Erlangããã»ã¹ããªããããå®æçã«çŸåšã®ãŠãŒã¶ãŒæ°ã確èªããŠèªåèªèº«ãåé€ããããšãã§ããŸãã ãããã£ãŠã亀æã¢ãžã¥ãŒã«ã®å®è£ ã«å ããŠãå šå¡ãç£èŠããç¬èªã®ããã»ã¹ãå¿ èŠã§ãã ãããè¡ãã«ã¯ãErlangã¢ããªã±ãŒã·ã§ã³ïŒã¢ããªã±ãŒã·ã§ã³ïŒãäœæããå¿ èŠããããŸã-ãããŒã«ãŒçšã®æ°ãããã©ã°ã€ã³ã®éå§ããéå§ããå®éã«ã¯1ã€ã®ã¯ãŒã¯ãããŒãå«ãŸããŸãã
å€ç«ãã亀ææ©ãåé€ããããã»ã¹ã¯ãåçŽã«å®è£ ã§ããŸããå®æçã«ãã¹ãŠã®äº€ææ©ã®ãªã¹ããååŸããŸãã ããããã«ã€ããŠãæ¥ç¶ã®æ°ãååŸããŸãã ååšããªãå Žåã¯ããªã¹ãã«è¿œå ããŠåé€ããé©åãªééã§åé€ããŸãã ããããç¹ã«æ°äžãŸãã¯æ°åäžã®äº€ææ©ãããå Žåããã®ã¢ãããŒãã¯å€§ããªè² è·ãçã¿åºããŸãã ãšã¯ã¹ãã§ã³ãžã£ãŒã®APIã«ã¯ããªã³ã¯ã®äœæãŸãã¯åé€æã«ãããŒã«ãŒãåŒã³åºãé¢æ°ãå«ãŸããŠããŸãã ãããã¯ãç§ãã¡ãæè¯ã®æ±ºå®ãäžãã®ã«åœ¹ç«ã€ãã®ã§ãã æ°ããæ¥ç¶ãäœæãããšãã¯ãåžžã«å€å ã®ãªã¹ããã亀ææ©ãåé€ããæ¥ç¶ãåé€ãããšãã«ãä»ã®æ¥ç¶ããªããã°ããã«çœ®ããŸãã
æåŸã®è³ªåïŒãªã¹ãå ã®äº€ææ©ã®ååšã確èªãããããããããåé€ããæäœã³ã¹ãã§ãã§ã«æéåãã®äº€ææ©ãæ¢ãããã«ãã©ã®æ§é ã䜿çšããå¿ èŠããããŸããïŒ ããã€ãã®ãã¹ãã®åŸã2ã€ã®æšæºæ§é ã®çµã¿åããã«æ±ºããŸããã
- gb_treeã¯ãæå°å€ïŒçŸåšã®æéãšæ¯èŒãããæå¹æéãæãçã亀ææ©ïŒãããŒãšããŠã®{ExpireTimeãExchange}æ§é ãããã³å€ã0ïŒäœ¿çšãããŠããªãïŒãèŠã€ããã®ã«é©ããŠããŸãã
- ããã ïŒErlang / OTP 18ã§æ¢ã«æ©èœããŠããïŒã¯ã ExchangeããŒãšããŠããŸãExpireTimeã®å€ãšããŠãååšã確èªããæéãèŠã€ããããã«äœ¿çšãããŸãïŒæåã®æ§é ããåé€ããããïŒã
ããã«ãåæã«åé€ããã亀ææ©ã®æ°ã¯ãããŒã¯è² è·ãçºçããªãããã«å¶éãããŠããŸããã ããã§ã2çªç®ã®ãã©ã°ã€ã³ã¯ãŠãŒã¶ãŒã®å©çã®ããã«æ©èœããæºåãã§ããŸããã
åžæã¯å¶ããŸãããïŒ
ã¯ããããã§ãã ããã«ã·ã³ãã«ã§çŸãããä¿¡é Œæ§ã®é«ãæ§é ãåŸãããŸãã
å³ 11.ç¬èªã®äº€ææ©sbis-epããã³sbis-userã䜿çšããã¹ããŒã å ã®ãªããžã§ã¯ãã®æ§é ã
ã¯ã©ã¹ã¿ãŒããŒãã«ã¯ããã¡ã³ã¢ãŠãã¿ã€ãã®ãšã¯ã¹ãã§ã³ãžã£ãŒã1ã€ã ããããWebããŒããšã¯ã©ã¹ã¿ãŒã®éã«ã¯æ¥ç¶ã1ã€ãããããŸãããã¹ããŒã ã¯ãµã€ãã®æ°ã«äŸåããããŠãŒã¶ãŒããµã€ãã«äžåšã«ãªããšããŠãŒã¶ãŒã«å²ãåœãŠããããªãœãŒã¹ã¯ã¯ãªã¢ãããŸãã ãã ã®ããšã話ãããªãã¯ä»ã«äœã倢èŠãããšãã§ããŸããïŒ ãã®åœ¢åŒã§ã¯ãã·ã¹ãã ã¯ãã§ã«15ã®Webãµã€ãã§æ倧60äžã®åææ¥ç¶ãåŠçãã1ç§ããã30äžã®éä¿¡ã¡ãã»ãŒãžã®ããŒã¯ããããŸããã ããããããã¯åœŒå¥³ã®éçã§ã¯ãããŸããã§ããã
ã¢ã©ãŒãXïŒç¡é倧
ãŠãŒã¶ãŒã®æé·ãæ¢ãŸãããšã¯ãªãã£ãã®ã§ãæ°ããåéºã®æéã§ãã
å éšã®ãã¹ãŠ
ã»ãšãã©ãã¹ãŠã®ãµãŒãã¹æäœã¯ãã§ã«RabbitMQå ã§åäœããŸãïŒé 延ãæå°éã«æããããŸãïŒã å€ã«æ®ãããŠããå¯äžã®ãã®ã¯ãå人ãŠãŒã¶ãŒãšã¯ã¹ãã§ã³ãžã£ãŒã®äœæã§ãã ããããçµå±ã®ãšãããRabbitMQã®ãã©ã°ã€ã³ãšããŠç§ãã¡ãæ©ãŸããããå®è£ ããããããã®ã¯ãããŸãããïŒ ã€ãŸãããã§ã«å®è¡äžã®ã«ãŠããŒã€WebãµãŒããŒã䜿çšããŠã次ã®æ°ãããã©ã°ã€ã³ãããšã¯ã¹ãã§ã³ãžã£ãŒã®äœæãéå§ã§ããŸãã
/ infoãžã®ãªã¯ãšã¹ãããã®ãã©ãŠã¶ããŒãžã§ã³ã®SockJSã¯websocketãã©ã°ã®ã¿ãå¿ èŠãšãããµãŒããŒåŽã¯ãã®ãªã¯ãšã¹ããªãã§å®è¡ã§ããããããã®ãªã¯ãšã¹ããã€ã³ã¿ãŒã»ããããã ãã§ãªããå®å šã«åŠçããããšãã§ããŸãã ã€ãŸãããã®ãªãœãŒã¹ã®ãªã¯ãšã¹ãã¯ãã©ã°ã€ã³ã«éä¿¡ãããä»ã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯åŒãç¶ãWeb STOMPã¢ããã¿ãŒRabbitMQã«éä¿¡ãããŸãã
å šå¡ã«ååãª64KããŒã
å€æ°ã®Webãµã€ããäœæããªããã°ãªããªãã£ãåé¡ã®1ã€ã¯ãåããã¹ãäžã®NginxãšRabbitMQã®éã®ãªãŒãã³æ¥ç¶ã®æ°ã®å¶éã§ããã Nginxã¯çºä¿¡æ¥ç¶ã¢ãã¬ã¹ãæå®ã§ããŸããã§ããããã©ã°ã€ã³ã®Web STOMPåŽã§ã¯ãè€æ°ã®ããŒããæå®ããããšã¯ã§ããŸããã§ããã ããã«ãçŸåšWebãœã±ããã«äœãã§ãããŠãŒã¶ãŒã®æ°ãšãXHRããŒãªã³ã°ãšã¹ããªãŒãã³ã°ã®ãŠãŒã¶ãŒæ°ã確èªããå¿ èŠããããŸããã Nginxã¯ãã®ãããªããšãäŒããããšãã§ãããäºæ ãæªåãããå¿ èŠããããŸããã
次ã«ãHAProxyãå©ãã«ãªããŸããã
- URLïŒNginxãªã©ïŒã«å¿ããŠãç®çã®ããŒãã«ãªã¯ãšã¹ããéä¿¡ããŸãã
- 1ã€ã®ããŒããžã®å€æ°ã®æ¥ç¶ãäœæããŸãïŒãœãŒã¹ãªãã·ã§ã³ã䜿çšãããšãçºä¿¡ã¢ãã¬ã¹ãæå®ã§ããŸããããŒã«ã«ã«ã¯å€ãã®æ¥ç¶ã¢ãã¬ã¹127.0.0.0/8ããããŸãïŒã
- æ¥ç¶ã®æ倧æ°ãå¶éããŠã倧éã®ãªã¯ãšã¹ãã®æµå ¥ãããµãŒãã¹ãä¿è·ããããå®å®ãããŸãã
- ãµãŒãã¹ã«é¢ããå€ãã®çµ±èšæ å ±ïŒç¹å®ã®ãã©ã³ã¹ããŒãã®çŸåšã®æ¥ç¶æ°ãæ°ããæ¥ç¶ã®é床ãå¿çæéãå¿çã³ãŒãããã¥ãŒå ã®èŠæ±ã®åŸ æ©æéãªã©ïŒãåãåããŸãã
- ãªãœãŒã¹ãç¯çŽããŸãã HAProxyã¯ãåãæ¥ç¶æ°ã§3åå°ãªãã¡ã¢ãªãæ¶è²»ããããã»ããµã®è² è·ã¯3ã5ïŒ ã§ããã
ãã£ãã·ã¥ããŠå§çž®ããŠãã ããïŒ
æšæºããã±ãŒãžã«ã¯ãRabbitMQã«ã¯äŸ¿å©ãªWebããŒã¹ã®ç®¡çã³ã³ãœãŒã«-管çãã©ã°ã€ã³ãå«ãŸããŠããŸãã ä¿å®ã¹ã¿ããã¯ããããŒã«ãŒã§äœãèµ·ãã£ãŠããããè¿ éã«è©äŸ¡ã§ããŸãã ãŸãããã®APIãéããŠããããŒã«ãŒã®äœæ¥ã«é¢ããçµ±èšãåéããŸãã åé¡ã¯ããã£ãã·ã¥ã¡ã«ããºã ããªãããªã¯ãšã¹ãããšã«ãã¹ãŠã®æ å ±ãåéããããšã§ãã RabbitMQ 3.5ã«ã¯ããŒãžããŒã·ã§ã³ããªãããªãœãŒã¹ã®å®å šãªãªã¹ããåžžã«æäŸãããŸãã ãŸããããã©ã«ãã§ã¯ã5ç§åŸã«èªåæŽæ°ããŒã¿ããªã³ã«ãªããŸãã 40,000ã®ãã¥ãŒã䜿çšãããšããããã«é¢ãããã¹ãŠã®æ å ±ã10ç§éåéãããå€ãã®ããã»ããµæéãæ¶è²»ãããééã15ã20 MBïŒãããã¯ãŒã¯è² è·ïŒã«ãªããŸãã ã€ãŸããããã©ã«ãã§ã¯ããŠãŒã¶ãŒã¯åžžã«ãªã¯ãšã¹ããè¡ããŸãã ãããŠãè€æ°ã®ãŠãŒã¶ãŒãããå Žåã¯ã©ããªããŸããïŒ èŠããŠããã®ã¯æãã§ãã
HAProxyã«åãæ¿ããåã«ãNginxã§ãã£ãã·ã¥ãäœæã§ããŸããããå°ãããŒã¿ããããã¡ã¢ãªãã£ãã·ã¥ãããå¹ççã§ãããããVarnishãè©Šãããšã«ããŸããã ãããã«ã¯ããã¹ãŠã®ã³ã³ãã³ãã®ãã£ãã·ã¥ïŒ beresp.ttl ïŒã15ç§éïŒéçãªå Žåã¯æ°æ¥éïŒããã£ãã·ã¥ã®æå¹æ§ïŒ beresp.grace ïŒããã³ããŒã¿å§çž®ïŒ beresp.do_gzip ïŒãå«ãŸããŠããŸããã
ãã®çµæã以äžãåãåããŸãã ã
- ãªãœãŒã¹ãžã®èŠæ±ã¯ã1åéã«4åãŸã§å®è¡ãããŸãã
- å§çž®ãããããŒã¿ã®ééã¯ãå ã®ããŒã¿ã®çŽ50åïŒ270 KB察13 MBïŒã§ãã
- ããŒã¿ã¯æ°ããªç§ã§äžããããŸããïŒç¶äºæéãè¶ ããªãå ŽåãVarnishã¯æéåãã®ããŒã¿ãåºåããããã¯ã°ã©ãŠã³ãã§ããã¯ãšã³ãã«ããããæŽæ°ããããèŠæ±ããŸã-èŠãç®ã¯çŽ æŽãããã§ãïŒ;
- ãããŒã«ãŒã®è² è·ã¯ãŠãŒã¶ãŒæ°ã«äŸåãããèšç®ã§ããŸãã
ç§ã®å ãé¡ãèšã£ãŠ
Webãµã€ããæé©åããããããé©åã«ã¹ã±ãŒãªã³ã°ããæ¹æ³ãåŠç¿ããåŸãã¯ã©ã¹ã¿ãŒããŒãã®äžäœå±€ã§æ¢ã«åé¡ãçºçãå§ããŸããã 1ç§ãããæ°åäžããæ°åäžã®éä¿¡ã¡ãã»ãŒãžã¯ãäž»ã«ã¯ã©ã€ã¢ã³ãé åã§ã®çºè¡ã«ãããã®ã§ããã ããšãã°ãåœç€Ÿã§ã¯5,000人ããªã³ã©ã€ã³ã«ããå ŽåããããŸãã 誰ãã1ç§éã«60件ã®ã¡ãã»ãŒãžãäŒç€Ÿå šäœã«éä¿¡ããå Žåãæçµçã«ã¯60x5000 = 30äž/ç§ã«ãªããŸãã ã¯ã©ã¹ã¿ãŒããŒãã®å Žåãæåã®èŠå ã¯éèŠã§ã-RabbitMQã®ããã¯ãšã³ããæã€å ¬éãããã¡ãã»ãŒãžã®æ°ã ãããŠãããæç¹ã§ããããæé·ãå§ããŸããã 18ã®Webãµã€ãã«ãµãŒãã¹ãæäŸããå®å šãªã¬ããªã±ãŒã·ã§ã³ïŒãã©ãŒãªã³ã°ïŒãåãã2ã€ã®ããŒãã¯ã1ç§ããã2000件ãè¶ ãããããªã±ãŒã·ã§ã³ãåŠçã§ãããé©åã«ã¹ã±ãŒãªã³ã°ããæ¹æ³ããªãããšãå€æããŸããã ããã¯ãšã³ãã®æ°ãå¢å ãããããããã®æ¥ç¶ã®æ°ã¯ããŒã¯ã®2500ãè¶ ããŸãããã¹ããŒã ã«ã¯å€æŽãå¿ èŠã§ããã
RabbitMQã¯éåžžã«å®å®ããŠããããšã蚌æãããŠãããéç¥ã·ã¹ãã ã¯ãå°æ°ç¹ä»¥äž9æ¡ããå¿ èŠãšããªãã£ããããã¯ã©ã¹ã¿ãŒãæŸæ£ããããšã«ããŸããã ããã«ãããã¯ãšã³ãã¯ããŒãã®ãªã¹ããæäœããå¥ã®ããŒãã®1ã€ã倱æããå Žåã«å¥ã®ããŒããžã®èŠæ±ãç¹°ãè¿ãæ¹æ³ããã§ã«ç¥ã£ãŠããŸããã æ¢åã®ãã¹ãŠã®ããŠã³ã¹ããªãŒã ãããŒã«ãŒã«ããã«æ¥ç¶ããããWebãµã€ãã«æããããšã¯æ®ã£ãŠããŸãããããã¯ãŸã£ããåé¡ã§ã¯ãããŸããã æ°ããã¿ã€ãã®ããŒãã«ã¯ã«ãŒããšããååãä»ãããïŒå°æ¥ãã«ãŒãã£ã³ã°ã¡ã«ããºã ãããã«å²ãåœãŠãããïŒãããã«åãæ¿ããåŸãã¹ããŒã ã¯æ¬¡ã®ããã«ãªãå§ããŸããã
å³ 12.éã¯ã©ã¹ã¿ãŒããŒãã®2å±€ã¹ããŒã ã
ããã§ãå¿ èŠã«å¿ããŠäž¡æ¹ã®ã¬ã€ã€ãŒãã¹ã±ãŒãªã³ã°ã§ããŸãã ã¯ã©ã¹ã¿ããŒããšåãæ§æã®2ã€ã®ã«ãŒãããŒããæã€ãªãã·ã§ã³ã¯ãæ¢ã«1ç§ãããçŽ1äž3åã®ãããªã±ãŒã·ã§ã³ãåŠçããŸããããããã¯ãããã®å¶éã§ã¯ãããŸããïŒ
æ°ãããã£ããã¡ãã»ãŒãžã1ã€ãããŸã
ã¯ã©ãŠãã¢ããªã±ãŒã·ã§ã³ã§ã®ãã£ããã®éçºãšæ®åã«äŒŽããå¥ã®åé¡ãçºçããŸããããŠãŒã¶ãŒã®ãªã¹ãã«åäžã®ã¡ãã»ãŒãžã倧éã«éä¿¡ããããšã§ãã ãã£ããã«æ°å人ãããå Žåããã¹ãŠãååã«è¿ éã«è¡ãããŸãã ãã ããæ°çŸäººã®ãŠãŒã¶ãŒãããå ŽåãRabbitMQãžã®æçš¿ã«ã¯æ°ç§ãããå¯èœæ§ããããŸãïŒãŸããå€ãã®è² è·ãçºçããŸãïŒã åä¿¡è ã®ãªã¹ãã«ã¡ãã»ãŒãžãå¹ççã«éä¿¡ã§ããã¡ã«ããºã ãå¿ èŠã§ããã
AMQPã¡ãã»ãŒãžã®ããããŒïŒãµã€ãã®ãªã¹ããéä¿¡ããæ¹æ³ïŒãä»ããŠãã®ãªã¹ããéä¿¡ã§ããããšãããã«æããã«ãªããŸããã åé¡ã¯ãWebãµã€ãã§åŠçããã¿ã¹ã¯ã§ããã æåã®ãœãªã¥ãŒã·ã§ã³ã¯ãå人ãŠãŒã¶ãŒãšã¯ã¹ãã§ã³ãžã£ãŒïŒsbis-userïŒã®ååããµã€ãåãšãŠãŒã¶ãŒIDã§æ§æããããšããäºå®ã«ãã£ãŠäœ¿çšãããŸããããã®ãããªã±ãŒã¹ãåŠçããããã«ãšã¯ã¹ãã§ã³ãžã£ãŒsbis-epãå€æŽã§ããŸãã ã€ãŸããã¡ãã»ãŒãžã¯ãµã€ããšãŠãŒã¶ãŒã®ãªã¹ããšãšãã«å°çãã亀æã³ãŒãã¯ãããã®ãªã¹ããä¹ç®ããŠçµæãRabbitMQã«æž¡ããŸããRabbitMQã¯ããŒã¿ããŒã¹å ã®æ¢åã®ãªã¹ããæ€çŽ¢ããã¡ãã»ãŒãžã®ã³ããŒãéä¿¡ããŸãã ãã®ãªãã·ã§ã³ã¯ç°¡åãã€è¿ éã«å®è£ ã§ããŸããããããã€ãã®æ¬ ç¹ããããŸããã
- 1ã€ã®å ¬éé åïŒãŠãŒã¶ãŒïŒã®ã¿ã§åäœããŸãã
- 1ã€ã®ãµã€ãã®ã¿ãå šãŠãŒã¶ãŒã®çŽ5ïŒ ãããµãŒãã¹ãæäŸããªããããéåžžã«åé·ãªãªã¹ããäœæãããŸãã ãŸãããªã¹ãã«ãã3ã€ã®ãµã€ãã®ãã¡ã1ã€ã®ãµã€ãã«ããäœãã§ããŸããã
ãã¹ãŠã®æ¬ ç¹ã«ããããããããœãªã¥ãŒã·ã§ã³ã¯è·å Žã«æ¥ãŠã倧ããªãã£ããã«ãŒã ã§éä¿¡ãããšãã®è² è·ãæžããããšãã§ããŸããã è¿œå ãããå¯äžã®ãã®ã¯ã50ãŠãããã®ãŠãŒã¶ãŒãªã¹ãã®é·ãã«å¯Ÿãã人çºçãªå¶éã§ããã ããããªããšãããã¯ãšã³ããæ°ããªç§ã§ã¡ãã»ãŒãžãå ¬éãããšãã«å€§ããªè² è·ä¿æ°ãå€æãããã®åŸããã¹ãŠã®Webãµã€ããæ°ç§éåäœããŸããïŒå€§ããªè²¬ä»»ãçããŸããããã¹ãŠã®éçºè ã2çªç®ã®ããšãç¥ã£ãŠããããã§ã¯ãããŸããïŒ
æ£ããããã
æåŸã®åé¡ã®çšåºŠããããã«æžå°ããã®ã§ãé©åãªæ¹æ³ã§ã¡ã«ããºã ãå®è£ ã§ããŸãã 倧ããªãªã¹ããçæããã®ã§ã¯ãªããæ¢åã®ãŠãŒã¶ãŒã®ããŒã¿ããŒã¹ãäœæããŠæ€çŽ¢ããã®ãæãæ£ããã§ãããã RabbitMQã«ã¯ããã«ãã€ã³MnesiaããŒã¿ããŒã¹ã«ãã¹ãŠã®äº€ææ©ã®ãªã¹ããæã€ããŒãã«ãæ¢ã«ãããŸãã æ®å¿µãªãããæ€çŽ¢ã®ããã«æé©ãªæ¹æ³ã§ç·šæãããŠããªããããç¬èªã®åŠçãè¡ãå¿ èŠããããŸãã æ°ããããŒãã«ã¯ã¿ã€ãã»ããã«ãªãããã©ã€ããªããŒãšããŠäº€ææ©ãå«ã¿ãæ€çŽ¢ã«å¿ èŠãªä»ã®ãã¹ãŠã®èå¥åãç¶ããŸãïŒå¿ èŠã«å¿ããŠãªã¹ããå±éã§ããŸãïŒã
ã¡ãã»ãŒãžãåŠçãããšããå¿ èŠãªå€ã®ãªã¹ããå«ãQLCãªã¯ãšã¹ããäœæããå®è¡ã®ããã«ããŒã¿ããŒã¹ã«æž¡ããŸãã çµæã¯ããã¹ãŠã®æ¡ä»¶ãæºããæ¢åã®äº€ææ©ã®ãªã¹ãã«ãªããŸãã ãã¹ãŠãæ£åžžã«æ©èœããŸãããå éãäºæ³ããããã®ã®ãããã«ããã©ãŒãã³ã¹ãäœäžããŸããã äœããã®åœ¢ã§ç¶æ³ãä¿®æ£ããå¿ èŠããããŸãã
äž»ããŒãæ€çŽ¢ãããšãã»ãŒç¬æã«å®è¡ãããŸããããŒãã«ã®ä»ã®åãæ€çŽ¢ããã«ã¯ããã®ãã¹ãŠã®ã¬ã³ãŒããæ€çŽ¢ããå¿ èŠããããŸãã ããããMnesiaã«ã¯ã»ã«ã³ããªã€ã³ããã¯ã¹ããããŸãããããããªã³ã«ããŠãé床ã楜ãã¿ãŸãããã ãããŠãå¥ã®å€±æãç§ãã¡ãåŸ ã£ãŠããŸããäœãå€ãã£ãŠããŸããã 50ãŠãŒã¶ãŒãš3ãµã€ãã§ã®æ€çŽ¢ã¯30ããªç§ã§å®äºããŸãã ããã§ã®åé¡ã¯ã2ã€ã®ãã£ãŒã«ãïŒèå¥åãšãµã€ãïŒãåæã«è¡šç€ºããŠããããšã§ãããã€ã³ããã¯ã¹ã¯ããŸã圹ã«ç«ã¡ãŸããïŒãœãŒã¹ããŒã¿ã¯çŽ10 MBãããªãããïŒã æå©ã®ããã«ãå éšããŒã¿ããŒã¹ã«ã¯ããŒã¿åã«å¶éããªãããã£ãŒã«ãå€ãšããŠ{SiteãIdent}ã¿ãã«ãæ¿å ¥ã§ãããšããäºå®ããããŸãã ãã®åŸãæ€çŽ¢ã¯1ã€ã®ãã£ãŒã«ãã®ã¿ãééããŸãã ã»ã«ã³ããªã€ã³ããã¯ã¹ã¯å®å šã«æ©èœããŠããŸããã60ããªç§ã§ããã«æªåããŸããã å®éã2ã€ã®ãªã¹ãã1ã€ã®å€§ããªãªã¹ãã«å±éããå¿ èŠããããæ€çŽ¢ã¯ãšãªã巚倧ã«ãªããŸããã
ããŠãå察åŽã«è¡ããŸãããã Mnesiaã«ã¯ãã€ã³ããã¯ã¹ã§å€ãæ€çŽ¢ããæ©èœããããæçæéã§åäœããŸãããåäžã®å€ã§åäœãããããã«ãŒããè¿œå ããå¿ èŠããããŸãã ããã«ãç§ãã¡ã¯ããªãã®æéããããŠãMnesiaã®ããŒãã£ãªãã¬ãŒã·ã§ã³ã䜿çšããŠçç£æ§ãé«ããŸãã
user_find_in_index(Sites, Ids, IndexPos) -> [ element(2, Item) || Site <- Sites, Id <- Ids, Item <- mnesia:dirty_index_read(user_route, {Site, Id}, IndexPos) ].
åã€ã³ããã¯ã¹æ€çŽ¢ã«ã¯çŽ6ãã€ã¯ãç§ããããŸããã€ãŸããåããªã¹ããµã€ãºã§ã¯ã1ããªç§æªæºã§åçãåŸãããŸãïŒãµã€ãºãå°ããã»ã©ãã²ã€ã³ã¯ããã«å€§ãããªããŸãïŒã ãã®çµæã¯ãã§ã«ç§ãã¡ã«åã£ãŠããŸãã
æè¿ã®ãã£ãŒã«ããµããªãŒ
ãã¹ãŠã®å€æŽã®åŸã次ã®ãªããžã§ã¯ãã®æ§é ãååŸããŸãã
å³ 13.ãªããžã§ã¯ãã®æçµæ§é ã
æåŸã®ããŒãæ¥ç¶ã¹ããŒã ãšãããŒã«ãŒå
ã®ãªããžã§ã¯ãã®æ§é ã«ããããµãŒãã¹ãæäŸã§ããŸãã
21ã®Webãµã€ãã§100äžã®åæWebãœã±ããïŒ110äžãããŸããããç£èŠã®å±¥æŽã®éèšã§ã¯ããã®å³ããã®çè·¡ã¯æ®ããŸããã§ããïŒïŒ
å³ 14.皌åé±ãããã®æ¥ç¶ã®ç·æ°ã
ãŸããåèšãã©ãã£ãã¯ã4.2ã®ã¬ããã/ç§ãè¶ ãããŠãŒã¶ãŒã«ã1ç§ãããã»ãŒ130äžã®ã¡ãã»ãŒãžãéä¿¡ããããšã«è²¢ç®ããŸããã
å³ 15.ããŒã¯è² è·ã®åŠçïŒ1ç§ãããã®ã¡ãã»ãŒãžæ°ãšã¡ã¬ãã€ãã®ãã©ãã£ãã¯ã
ãããã«
RabbitMQã䜿çšããŠãŠãŒã¶ãŒéç¥ã·ã¹ãã ã®æ§ç¯ãéå§ããæç¹ã§ã¯ãã·ã¹ãã ãæçµçã«ã©ãã ã倧ãããªãããããã³åŠçã§ããã¡ãã»ãŒãžã®éãã©ãã»ã©ãã¯ããããŸããã§ããã RabbitMQã¯ãšãã©ãæ°ãŸããã§ããããïŒç¹ã«ãã©ã°ã€ã³ãæžãããã«ã«ã³ããŒãç¿åŸããå ŽåïŒéçºã³ã¹ããæããŠãã¹ãŠãå®è£ ããå®è£ æéãççž®ããããšãã§ããŸããã
ç§ãã¡ã¯çµéšãhabrasocietyãšå ±æã§ããããšãå¬ããæããŸãããã¹ãŠã®è³ªåã«åãã§ãçãããŸãã
èšäºã®èè ã»ã«ã²ã€ã»ã€ãŒãã³