LinguaLeoãŠãŒã¶ãŒã¯ã
ãžã£ã³ã°ã«ã§è±èªãåŠã³å§ããŸã-è€éãããã©ãŒããããããŒãã®ã¬ãã«ãç°ãªãæ°åã®è³æã®ãªããžããªã ãã€ãã£ãã¹ããŒã«ãŒã®ã¹ããŒããèããç解ããèªåœãå¢ããããšã段éçã«åŠã³ãŸãã 誰ãææ³ãå¿
èŠãšããŸããïŒ
ã³ãŒã¹ã«è¡ããŸãã èªåœã¯ãå人èŸæžã«ãªãã¿ã®ãªãåèªãè¿œå ããã ãã§ãªããåã
ã®åŠç¿ã«å©çšã§ããæºåæžã¿ã®
åèªã»ããã®å©ããåããŠããžã£ã³ã°ã«ããè£å
ãã
ãŸã ã ã³ãã¥ãã±ãŒã·ã§ã³ã»ã¯ã·ã§ã³ã§ã¯
ãè±èªã§ãã€ã¢ãã°ãè¡ãããªã¢ã«ã¿ã€ã ã¢ãŒãã§ä»ã®LinguaLeoãŠãŒã¶ãŒãšèšèªãç·Žç¿ããã³ãã¥ãã±ãŒã·ã§ã³ã®ãããã¯ãéžæã§ããŸãã è±èªã®ã¿ã®ã³ãã¥ãã±ãŒã·ã§ã³ïŒ
è±èªã§ãã€ã¢ãã°ãäœæããããã«ãNode.jsãDynamoDBïŒãã¹ãŠAWSã§ïŒã䜿çšããŸããã 次ã«ãçµéšãå
±æããŸãã
âNode.jsã䜿çšãã çç±
ã...ãŠãŒã¶ãŒã«ã³ãã¥ãã±ãŒã·ã§ã³ã®æ©äŒããã¹ãŠæäŸããããã«ãNode.jsãéžæããŸããã ãªãã§ïŒ Node.jsã¯ãèšå€§ãªæ°ã®
ã¢ãžã¥ãŒã«ãããã¹ããªãŒã ã§ã®äœæ¥ã«é©ããŠã
ãŸã ã ããã«ãNodeã§äœæ¥ããæèœãªJavaScriptããã°ã©ããŒã¯ããµãŒããŒããŒãã ãã§ãªããã¿ã¹ã¯ã®ã¹ã³ãŒãå
šäœãå®è£
ã§ããŸãïŒããšãã°ãErlangã¹ãã·ã£ãªã¹ããšã¯ç°ãªããŸãïŒã
ãµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®ããã©ã³ã¹ããŒãããŒãããšããŠãæ
å ±ãé
ä¿¡ããæéã®æ¹æ³ãšããŠWebSocketã䜿çšããŸããã
ã¯ãã¹ãã©ãããã©ãŒã ã®åé¡ã解決ããããã«ã
Sock.JSã©ã€ãã©ãªãéžæã
ãŸãã ã 第äžã«ãWSã®W3Cæºæ ã«ããã第äºã«ãSock.JSã¯ç§ãã¡ã®ããŒãºã«æé©ã§ãã
è¡ããŸãããã Amazon EC2ã®ãã¯ã©ãŠããæ©èœã§Node.jsããŒã¢ã³ãèµ·åããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯gitãä»ããŠãããã€ãããŸãã
foreverã¢ãžã¥ãŒã«ã¯ããã®ã³ã°ãšåèµ·åãæ
åœããŸãã ã¡ãªã¿ã«ãAmazonã«ã¯éåžžã«äŸ¿å©ãªãµãŒãã¹ã§ãã
Amazon CloudwatchããããŸãã ãã®æ©èœã«ãããã·ã¹ãã ã®äž»èŠãªãã©ã¡ãŒã¿ãç£èŠã§ããŸããæãéèŠãªããšã¯ããã®å°å³ã¯ãæ¬åœã«éèŠãªãã®ã ããç£èŠã§ããã«ã¹ã¿ãã€ãºå¯èœãªéç¥ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã«é¢ãã詳现æ
å ±ãååŸããã«ã¯ã
nodetimeã䜿çšã
ãŸã ã
dynodeã¢ãžã¥ãŒã«ã¯ãDynamoDBãæäœããããã®ãã©ã€ããŒãšããŠäœ¿çšãããŸãã 圌ã¯èªåèªèº«ãç«èšŒããŸããããäžå®å
šãªæè¡ææžã¯èèã®æšœã«ã¿ãŒã«ãå ããŸããã Amazonã®å
¬åŒ
Node.js SDKã¯åŸã§çºè¡šããããŸã éçºè
ãã¬ãã¥ãŒæ®µéã«ãããŸãã ãã®ãããª
èªç¶ãªæ¹æ³ã§ ããã¹ãŠã®æè¡çèŠä»¶ãæºãããããAmazonã®è£œåã䜿çšããããšã決å®ãããŸããã
âNode.jsã®åŸ®åŠãªç¹
ãã€ã¢ãã°ãµãŒããŒã§ã®ãŠãŒã¶ãŒèªèšŒã®åé¡ã«ç¹ã«æ³šæãæããŸããã ãµãŒããŒCookieã®æ¿èªã«ã€ããŠã¯ãåŒç€Ÿã責任ãè² ããŸãã ããã¯é床ã®ç¹ã§ã¯éåžžã«ãé«äŸ¡ãªããœãªã¥ãŒã·ã§ã³ã§ãããå®å®æ§ãšã»ãã¥ãªãã£ã«å ããŠãç¬ç«ãããµãŒãã¹æåã®ã¢ãŒããã¯ãã£ãå°è±¡çã§ãã
ã©ã®ããã«æ©èœããŸããïŒ ãŠãŒã¶ãŒCookieã¯WebSocketãä»ããŠãã€ã¢ãã°ãµãŒããŒã«éä¿¡ãããŸããâãã€ã¢ãã°ãµãŒããŒã¯ãåä¿¡ããCookieãå«ããªã¯ãšã¹ããAPIã«éä¿¡ããããšã§Cookieã®æå¹æ§ã確èªãããŠãŒã¶ãŒããŒã¿ãæ¢ã«éä¿¡ããŸãã ããŒã¿ããšã©ãŒãªãã§åä¿¡ãããå ŽåãDialogãµãŒããŒã¯ãã®ãžã§ããå®è¡ïŒèš±å¯ïŒããããŒã¿ã
ãŠãŒã¶ãŒã«éä¿¡ã
ãŸã ã
å€ãã®äººãèªå®
ã ãã§ãªãè·å Žã§ãLinguaLeoãç·Žç¿ããŠããããšãç¥ã£ãŠããŸãã å€ãã®å ŽåãäŒæ¥ã®ãã¡ã€ã¢ãŠã©ãŒã«ãé床ã«å³å¯ã«æ§æãããŠãããããæšæºããŒã以å€ã®ãã¹ãŠã®ããŒãã䜿çšã§ããŸããã ãããèŠããŠãããWebSocketæ¥ç¶ã«ã¯ããŒã443ã䜿çšããŸãïŒhttpsã«ãã€ã³ãããŸããïŒã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãæœåšçãªãããã¯ãŒã¯ã®åé¡ãåé¿ããŸãã
âDynamoDBã® æ©èœ
1幎ã»ã©åãAmazonã¯åæ£åNoSQLããŒã¿ããŒã¹Amazon
DynamoDBããªãªãŒã¹ããŸããã ã·ã¹ãã ã¢ãŒããã¯ãã£ã®èšèšæ®µéã§ãMongoDBãšDynamoDBã®2ã€ã®è£œåããéžæããå¿
èŠããããŸããã 管çã®é£ããããæåã®ãªãã·ã§ã³ãæåŠããŸããã補åã®å Žåã¯ãµããŒããå¿
èŠãªããããéžæã¯Amazonã«å§ããããŸããã ãŸãããã¡ãããããã«äœ¿çšããããã«èªåã§æè¡ããå£ããããšã¯èå³æ·±ãããšã§ããã
DynamoDBã§ã®äœæ¥ã¯ããããŸã§èŠãŠãããã¹ãŠã®ãã®ãšã¯éåžžã«ç°ãªãããšãå€æããŸããã ãã®ããšãããSaaS補åã§ãããããhttpãªã¯ãšã¹ãã®æéãèæ
®ããå¿
èŠããããŸããã AmazonããŒã¿ã»ã³ã¿ãŒå
ã§ã¯ãå¹³åã¯ãšãªæéã¯çŽ20ããªç§ã§ãããã®ãããçµè«ã«è³ã£ãã®ã¯ãã€ã³ããã¯ã¹ã®ã¿ã䜿çšããŠãã¹ãŠã®éžæãè¡ãããšãéåžžã«æãŸããããšã§ãïŒããã¯é«éã§å®äŸ¡ã§ãïŒãã¹ãã£ã³èŠæ±ã¯ãåæãŸãã¯ç§»è¡å°çšã«äœ¿çšããå¿
èŠããããŸãã
â ããŒã¿æ§é
ãã€ã¢ãã°-ãã€ã¢ãã°ã®ã¡ã¿ããŒã¿ãä¿åããæåŸã®ã¡ãã»ãŒãžããã£ãã·ã¥ããŸãã
UserDialogs-ãŠãŒã¶ãŒãã€ã¢ãã°ã®ãªã¹ãããã£ãã·ã¥+æªèªã¡ãã»ãŒãžã®ã«ãŠã³ã¿ãŒã
ã¡ãã»ãŒãž-ãã¹ãŠã®ãŠãŒã¶ãŒã¡ãã»ãŒãžã
User2User-ãã€ã¢ãã°ã®åå è
ã
äŸ1ãè±èªã®ãã€ãã€ã¢ãã°ãããŒãžã®ãã¹ãŠã®ãŠãŒã¶ãŒãã€ã¢ãã°ãååŸããããã»ã¹ã¯ãéæšæºã§å®è£
ãããŠããŸãã ãã®ããŒãžã§ã¯ãæªèªã¡ãã»ãŒãžã®ç·æ°ãšåãã€ã¢ãã°ã®æåŸã®ã¡ãã»ãŒãžãå«ãããã¹ãŠã®ãã€ã¢ãã°ããŠãŒã¶ãŒã«è¡šç€ºãããŸãã
ããŒã¿ã¯2ã€ã®ã¯ãšãªã§éžæãããŸãã 1ã€ç®ã¯ã
Queryã䜿çšããŠUserDialogsããŒãã«ãããã¹ãŠã®dialogldsããã§ããããããšã§ãã 2çªç®ã¯ãBatchGetItemãä»ããŠãã€ã¢ãã°ãååŸããŸãã ããããªãã¥ã¢ã³ã¹ããããŸã
-BatchGetItemã¯äžåºŠã«æ倧100åã®ã¡ãã»ãŒãžãéžæããŸãã ãããã£ãŠããŠãŒã¶ãŒã242ãæã£ãŠããå Žåã3ã€ã®èŠæ±ãè¡ãå¿
èŠããããŸããããã«ã¯çŽ70ã100ããªç§ããããŸãã ããã念é ã«çœ®ããŠãããã©ãŒãã³ã¹ã®æé©åã®åäžã«åªãããã€ã¢ãã°ããŒã¿ã
ElasticCacheã«ãã£ãã·ã¥ããæ°ããã¡ãã»ãŒãžããšã«æŽæ°ããŸãã
äŸ2ãã€ã¢ãã°ã«æ°ããã¡ãã»ãŒãžãè¿œå ããããšãéèŠã§ãã DynamoDBã®ã¬ã³ãŒããåŸ
æ©ããªããããããŒã¿ããŒã¹ã®é床ã¯ããã»ã©éèŠã§ã¯ãããŸããã çµå±ã倧éã®èšé²ãå®æœããå¿
èŠããããããã¯ãã®åŸã®ãµã³ããªã³ã°ã®é床ã«éèŠãªåœ¹å²ãæãããŸãã æåã«ã
Messages PutItemããŒãã«ã«æ°ããã¡ãã»ãŒãžãæžã蟌ã¿ã次ã«
Dialogs UpdateItemããŒãã«ããã£ãã·ã¥ããŸãã 次ã«ãåãŠãŒã¶ãŒïŒUpdateItemïŒã®UserDialogsããŒãã«ã§messageCounterãã€ã³ã¯ãªã¡ã³ãããå¿
èŠããããŸãã çµå±ããã¹ãŠãèµ·ãããçªç¶ããŠãŒã¶ãŒã®1人ããã€ã¢ãã°ãåé€ããã¡ãã»ãŒãžã«ãŠã³ã¿ãŒããªã»ããããããšã«ããŸããã åèš= 4ãªã¯ãšã¹ãã§ãçŽ70ã100ããªç§ãæéå
ã«åéãããŸãã æ®å¿µãªããããã®ãããªãã©ã³ã¶ã¯ã·ã§ã³ã¯DynamoDBã§ã¯ãµããŒããããŠããŸãããããã«ãããããŒã¿ã®æŽåæ§ãéèŠãªããã»ã¹ã«æ確ãªå¶éã課ããããŸãã
äžè¬ã«ã補åèŠä»¶ã®å€æŽã¯éåžžã«äžè¬çãªåºæ¥äºã§ãã ããã«ã¯ãããŒã¿æ§é ã®å€æãå¿
èŠã«ãªãå ŽåããããŸãã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ã¯ãALTER TABLEã䜿çšããŠããã解決ããŸãããDynamoDBã§ã¯ãã®ããšã¯ãŸã£ãããããŸããã ããã§åè·¯ãå€æŽãããšãéåžžã«è²»çšãããããŸãã ããŒãã«ãåäœæãããã
Elastic MapReduceã䜿çšããå¿
èŠããããŸãã äž¡æ¹ã®ãªãã·ã§ã³ãæ¯æãå¿
èŠããããŸãã 倧éã®ããŒã¿=倧éã®ãéã ããã«ã©ãã«ã察åŠããããã«ãScan'om 1ã¡ã¬ãã€ãã®ãã¹ãŠã®ããŒã¿ãéžæããŠãããæ°ããããŒãã«ã«æžã蟌ãå¿
èŠããããŸããã ããã«ã¯å€ãã®æéãããããŸãããããã¯DBAãäžè¶³ããŠããããã®è²»çšã§ãã
âDynamoDBã® å°è±¡
DynamoDBã®äœ¿çšã«é¢ããå®éšã¯æåããŸããã ããã¯ãæ¡åŒµã容æãªçŽ æŽãããããŒã¿ããŒã¹ã§ãã ããã䜿ã£ãŠç®¡çãå¿ããŠãã ããã ãã ããèŠè¿ãã«ãã¢ãŒããã¯ãã£èšèšæ®µéã§æ
éã«åŠçããå¿
èŠãããããšãå¿ããªãã§ãã ããã ãã以å€ã®å Žåãããããçš®é¡ã®äºæããªãã¿ãŒã³ãšäžå¿«ãªã¬ãŒããããã§å¯èœã§ãã éèŠã§ã¯ãªãããŒã¿ã倧éã«ãããããããé »ç¹ã«äœ¿çšããå¿
èŠãããå Žåã¯ãDynamoDBã䜿çšããããšããå§ãããŸãã ç§ãã¡ã¯äœ¿çšããŸã-ç§ãã¡ã¯ããã奜ãã§ã:)
***
è±èªã®ãã€ã¢ãã°ã§ç°¡åãã€èªç¶ã«ã³ãã¥ãã±ãŒã·ã§ã³ã
ãšã -å¿«é©ãªäŒç€Ÿã§è±èªãç·Žç¿ãã
ããŒã ã«åå ããŸãããïŒ
Facebook ã
Vkontakte ã
Twitterã§ãã¥ãŒã¹ããã©ããŒããå°è±¡ãå
±æããŠæ¥œããã§ãã ããã ã³ãã¥ãã±ãŒã·ã§ã³ã®èªç±ã¯çŽ æŽãããïŒ
LinguaLeoããŒã