
èªè
ãžã®æšæ¶ã çŸåšãçŸåšæ¯é
çãªMVCã¢ãã«ãšã¯å¯Ÿç
§çã«ã
ä¿¡å·ã¢ãŒããã¯ã㣠ïŒä¿¡å·/ã¹ãããïŒã«åºã¥ããŠç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãéçºããŠããŸãã 圌ãç§ãã¡ã®ã¹ã¿ãŒãã¢ããã§æŠéã®æ
£ãããåããŠããéã«ããã®éãã©ã€ãã©ãªãäžè¶³ããŠããããšã«æ°ä»ããŸãã-å®éã®ã¿ã¹ã¯ãšå°æ¥ã®ããžã§ã³ã¯ãç°ãªãæ©èœãå¿
èŠã§ãããã1ã€ã®ããŒãã§çµ±äžãããŠããããšã瀺ããŠããŸã-ãªã¢ã«ã¿ã€ã ã§å€ãã®ã¯ã©ã€ã¢ã³ããžã®æ
å ±ã®åŠçãšé
ä¿¡ïŒã¯ããã³ã¡ããã«äŒŒããã®ã§ã圌ãããã«ããŸãïŒã ãããã£ãŠã次ã®ãããžã§ã¯ãã®äž»èŠãªã³ã³ããŒãã³ããšãªããé«éã§æè»ãã€ã¹ã±ãŒã©ãã«ãªã¡ã€ã³ã³ã³ããŒãã³ãã§ããã¡ãã»ãŒãžãã¥ãŒã®å®è£
ã詊ã¿ãããšã決å®ãããŸããã
ã©ãããã®ïŒ SignalsyMQ Alphaã¯ãPHP / Redis / Zend FrameworkããŒã¹ã®ã¡ãã»ãŒãžãã¥ãŒã§ãã
ã¡ãã»ãŒãžãã¥ãŒã«ã€ããŠã¯ãã§ã«æžããŸããïŒ
ã¬ãã¥ãŒã®æåã®èšäº ã
2çªç® ïŒãããã¹ãŠã®ã·ã¹ãã ãæ¹å€çã«ã¬ãã¥ãŒãããããã®ããã€ãã詊ããŠã¿ããšãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã®ãã©ãããã©ãŒã ã«ã§ããã ãè¿ãããã®ããããå°ãããæè»ã§æ§æå¯èœã§ããããšã«æ°ä»ããŸããïŒãã®å ŽåãPHPïŒããªãŒãã³ã§ç¡æã®ãŸãŸã§ãã æšæºã¡ãã»ãŒãžïŒJSON圢åŒã§ãã¢ããªã±ãŒã·ã§ã³å
ã®åãªã飿³é
åïŒãåŠçããã¡ãã»ãŒãžé
ä¿¡ã®æè»ãªæ§æããã¥ãŒã®æ°žç¶çãªä¿åãããã³ããããšã®éåžžã«é«éãªåŠçãæäŸããã·ã³ãã«ãªãµãŒããŒããããŸããã åæã«ãã·ã³ãã«ãªãããã³ã«ãšãäžè¬çã«æå€§éã®ã·ã³ãã«ããå¿
èŠã§ãã
ããã«æãè¿ãã®ã¯ãRubyããŒã¹ã®è£œåã§ãã
Starling MQãš
MemcacheQã§ãã ãšããã§ãäž¡æ¹ã®ã·ã¹ãã ã¯memcacheãããã³ã«ã§åäœããŸããããã¯ãç°çš®ç°å¢ã«åãèŸŒãæ©èœã«ãã©ã¹ã®åœ±é¿ãäžããŸãã ããããmemcacheqã¯ãã®éçºããªã·ãŒã«æ¥ããããã£ãã®ã§ãããTwitterã®äœ¿çšçµéšã¯ãããŸãããããã¯ããªãå
·äœçãªè£œåã§ããã絶察ã«å¿
èŠã§ããå¥ã®ãã©ãããã©ãŒã ã ãããã£ãŠãæè¯ã®äŒçµ±ã§ã¯ãã¡ãã»ãŒãžãã¥ãŒã®ç¬èªã®å®è£
ãèšè¿°ããããšã決å®ãããŸããã
Redisãããžã§ã¯ãã¯ãæ§é åããŒã¿ãä¿åããã³åŠçããããã®éçºæ©èœãåããéåžžã«é«éãã€æè»ãªNoSQLã·ã¹ãã ã®åºçºç¹ãšããŠåãäžããããŸããïŒHabréã§ããã«ã€ããŠæžãæéã¯ãããŸããã§ããïŒã 2çªç®ã®ãã¯ãžã©ãã¯
Rediskaã§ãã-䟿å©ãªæ§æãšå€ãã®è峿·±ãæ©èœïŒããšãã°ãè€æ°ã®ãµãŒããŒãçµã¿èŸŒã¿ã®ã·ãªã¢ã«åããµãŒããŒéã§ã®ããŒã®é
åžãªã©ïŒããµããŒãããRedisãšé£æºããããã®
PHPã©ã€ãã©ãªã§ãããã©ã€ãã©ãªã¯æŽ»çºã«éçºãããŠããŸãããããã£ãŠãæ©èœã¯åžžã«è¿œå ãããŸãïŒã 3çªç®ã®ãã¯ãžã©ãã¯
Zend Frameworkã§ ãçŸåšã»ãšãã©ã®ãããžã§ã¯ãã§äœ¿çšããŠããŸãããããã§ã¯ãµããŒãã®åœ¹å²ããæãããŠããŸããïŒããã€ãã®ãŠãŒãã£ãªãã£ã¯ã©ã¹ã䜿çšãããŠããŸãïŒã
ZFã«ã¯ãã¡ãã»ãŒãžãã¥ãŒã®ç¬èªã®å®è£
-Zend_Queueãæ¢ã«ããããšãããã«
ããããŸããããã¯ãéåžžã®PHPé
åããå§ãŸããMemcacheQãããŒã¿ããŒã¹ãZend Platformã§çµãããã¡ãã»ãŒãžãä¿åããããã®ããŸããŸãªããã¯ãšã³ãããµããŒãããŸãã ãã ããå®éã«ã¯ãMemcacheQã§æãææãªã€ã³ã¿ãŒãã§ã€ã¹ã詊ãããšãã§ããŸããã§ãããã¡ãã»ãŒãžãããŒãå¯éããŠããå Žåã«ããŒã¿ããŒã¹ãæäœããããšã¯ãåã«äžå¯èœã§ããã¹ã¯ãªããå
šäœã倱æãããŸã§ãäœæ¥ã¯éåžžã«é
ããªããŸãã Zend_Queueã€ã³ã¿ãŒãã§ãŒã¹èªäœã¯éåžžã«æœè±¡çã§ããç§ã®å Žåã¯ãããã€ãã®é«ã¬ãã«ã®é¢æ°ãå¿
èŠã ã£ããããæ¢åã®ã³ãŒãã倧å¹
ã«æ¡åŒµããå¿
èŠããããŸãã ã¡ãªã¿ã«ãRediskaã©ã€ãã©ãªã«ã¯Redisäžã§ãã¥ãŒãæäœããããã®ç¹å¥ãªã¢ããã¿ãŒããããŸããã1é±éèŠåŽãããã¹ãã±ãŒã¹ãåäœããªãã£ãåŸãç§ã¯æçµçã«æ±ºå®ããŸãã-ãããç§ã®ã·ã¹ãã ãæžããŠããŸãïŒ
ãŸããäžè¬çãªã¢ãŒããã¯ãã£ãšæ©èœã決å®ããŸãããã åºæ¬çãªæŠå¿µã¯ãã¡ãã»ãŒãžããã¥ãŒïŒãã£ãã«ïŒããµãŒããŒãããã³ã¹ãã¬ãŒãžã§ãã
- ã¡ãã»ãŒãžã¯ç¹å®ã®ããŒã¿æ§é ã§ããããã®äŸã§ã¯ãä¿åããæ
å ±ãå«ã飿³é
åã§ãã ã¡ãã»ãŒãžã¯ãããã€ãã®ãµãŒãã¹ãã£ãŒã«ããšæ¬æã§æ§æãããŸãã ã¡ãã»ãŒãžã®æ¬æã«ã¯ãåä¿¡è
ã«éä¿¡ãããããŒã¿èªäœãä¿åãããŸããæãéèŠãªããšã¯ã倿ŽãããŠããªãããšã§ãã ãµãŒãã¹ãã£ãŒã«ãã¯åŠçäžã«å€æŽãããå ŽåããããŸãã ãããŸã§ã®ãšãããç§ã«å¿
èŠãªãã£ãŒã«ãã¯ãã¡ãã»ãŒãžã®ã¿ã€ãïŒä»»æã®è¡ïŒãã¡ãã»ãŒãžã®ãœãŒã¹ïŒãŸãè¡ïŒãã¡ãã»ãŒãžãé
ä¿¡ãããã£ãã«ãããã³ã¡ãã»ãŒãžãäœæããããã®ã¿ã€ã ã¹ã¿ã³ãã§ãã ã¡ãã»ãŒãžæ¬æããã£ãŒã«ãã®1ã€ã§ããã空ã®å ŽåããããŸããç¹å®ã®åä¿¡è
ã«å¯ŸããŠã®ã¿æå³ããããã·ã¹ãã å
šäœã®è²¬ä»»ã¯åã«ä¿åããŠé
ä¿¡ããããšã§ãã
- ãã¥ãŒ ïŒãã£ãã«ïŒã¯äžæã®ã¢ãã¬ã¹ã§ãããã¡ãã»ãŒãžãé
ä¿¡ããããã¥ãŒã®ååã§ãã ç§ã¯æãã·ã³ãã«ã§æãçè§£ãããã圢åŒã®ã¢ãã¬ã¹æå®-URLã®ãããªãã®ãåããŸããã ããšãã°ã/ users / aleksã¯ããŠãŒã¶ãŒaleksã®ã¡ãã»ãŒãžãã¥ãŒã§ãã å
éšã§ããã€ãã®è¿œå åŠçãçºçããŸãããããã¯ä»ã®ã¹ã¯ãªããããã¥ãŒã§åäœããæ¹æ³ã«ã¯åœ±é¿ããŸããã ãŸããäžåºŠã«è€æ°ã®ãã¥ãŒã«ã¡ãã»ãŒãžãéä¿¡ããããšãã§ããŸã-ãã®ããã«ã¯ãã¡ã¿æåã*ãïŒä»»æã®æ°ã®æåïŒããïŒã ïŒä»»æã®åäžæåïŒããã³ '[a..z]'-é
ä¿¡ãããã¡ãã»ãŒãžã®ååã«å«ãŸããå¿
èŠãããä»»æã®æåã»ããã ããã¯ç§ã®éçºãåãZend_Queueãšæ¯èŒããŠå¥œæçã§ã-ããšãã°ãååãaleksã§ãããã¹ãŠã®ãŠãŒã¶ãŒã«ã¡ãã»ãŒãžãç°¡åã«éä¿¡ã§ããŸãïŒãŠãŒã¶ãŒåã§ãã¥ãŒãåŒã³åºãå ŽåïŒã ãã¥ãŒã¯ãé·ãïŒããã«æ ŒçŽã§ããã¡ãã»ãŒãžã®æå€§æ°ïŒã«ãã£ãŠãç¹åŸŽä»ããããŸãã ã¡ãã»ãŒãžãã¡ã¢ãªïŒããã«ã¯ã·ãªã¢ã«åããã圢åŒïŒã«ä¿åãããããšãèãããšãã¡ã¢ãªã®æ¶è²»ãèæ
®ããå¿
èŠãããããããããžã§ã¯ãã®è©³çްã«åºã¥ããŠãã¥ãŒã®é·ããéžæããŠãã ããã ãã¥ãŒããªãŒããŒãããŒããå Žåãæãå€ãã¡ãã»ãŒãžãåé€ãããŸãã
- å®éã ãã¥ãŒãµãŒããŒã¯ã©ã€ãã©ãªã¹ã¯ãªãããã®ãã®ã§ãã çŸåšã®å®è£
ã¯RedisãµãŒããŒã§çŽæ¥åäœããŸããæ¬¡ã®ã¹ãããã¯å°çšãµãŒããŒã®äœæã§ãã ã€ãŸããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ãœã±ãããä»ããŠãµãŒããŒã«æ¥ç¶ããã¡ã¿æ
å ±ä»ãã®ã¡ãã»ãŒãžãéä¿¡ããŸãïŒå°ãªããšããã¡ãã»ãŒãžãéä¿¡ãããã£ãã«ã瀺ããŸãïŒãæ®ãã¯ãµãŒããŒã®ããžãã¹ïŒãŸãã¯ããŒã¢ã³ïŒã§ãã æ©èœãæ¡åŒµããããã«ããœã±ãããXML / JSON-RPCãHTTP-RESTãSOAPãªã©ãä»ããŠãããŸããŸãªããŒã¿åœ¢åŒïŒã·ãªã¢ã«åïŒãšããã€ãã®äœæ¥ãããã³ã«ã®äž¡æ¹ããµããŒãããäºå®ã§ãã
- ã¹ãã¬ãŒãž -çŸåšã®ããŒãžã§ã³ã§ã¯1ã€ãŸãã¯è€æ°ã®RedisãµãŒããŒãå®è¡ããŠããŸãããå°æ¥çã«ã¯ãZend_Queueãšåæ§ã«ãã¡ãã»ãŒãžãä¿åããããã®ããã€ãã®ãªãã·ã§ã³ãå®è£
ããå¯èœæ§ããããŸãã
ã¢ãŒããã¯ãã£ãšRediska_Queueãšã®éãã«ã€ããŠã®ãã1ã€ã®çºèšã¯ããœãŒã¹ããçè§£ããŠããããã«ãé床ã®ããã«è²Žéãªé
åžããããã£ãé
眮ããããšã§ãã ããšãã°ãæ ŒçŽãããŠãããã¹ãŠã®ãã¥ãŒã®é
åïŒã¡ãã»ãŒãžã§ã¯ãªãããã¥ãŒã®ååã®ã¿ïŒãè¿ãgetQueuesã³ãã³ãã¯ããã¥ãŒãªã¹ãã®ããŒã«ã«ã³ããŒãåŠçããŸãã ãããã£ãŠãæåã®ãã¥ãŒãæ©èœããŠããéã«å¥ã®ã¯ã©ã€ã¢ã³ããæ°ãããã¥ãŒãäœæããå Žåã圌ã¯ãããç¥ããŸããã Webã¢ããªã±ãŒã·ã§ã³ã®å ŽåãããŒãžã圢æãããŠããéã«ãªã¯ãšã¹ããåŠçããããšããããã¯éèŠã§ã¯ãªããããããŸããããããŒã¢ã³ãšããŠåäœããå€ãã®ã¯ã©ã€ã¢ã³ãããã®å€ãã®ãã¥ãŒãšã³ãã³ããåŠçã§ããã¡ãã»ãŒãžãµãŒããŒãå¿
èŠã§ãã ããã«ã¯è¿œå ã®ãªãœãŒã¹ãå¿
èŠã§ãããRedisã®ãããã§ããããã¹ãŠã®æäœã«ã¯è€éãã®éåžžã«è¯ãææšããããŸãã
ãããã£ãŠãäžè¬çãªAPIã¯ãZend_Queueã€ã³ã¿ãŒãã§ãŒã¹ã«å¯èœãªéãè¿ãããã€ãã®ã¡ãœããã§æ§æãããŠããŸãããããã€ãã®æ¡åŒµæ©èœããããŸããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
æ£çŽãªãšããã
ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã¯ãã¢ã¯ã»ã¹å¯èœã§ãããå®éã®äœæ¥ã®æºåãã§ããŠããŸãããããããåãªããããã¿ã€ããšæåã®ã¢ã«ãã¡ããŒãžã§ã³ã§ãã ãŸã æé©åãããŠããªãå ŽæãZend_Queueã®ããŒã¹ãªã©ãããŸããŸãªããã¥ã¡ã³ãããŸã ãããŸããããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãäžå®å
šã«èãåºãããäœæ¥ãšããŒã¿æ§é ã®ã¢ã«ãŽãªãºã ããããŸãïŒããšãã°ãdeleteMessageã«ã¯ããã£ãã«ãµãŒãã¹ãã£ãŒã«ãã«ã¯2ã€ã®ãã©ã¡ãŒã¿ãŒããã¥ãŒåãšã¡ãã»ãŒãžãå¿
èŠã§ãïŒã¡ãã»ãŒãžã«ã¯æ¢ã«åœŒã®ãã¥ãŒã®ååãªã©ããããŸãïŒã ããã«ãããããããçŸåšã®ã³ãŒãã¯ãã§ã«çµæã瀺ããŠãããåäœããŠãããå®éšã«é©ããŠããŸãã
çŸåšããã©ãŒãã³ã¹ã«ã€ããŠè©±ãããšãæ¬åœã«äžå¯èœã§ãããAmazon EC2ã¹ã¢ãŒã«ã€ã³ã¹ã¿ã³ã¹ïŒ32ããããDebianãPHP 5.2.11ãRedis 1.1.9ïŒã䜿çšããŠããã€ãã®ãã¹ãã宿œããŸãããã©ã³ãã ãã¥ãŒïŒ1000ã®å€æ°ã®ã¡ãã»ãŒãžãéžæçã«èšé²ããã¢ãŒãã®ã·ã³ã°ã«ã¹ã¬ãããµãŒããŒã¡ãã»ãŒãžããã³åããã100ïŒã¯ã1ç§ããã1500-3000ã¡ãã»ãŒãžå
ã®é床ã瀺ããŸãïŒèšé²ã®ãããä»ã®ã·ã¹ãã ã¯ãŸã ãµãŒããŒäžã§å転ããŠãããããå€åã¯è² è·ã«å€§ããäŸåããŸãããŸãããã®ã¢ãŒãã§ã¯Redisèªäœã®ä¿åééãèšå®ããããããéåžžã«ææã§ãïŒ
åã¯ã©ã€ã¢ã³ããå°æ°ã®ã¡ãã»ãŒãžãš1ã€ã®ãã¥ãŒã§åäœãããã倿°ã®äžŠåã¯ã©ã€ã¢ã³ããããå ŽåãååãšããŠã
ãã®æ§æã®ãã¹ãã«ãããš ãåŒãåºãå¯èœãªæå€§å€ïŒ1ç§ããã5ãã7åã¡ãã»ãŒãžããã¹ããšãµãŒããŒãåããã·ã³äžã«ããå ŽåïŒã ãã«ãã¹ã¬ããã䜿çšããŠãRedisãå¥ã®ãµãŒããŒã«ç§»åãããµãŒããŒãå¯èœãªéãä»ã®ã¿ã¹ã¯ããã¢ã³ããŒãããããšã§ããã倧ããªçµæãåŸãããšãã§ããŸããããã«ãããã©ãŒãã³ã¹ã¯ãµãŒããŒã®CPUãã©ã¡ãŒã¿ãŒã«äŸåããŸã-倧ããã€ã³ã¹ã¿ã³ã¹ïŒ2ã³ã¢ãš7 GB RAMïŒã¯ãã§ã«5-6ããéãé床ïŒãã¡ãããããã¯åãªãå¹³åçãªææšã§ãããçŸå®ãšã¯ããé¢ããŠããŸãïŒã
ãããã¯å®éšã§ãã ã¡ãã»ãŒãžãã¥ãŒã®ãããã¯ã¯è峿·±ããã®ã§ããããšãã°ãä»äºã§ZFãç©æ¥µçã«äœ¿çšããŠããéçºè
ã§ãã£ãŠããZend_Queueã³ã³ããŒãã³ããšãã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã»ãšãã©èª°ãç¥ããªããªã©ãããã«èšäºãæžãå¿
èŠããããŸãã ããŠããµãŒããŒã«ã¯å€ãã®æ¹åãšæ¹åããããããããããã¯ãŒã¯ããŒã¢ã³ã«å€ããããŸããŸãªãããã³ã«ïŒããããMQã®æšæºã§ããStompãAMQPïŒã§åäœããç¹å¥ãªãµãŒããŒãæ§ç¯ããããã¯ã°ã©ãŠã³ãä¿åäžã®èŒ»èŒ³ã®ã¬ããªã±ãŒã·ã§ã³ãšã¢ã«ãŠã³ãã£ã³ã°ãèšå®ããããã€ãã®äžŠåãµãŒããŒãªã© ããªãã¯ããã«ã€ããŠèªãã§ã¿ããã§ããïŒ