ä»æ¥ã¯ãè² è·ã®é«ãã·ã¹ãã ã®äœ¿çšäžã«çºçããåé¡ã®è§£æ±ºçã«ã€ããŠã話ããããšæããŸãã ãã®è³æã§èª¬æããããšã¯ãã¹ãŠãç§èªèº«ã®çµéšã§ãã¹ããããŠããŸããç§ã¯ããœãŒã·ã£ã«ãã¢ãã€ã«ããã©ãŠã¶ãŒã²ãŒã ãéçºããPlariumã®ãœãŒã·ã£ã«ã²ãŒã ãµãŒããŒããŒã ãªãŒãã§ãã
ãŸããããã€ãã®çµ±èšã Plariumã¯2009幎ããã²ãŒã ãéçºããŠããŸãã çŸåšãç§ãã¡ã®ãããžã§ã¯ãã¯æã人æ°ã®ãããã¹ãŠã®ãœãŒã·ã£ã«ãããã¯ãŒã¯ïŒVkontakteãMy WorldãOdnoklassnikiãFacebookïŒã§éå§ãããŠãããããã€ãã®ã²ãŒã ãäž»èŠãªã²ãŒã ããŒã¿ã«ïŒgames.mail.ruãKabamïŒã«çµ±åãããŠããŸãã å¥ã«ããã©ãŠã¶ãšã¢ãã€ã«ïŒiOSïŒããŒãžã§ã³ã®ãã«ãŒã«ãªããŠã©ãŒãæŠç¥ããããŸãã ããŒã¿ããŒã¹ã«ã¯8000äžäººãè¶ ãããŠãŒã¶ãŒïŒ5ã²ãŒã ã7èšèªã§ã®ããŒã«ã©ã€ãºã1æ¥ããã300äžã®ãŠããŒã¯ãã¬ã€ã€ãŒïŒãå«ãŸããŠããããããã¹ãŠã®ãµãŒããŒã1ç§ãããå¹³åçŽ6,500ãªã¯ãšã¹ããš1æ¥ããã5å6100äžãªã¯ãšã¹ããåä¿¡ããŸãã
æŠéãµãŒããŒã®ããŒããŠã§ã¢ãã©ãããã©ãŒã ãšããŠã4ã³ã¢ïŒx2 HTïŒã32ã64 GB RAMã1ã2 TB HDDã®2ã€ã®ãµãŒããŒCPUãäž»ã«äœ¿çšãããŸãã ãµãŒããŒã¯Windows Server 2008 R2ãå®è¡ããŠããŸãã ã³ã³ãã³ãã¯ãæ倧5 Gbpsã®åž¯åå¹ ã§CDNãä»ããŠé ä¿¡ãããŸãã
éçºã¯ãCïŒããã°ã©ãã³ã°èšèªã®.NET Framework 4.5ã«åºã¥ããŠããŸãã
ç§ãã¡ã®ä»äºã®è©³çŽ°ãèãããšãã·ã¹ãã ã®å®å®ããæ©èœã確ä¿ããã ãã§ãªããã·ã¹ãã ãè² è·ã®å€§ããªãžã£ã³ãã«èããããšãã§ããããã«ããå¿ èŠããããŸãã æ®å¿µãªãããå€ãã®äžè¬çãªã¢ãããŒããšæè¡ââã¯é«è² è·ã®ãã¹ãã«èãããããããã«ã·ã¹ãã ã®ããã«ããã¯ã«ãªããŸãã ãããã£ãŠãå€ãã®åé¡ãåæããçµæããããã解決ããæé©ãªïŒç§ã«ãšã£ãŠã®ïŒæ¹æ³ãèŠã€ãããŸããã ã©ã®ãã¯ãããžãŒãéžæããã©ã®ãã¯ãããžãŒãæŸæ£ãããã説æãããã®çç±ã説æããŸãã
NoSQLãš ãªã¬ãŒã·ã§ãã«
ãã®æŠãã§ãçŽç²ãªNoSQLã¯åŒ±ãæŠéæ©ã§ããããšãå€æããŸãããåœæååšããŠãããœãªã¥ãŒã·ã§ã³ã¯ãå¥å šãªããŒã¿ã®äžè²«æ§ããµããŒãããã転åã«å¯ŸããŠååãªæµæåããªãã£ããããããã»ã¹ã§æããããŸããã çµå±ãéžæã¯ãªã¬ãŒã·ã§ãã«DBMSã«ããã£ããããå¿ èŠãªå Žæã§ãã©ã³ã¶ã¯ã·ã§ã³æ§ã䜿çšã§ããããã«ãªããŸããããäžè¬çã«ã¯ãNoSQLãäž»ãªã¢ãããŒããšããŠäœ¿çšãããŸãã ç¹ã«ãããŒãã«ã¯éåžžã«åçŽãªããŒãšå€ã®æ§é ãæã£ãŠããããšãå€ããããŒã¿ã¯JSONã®åœ¢åŒã§æ瀺ãããBLOBåã«ããã¯åœ¢åŒã§æ ŒçŽãããŸãã çµæãšããŠãã¹ããŒã ã¯ã·ã³ãã«ã§å®å®ãããŸãŸã§ãããããŒã¿ãã£ãŒã«ãã®æ§é ã¯ç°¡åã«æ¡åŒµããã³å€æŽã§ããŸãã å¥åŠãªããšã«ãããã¯éåžžã«è¯ãçµæããããããŸã-ç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãäž¡æ¹ã®äžçã®å©ç¹ãçµã¿åãããŸããã
ORM vs. ADO.NET
çŽç²ãªADO.NETã®ãªãŒããŒãããã¯æå°éã§ããããã¹ãŠã®ãªã¯ãšã¹ãã¯æåã§äœæããã䜿ãæ £ããŠãããéãæž©ãããšããäºå®ãèæ ®ããŠãORMã¯ãã£ãŒãããã¯ã¢ãŠãã«éä¿¡ãããŸãã ãããŠããã¹ãŠã®çç±ã¯ããªããžã§ã¯ããªã¬ãŒã·ã§ãã«ãããã³ã°ã«ã¯ãäœããã©ãŒãã³ã¹ãäœã¯ãšãªå¶åŸ¡ïŒãŸãã¯ãã®æ¬ åŠïŒãªã©ãå€ãã®ãã€ãã¹ãããããã§ãã å€ãã®ORMãœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåã¯ãã©ã€ãã©ãªãé·æéé »ç¹ã«äœ¿çšããå¿ èŠããããäž»ãªãã®ã§ããé床ã倱ãããŸãã ãŸããã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã®ã¿ã€ã ã¢ãŠããªã©ãæ£ããåŠçããããã®ããªãããŒãªãã©ã°ã«ã€ããŠã¯ãORMã䜿çšããŠãã®ãããªãã©ã°ãèšå®ããããšãæ³åããããšãããšãå®å šã«ã€ã©ã€ã©ããŸãã
åæ£ãã©ã³ã¶ã¯ã·ã§ã³ãš æçµçãªäžè²«æ§
ãã©ã³ã¶ã¯ã·ã§ã³ã®äž»ãªç®çã¯ãæäœã®å®äºåŸã«ããŒã¿ã®äžè²«æ§ã確ä¿ããããšã§ãã å€æŽã¯æ£åžžã«ä¿åãããããäœãåé¡ãçºçããå Žåã¯å®å šã«ããŒã«ããã¯ãããŸãã ãããŠããã1ã€ã®åºå°ã®å Žåã«ããããééããªãéèŠãªã¡ã«ããºã ã§ããããšãåãã§äœ¿çšããå Žåãé«è² è·ã§ã®åæ£ãã©ã³ã¶ã¯ã·ã§ã³ã¯æé«ã§ã¯ãªãããšãããããŸããã 䜿çšã®çµæãåŸ æ©æéãé·ããªããããžãã¯ãè€éã«ãªããŸãïŒããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã®ã¡ã¢ãªå ã®ãã£ãã·ã¥ãæŽæ°ããå¿ èŠæ§ããããããã¯ã®å¯èœæ§ãç©ççãªé害ã«å¯Ÿããèæ§ãäœãããšãæãåºããŸãïŒã
ãã®çµæãã¡ãã»ãŒãžãã¥ãŒäžã«æ§ç¯ãããç¬èªã®ããŒãžã§ã³ã®çµææŽåæ§ãæäŸããã¡ã«ããºã ãéçºããŸããã ãã®çµæãã¹ã±ãŒã©ããªãã£ãé害ã«å¯Ÿããå埩åãäžè²«æ§ã®é©åãªéå§æéããããããã¯ã®æ¬ åŠãåŸãããŸããã
SOAPãWCFãªã© 察 JSON over HTTP
æ¢è£œã®SOAPã¹ã¿ã€ã«ã®ãœãªã¥ãŒã·ã§ã³ïŒæšæºã®.NETãWCFãWeb APIãªã©ã®WebãµãŒãã¹ïŒã䜿çšãããšãäžååãªæè»æ§ãæ€åºãããããŸããŸãªã¯ã©ã€ã¢ã³ããã¯ãããžã®æ§æãšãµããŒãã§åé¡ãçºçããè¿œå ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ä»²ä»è ãç»å ŽããŸããã ããŒã¿ãåŠçããããã«ãJSONãHTTPçµç±ã§éä¿¡ããããšãéžæããŸãããããã¯ããã®æ倧ã®åçŽãã ãã§ãªãããã®ãããªãããã³ã«ã䜿çšããŠåé¡ã蚺æããã³ä¿®æ£ããã®ãéåžžã«ç°¡åã ã£ãããã§ãã ãŸãããã®åçŽãªçµã¿åããã¯ãã¯ã©ã€ã¢ã³ããã¯ãããžãŒãæãåºãã«ããŒããŠããŸãã
MVC.NETãSpring.NET vs. 裞ã®ASP.NET
ç§ã®çµéšã«åºã¥ããŠãMVC.NETãSpring.NETãããã³é¡äŒŒã®ãã¬ãŒã ã¯ãŒã¯ã¯ãæ倧ã®ããã©ãŒãã³ã¹ã®å§çž®ã劚ããäžå¿ èŠãªäžéæ§é ãäœæãããšèšãããšãã§ããŸãã ç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³ã¯ãASP.NETãæäŸããæãåºæ¬çãªæ©èœã®äžã«æ§ç¯ãããŠããŸãã å®éããšã³ããªãã€ã³ãã¯ããã€ãã®äžè¬çãªãã³ãã©ã§ãã åäžã®æšæºã¢ãžã¥ãŒã«ã¯äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ãã£ããªASP.NETã»ãã·ã§ã³ã¯1ã€ãããŸããã ãã¹ãŠãæ確ã§ã·ã³ãã«ã§ãã
èªè»¢è»ã«ã€ããŠå°ã
åé¡ã解決ããããã®æ¢åã®æ¹æ³ãã©ããé©åã§ãªãå Žåã¯ãå°ãçºæè ã«ãªãã質åãžã®åçãåæ€çŽ¢ããå¿ èŠããããŸãã ãããŠãããšãããªããæã è»èŒªãåçºæãããšããŠãããã®èªè»¢è»ããããžã§ã¯ãã«ãšã£ãŠéèŠã§ããã°ãããã¯äŸ¡å€ããããŸãã
JSONã·ãªã¢ã«å
CPUã䜿çšããæéã®3åã®1以äžãJSON圢åŒã®å€§éã®ããŒã¿ã®ã·ãªã¢ã«å/éã·ãªã¢ã«åã«è²»ããããŠããããããã®ã¿ã¹ã¯ã®æå¹æ§ã®åé¡ã¯ãã·ã¹ãã ããã©ãŒãã³ã¹å šäœã®ã³ã³ããã¹ãã§éåžžã«éèŠã§ãã
åœåãäœæ¥ã§ã¯Newtonsoft JSON.NETã䜿çšããŸããããç¹å®ã®æç¹ã§ããã®é床ãååã§ã¯ãªããå¿ èŠãªãµãæ©èœã®æ©èœãããé«éã«å®è£ ã§ãããšããçµè«ã«éããŸããã JSONã¹ããŒããJObjectã§ã®éã·ãªã¢ã«åãªã©ã
ãããã£ãŠãããŒã¿ã®è©³çŽ°ãèæ ®ããŠãã·ãªã¢ã«åãç¬èªã«äœæããŸããã åæã«ããã¹ãã§åŸããããœãªã¥ãŒã·ã§ã³ã¯ãJSON.Netã®10åãfastJSONã®3åã®é床ã§ããã
ç§ãã¡ã«ãšã£ãŠéèŠãªã®ã¯ãNewtonsoftã䜿çšããŠã·ãªã¢ã«åãããæ¢åã®ããŒã¿ãšã®äºææ§ã§ããã äºææ§ã確ä¿ããããã«ãæ¬çªç°å¢ã«ã·ãªã¢ã«åãå«ããåã«ãããã€ãã®å€§èŠæš¡ãªããŒã¿ããŒã¹ã§ãã¹ãããŸããïŒJSON圢åŒã§ããŒã¿ãèªã¿åããã©ã€ãã©ãªã䜿çšããŠéã·ãªã¢ã«åããåã³ã·ãªã¢ã«åããŠãœãŒã¹ãšæçµJSONã®ç䟡æ§ã確èªããŸããã
èšæ¶
ããŒã¿ãæŽçããããã®ã¢ãããŒãã®ããã倧ããªãªããžã§ã¯ãã®å€§ããããããŒãïŒå€§ããªãªããžã§ã¯ãããŒãïŒãšãã圢ã§ãã€ãã¹ã®åœ±é¿ããããŸããã æ¯èŒã®ããã«ããã®ãµã€ãºã¯ã第2äžä»£ã®ãªããžã§ã¯ãã®400ã500ã¡ã¬ãã€ãã«å¯ŸããŠå¹³åçŽ8ã®ã¬ãã€ãã§ããã ãã®çµæã以åã«å²ãåœãŠããããããã¯ã®ããŒã«ã䜿çšããŠã倧ããªããŒã¿ãããã¯ãå°ããªãããã¯ã«åå²ããããšã§ããã®åé¡ã解決ããŸããã ãã®ã¹ããŒã ã®ãããã§ãå€ãã®å€§ããªãªããžã§ã¯ããå€§å¹ ã«åæžãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®çºçé »åºŠãäœããªããç°¡åã«ãªããŸããã ãŠãŒã¶ãŒã¯æºè¶³ããŠãããããã¯éèŠã§ãã
ã¡ã¢ãªã䜿çšããå Žåãç°ãªããµã€ãºã®è€æ°ã®ãã£ãã·ã¥ãç°ãªããšãŒãžã³ã°ããã³æŽæ°ããªã·ãŒã§äœ¿çšããŸãããäžéšã®ãã£ãã·ã¥ã®èšèšã¯éåžžã«ã·ã³ãã«ã§ã食ãæ°ã®ãªããã®ã§ãã ãã®çµæããã¹ãŠã®ãã£ãã·ã¥ã®å¹çææšã¯90ã95ïŒ ä»¥äžã§ãã
Memcachedããã¹ãããåŸãç§ãã¡ã¯å°æ¥ã®ããã«å»¶æããããšã«ããŸããã ãŸã å¿ èŠãããŸããã äžè¬ã«ãçµæã¯æªããããŸããããå šäœçãªããã©ãŒãã³ã¹ã®åäžã¯ããã£ãã·ã¥ã«ããŒã¿ãé 眮ããéã®è¿œå ã®ã·ãªã¢ã«å/éã·ãªã¢ã«åã®ã³ã¹ããè¶ ããŸããã§ããã
è¿œå ã®ããŒã«
â¢ãããã¡ã€ã©ãŒ
䜿ãæ £ãããããã¡ã€ã©ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ãããšã¢ããªã±ãŒã·ã§ã³ã®é床ãå€§å¹ ã«äœäžãããå®éã«ååã«ããŒããããã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°ãäžå¯èœã«ãããããããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã®ã·ã¹ãã ã䜿çšããŸãã

ãã®ãã¹ãã±ãŒã¹ã¯ãååä»ãã®ã«ãŠã³ã¿ãŒã§åºæ¬æäœãã©ããããããšã瀺ããŠããŸãã çµ±èšã¯ã¡ã¢ãªã«èç©ãããä»ã®æçšãªæ å ±ãšãšãã«ãµãŒããŒããåéãããŸãã ã³ãŒã«ãã§ãŒã³åæã®ã«ãŠã³ã¿ãŒéå±€ããµããŒããããŠããŸãã ãã®çµæãåæ§ã®ã¬ããŒããååŸã§ããŸãã

è¯å®çãªåŽé¢ã®äžã§ïŒ
-ã«ãŠã³ã¿ãŒã¯åžžã«ãªã³ã§ãã
-æå°ã³ã¹ãïŒCPUã䜿çšãããªãœãŒã¹ã®0.5ïŒ æªæºïŒ;
-ãããã¡ã€ã«ãããã»ã¯ã·ã§ã³ã®èå¥ãžã®ã·ã³ãã«ã§æè»ãªã¢ãããŒãã
-ãšã³ããªãã€ã³ãïŒãããã¯ãŒã¯èŠæ±ãã¡ãœããïŒã®ã«ãŠã³ã¿ãŒã®èªåçæã
-芪-åã«åºã¥ããŠè¡šç€ºããã³éèšããæ©èœã
-ãªã¢ã«ã¿ã€ã ããŒã¿ãè©äŸ¡ã§ããã ãã§ãªããã¡ãŒã¿ãŒã®æž¬å®å€ãçµæçã«ä¿åããŠãããã«è¡šç€ºããã³åæããããšãã§ããŸãã
â¢ãã®ã³ã°
å€ãã®å Žåãããããšã©ãŒã蚺æããå¯äžã®æ¹æ³ã§ãã äœæ¥ã§ã¯ã人éãèªã¿åãã圢åŒãšJSONã®2ã€ã®åœ¢åŒã䜿çšããŸãããååãªãã£ã¹ã¯å®¹éããããšãã«æžã蟌ã¿å¯èœãªãã¹ãŠãæžã蟌ã¿ãŸãã ãµãŒããŒãããã°ãåéããåæã«äœ¿çšããŸãã ãã¹ãŠãlog4netã«åºã¥ããŠè¡ããããããäœåãªãã®ã¯äžå䜿çšãããããœãªã¥ãŒã·ã§ã³ã¯å¯èœãªéãã·ã³ãã«ã§ãã
â¢ç®¡ç
管çããã«ã®è±å¯ãªã°ã©ãã£ã«ã«Webã€ã³ã¿ãŒãã§ã€ã¹ã«å ããŠã管çããã«ã«å€æŽãå ããããšãªããã²ãŒã ãµãŒããŒã«çŽæ¥ã³ãã³ããè¿œå ã§ããWebã³ã³ãœãŒã«ãéçºããŸããã ãŸããã³ã³ãœãŒã«ã䜿çšããŠã蚺æçšã®æ°ããã³ãã³ããéåžžã«ç°¡åãã€è¿ éã«è¿œå ãããªã³ã©ã€ã³ã§æè¡ããŒã¿ãååŸããããåèµ·åããã«ã·ã¹ãã ã調æŽãããã§ããŸãã
â¢å±é
ãµãŒããŒã®æ°ã®å¢å ã«äŒŽããæåã§äœãã泚ãããšã¯äžå¯èœã«ãªããŸããã ãã®ããã1人ã®ããã°ã©ãã®äœæ¥ã®ãã£ã1é±éã§ãèªåãµãŒããŒæŽæ°çšã®æãã·ã³ãã«ãªã·ã¹ãã ãéçºããŸããã ã¹ã¯ãªããã¯CïŒã§èšè¿°ãããŠãããããå±éããžãã¯ãå€æŽããã³ä¿å®ããã®ã«ååãªæè»æ§ããããŸããã ãã®çµæãéåžžã«ä¿¡é Œæ§ãé«ãã·ã³ãã«ãªããŒã«ãå ¥æããŸãããããã«ãããé倧ãªç¶æ³ã§ã¯æ°åã§ãã¹ãŠã®éçšãµãŒããŒïŒçŽ50ïŒãæŽæ°ã§ããŸãã
çµè«
ãµãŒããŒã«é«ãè² è·ããããªããé床ãéæããã«ã¯ãããã·ã³ãã«ã§èããã¯ãããžãŒã¹ã¿ãã¯ã䜿çšããå¿ èŠããããŸãããã¹ãŠã®ããŒã«ã¯äœ¿ãæ £ããäºæž¬å¯èœãªãã®ã§ãªããã°ãªããŸããã èšèšã¯ãåæã«ã·ã³ãã«ã§ãçŸåšã®åé¡ã解決ããã®ã«ååã§ãå®å šæ§ã®ããŒãžã³ãããå¿ èŠããããŸãã ããã©ãŒãã³ã¹å¶åŸ¡ããã£ãã·ã¥ããã«ã¯ãæ°Žå¹³ã¹ã±ãŒãªã³ã°ã䜿çšããã®ãæé©ã§ãã ã·ã¹ãã ã®ç¶æ ã®èšé²ãšç£èŠ-æ·±å»ãªãããžã§ã¯ãã®çåœç¶æã®ããã«å¿ èŠã§ãã ãŸããå±éã·ã¹ãã ã¯äººçãå€§å¹ ã«ç°¡çŽ åããããªãã®ç¥çµãšæéãç¯çŽããŸãã