ãããã¯ãŒã¯ãµãŒãã¹ãšã¯äœã§ããïŒ ããã¯ããããã¯ãŒã¯ãä»ããŠçä¿¡èŠæ±ãåãå ¥ããããããåŠçããããããå¿çãè¿ãããã°ã©ã ã§ãã
ãããã¯ãŒã¯ãµãŒãã¹ãäºãã«ç°ãªãå€ãã®åŽé¢ããããŸãã ãã®èšäºã§ã¯ãçä¿¡èŠæ±ãåŠçããæ¹æ³ã«çŠç¹ãåœãŠãŸãã
èŠæ±åŠçæ¹æ³ãéžæãããšãåºç¯å²ã«åã¶åœ±é¿ããããŸãã 100,000ã®åææ¥ç¶ã«èãããã£ãããµãŒãã¹ãäœæããæ¹æ³ ç·©ããã«æ§é åããããã¡ã€ã«ã®ã¹ããªãŒã ããããŒã¿ãæœåºããããã«ã©ã®ã¢ãããŒããåãã¹ãã§ããïŒ ééã£ãéžæã¯æéãšãšãã«ã®ãŒã®ç¡é§ã«ã€ãªãããŸãã
ãã®èšäºã§ã¯ãããã»ã¹/ã¹ã¬ããã®ããŒã«ãã€ãã³ãæååŠçãããŒãåæ/ããŒãéåæãã¿ãŒã³ãªã©ãå€ãã®ã¢ãããŒãã«ã€ããŠèª¬æããŠããŸãã å€æ°ã®äŸã瀺ãããã¢ãããŒãã®é·æãšçæããããã®æ©èœãšã¢ããªã±ãŒã·ã§ã³ãèæ ®ãããŠããŸãã
ã¯ããã«
ã¯ãšãªåŠçã¡ãœããã®ãããã¯ã¯æ°ãããã®ã§ã¯ãããŸãããããšãã°ã one ã twoãåç §ããŠãã ããã ãã ããã»ãšãã©ã®èšäºã§ã¯éšåçã«ããèæ ®ãããŠããŸããã ãã®èšäºã¯ãã®ã£ãããåããåé¡ã®äžè²«ãããã¬ãŒã³ããŒã·ã§ã³ãæäŸããããšãç®çãšããŠããŸãã
次ã®ã¢ãããŒããæ€èšãããŸãã
- é 次åŠç
- èŠæ±ããã»ã¹
- ãªã¯ãšã¹ãã¹ããªãŒã
- ããã»ã¹/ã¹ã¬ããããŒã«
- ã€ãã³ãæååŠçïŒãªã¢ã¯ã¿ãŒãã¿ãŒã³ïŒ
- ååæ/åéåæãã¿ãŒã³
- ã³ã³ãã¢åŠç
èŠæ±ãåŠçãããµãŒãã¹ã¯ãå¿ ããããããã¯ãŒã¯ãµãŒãã¹ã§ã¯ãªãããšã«æ³šæããŠãã ããã ããã¯ãããŒã¿ããŒã¹ãŸãã¯ã¿ã¹ã¯ãã¥ãŒããæ°ããã¿ã¹ã¯ãåãåããµãŒãã¹ã§ãã ãã®èšäºã§ã¯ããããã¯ãŒã¯ãµãŒãã¹ã瀺ããŠããŸãããæ€èšäžã®ã¢ãããŒãã®ç¯å²ãåºãããšãç解ããå¿ èŠããããŸãã
TL; DR
èšäºã®æåŸã«ã¯ãåã¢ãããŒãã®ç°¡åãªèª¬æãèšèŒããããªã¹ãããããŸãã
é 次åŠç
ã¢ããªã±ãŒã·ã§ã³ã¯ãåäžããã»ã¹ã®åäžã¹ã¬ããã§æ§æãããŸãã ãã¹ãŠã®ãªã¯ãšã¹ãã¯é çªã«ã®ã¿åŠçãããŸãã 䞊åæ§ã¯ãããŸããã è€æ°ã®èŠæ±ãåæã«ãµãŒãã¹ã«å°éãããšããã®ãã¡ã®1ã€ãåŠçãããæ®ãã¯ãã¥ãŒã«å ¥ããããŸãã
ãã®ã¢ãããŒãã®å©ç¹ã¯ãå®è£ ãç°¡åãªããšã§ãã ããã¯ããªãœãŒã¹ã®ç«¶åã¯ãããŸããã æãããªãã€ãã¹ã¯ãå€æ°ã®é¡§å®¢ã«å¯Ÿå¿ã§ããªãããšã§ãã
ãªã¯ãšã¹ãããã»ã¹
ã¢ããªã±ãŒã·ã§ã³ã¯ãçä¿¡ãªã¯ãšã¹ããšã¯ãŒã¯ãããŒãåãå ¥ããã³ã¢ããã»ã¹ã§æ§æãããŸãã ã¡ã€ã³ããã»ã¹ã¯ãæ°ãããªã¯ãšã¹ãããšã«ããªã¯ãšã¹ããåŠçããã¯ãŒã¯ãããŒãäœæããŸãã ãªã¯ãšã¹ãæ°ã«ããã¹ã±ãŒãªã³ã°ã¯ç°¡åã§ããåãªã¯ãšã¹ãã¯ç¬èªã®ããã»ã¹ãååŸããŸãã
ãã®ã¢ãŒããã¯ãã£ã«ã¯è€éãªãã®ã¯ãããŸãããã åé¡ å¶é ïŒ
- ããã»ã¹ã¯å€ãã®ãªãœãŒã¹ãæ¶è²»ããŸãã
PostgreSQL RDBMSãžã®10,000ã®åææ¥ç¶ãäœæããŠã¿ãŠãçµæã確èªããŠãã ããã - ããã»ã¹ã«ã¯å ±æã¡ã¢ãªããããŸããïŒããã©ã«ãïŒã å ±æããŒã¿ãŸãã¯å ±æãã£ãã·ã¥ã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåã¯ãå ±æã¡ã¢ãªããããããïŒLinux mmapãmunmapãåŒã³åºãïŒããå€éšã¹ãã¬ãŒãžã䜿çšããïŒmemcahedãredisïŒå¿ èŠããããŸã
ãããã®åé¡ã¯æ±ºããŠæ¢ãŸããŸããã 以äžã¯ãããããPostgeSQL RDBMSã§ç®¡çãããæ¹æ³ã瀺ããŸãã
ãã®ã¢ãŒããã¯ãã£ã®é·æ ïŒ
- ããã»ã¹ã®1ã€ãèœã¡ãŠããä»ã®ããã»ã¹ã«ã¯åœ±é¿ããŸããã ããšãã°ããŸãã«åŠçãšã©ãŒãçºçããŠãã¢ããªã±ãŒã·ã§ã³å šäœããããããããããšã¯ãªããåŠçããããªã¯ãšã¹ãã®ã¿ã圱é¿ãåããŸãã
- ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã§ã®ã¢ã¯ã»ã¹æš©ã®å·®å¥åã ããã»ã¹ã¯OSã®æ¬è³ªã§ãããããOSãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹æš©ãåºåãããã®æšæºã¡ã«ããºã ã䜿çšã§ããŸãã
- å®è¡äžã®ããã»ã¹ããã®å Žã§å€æŽã§ããŸãã ããšãã°ããªã¯ãšã¹ãã®åŠçã«å¥ã®ã¹ã¯ãªããã䜿çšããåŠçã¢ã«ãŽãªãºã ã眮ãæããã«ã¯ãã¹ã¯ãªãããå€æŽããã ãã§ååã§ãã 以äžã«äŸãæ€èšããŸãã
- å¹ççã«äœ¿çšããããã«ãã³ã¢ãã·ã³
äŸïŒ
- PostgreSQL RDBMSã¯ãæ°ããæ¥ç¶ããšã«æ°ããããã»ã¹ãäœæããŸãã å ±æã¡ã¢ãªã¯ãäžè¬çãªããŒã¿ãåŠçããããã«äœ¿çšãããŸãã PostgreSQLã®ããã»ã¹ããªãœãŒã¹ã倧éã«æ¶è²»ãããšããåé¡ã¯ãããŸããŸãªæ¹æ³ã§è§£æ±ºã§ããŸãã 顧客ãå°ãªãå ŽåïŒã¢ããªã¹ãå°çšã®ã¹ã¿ã³ãïŒããã®ãããªåé¡ã¯ãããŸããã ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããåäžã®ã¢ããªã±ãŒã·ã§ã³ãããå Žåãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ããŒã¿ããŒã¹æ¥ç¶ããŒã«ãäœæã§ããŸãã å€ãã®ã¢ããªã±ãŒã·ã§ã³ãããå Žåã¯ãpgbouncerã䜿çšã§ããŸã
- sshdã¯ãããŒã22ã§çä¿¡èŠæ±ããªãã¹ã³ããæ¥ç¶ããšã«åå²ããŸãã åsshæ¥ç¶ã¯ããŠãŒã¶ãŒã³ãã³ããé çªã«åä¿¡ããŠå®è¡ããsshdããŒã¢ã³ã®åå²ã§ãã ãã®ã¢ãŒããã¯ãã£ã®ãããã§ãOSèªäœã®ãªãœãŒã¹ãã¢ã¯ã»ã¹æš©ãåºå¥ããããã«äœ¿çšãããŸã
- ç§ãã¡èªèº«ã®å®è·µããã®äŸã ã¡ã¿ããŒã¿ãååŸããå¿ èŠãããéæ§é åãã¡ã€ã«ã®ã¹ããªãŒã ããããŸãã ã¡ã€ã³ãµãŒãã¹ããã»ã¹ã¯ããã³ãã©ãŒããã»ã¹éã§ãã¡ã€ã«ãé åžããŸãã åãã³ãã©ãŒããã»ã¹ã¯ããã©ã¡ãŒã¿ãŒãšããŠãã¡ã€ã«ãã¹ãåãã¹ã¯ãªããã§ãã ãã¡ã€ã«åŠçã¯å¥ã®ããã»ã¹ã§è¡ããããããåŠçãšã©ãŒãåå ã§ãµãŒãã¹å šäœãã¯ã©ãã·ã¥ããããšã¯ãããŸããã åŠçã¢ã«ãŽãªãºã ãæŽæ°ããã«ã¯ããµãŒãã¹ãåæ¢ããã«åŠçã¹ã¯ãªãããå€æŽããã ãã§ååã§ãã
äžè¬ã«ããã®ã¢ãããŒãã«ã¯ãã®ç¯å²ã決å®ããå©ç¹ããããšèšããªããã°ãªããŸããããã¹ã±ãŒãªã³ã°ã®å¯èœæ§ã¯éåžžã«éãããŠããŸãã
ãªã¯ãšã¹ãã¹ããªãŒã
ãã®ã¢ãããŒãã¯ãåã®ã¢ãããŒããšãã䌌ãŠããŸãã éãã¯ãããã»ã¹ã®ä»£ããã«ã¹ã¬ããã䜿çšãããããšã§ãã ããã«ãããããã«å ±æã¡ã¢ãªã䜿çšã§ããŸãã ãã ãã以åã®ã¢ãããŒãã®ä»ã®å©ç¹ã¯äœ¿çšã§ããŸãããããªãœãŒã¹ã®æ¶è²»éãé«ããªããŸãã
é·æïŒ
- ããã«äœ¿ããå ±æã¡ã¢ãª
- å®è£ ã®ãããã
- ãã«ãã³ã¢CPUã®å¹ççãªäœ¿çš
çæïŒ
- ã¹ããªãŒã ã¯å€ãã®ãªãœãŒã¹ãæ¶è²»ããŸãã UNIXã®ãããªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ãã¹ã¬ããã¯ããã»ã¹ãšã»ãŒåãæ°ã®ãªãœãŒã¹ãæ¶è²»ããŸã
䜿çšäŸã¯MySQLã§ãã ãã ããMySQLã¯æ··åã¢ãããŒãã䜿çšããŠããããããã®äŸã«ã€ããŠã¯æ¬¡ã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
ããã»ã¹/ã¹ã¬ããããŒã«
ã¹ããªãŒã ïŒããã»ã¹ïŒã¯ãé«äŸ¡ã§é·ããªããŸãã ãªãœãŒã¹ãç¡é§ã«ããªãããã«ãåãã¹ã¬ãããç¹°ãè¿ã䜿çšã§ããŸãã ããã«ã¹ã¬ããã®æ倧æ°ãå¶éããŠãã¹ã¬ããïŒããã»ã¹ïŒã®ããŒã«ãååŸããŸãã ããã§ãã¡ã€ã³ã¹ã¬ããã¯çä¿¡èŠæ±ãåãå ¥ãããããããã¥ãŒã«å ¥ããŸãã ã¯ãŒã¯ãããŒã¯ããã¥ãŒãããªã¯ãšã¹ããååŸããŠåŠçããŸãã ãã®ã¢ãããŒãã¯ããªã¯ãšã¹ãã®ã·ãŒã±ã³ã·ã£ã«åŠçã®èªç¶ãªã¹ã±ãŒãªã³ã°ãšããŠæ¡çšã§ããŸããåã¯ãŒã«ãŒã¹ã¬ããã¯ãããŒãã·ãŒã±ã³ã·ã£ã«ã«ããåŠçã§ãããããããããŒã«ããããšã§ãªã¯ãšã¹ãã䞊è¡ããŠåŠçã§ããŸãã åã¹ããªãŒã ã1000 rpsãåŠçã§ããå Žåã5ã¹ããªãŒã ã5000 rpsã«è¿ãè² è·ãåŠçããŸãïŒå ±æãªãœãŒã¹ã®ç«¶åã¯æå°éã«æããããŸãïŒã
ããŒã«ã¯ããµãŒãã¹ã®éå§æã«äºåã«äœæããããšããåŸã ã«åœ¢æããããšãã§ããŸãã ã¹ã¬ããããŒã«ã®äœ¿çšã¯ãããäžè¬çã§ã å ±æã¡ã¢ãªãé©çšã§ããŸãã
ã¹ã¬ããããŒã«ã®ãµã€ãºãå¶éããå¿ èŠã¯ãããŸããã ãµãŒãã¹ã¯ããŒã«ã®ç©ºãã¹ã¬ããã䜿çšã§ããååšããªãå Žåã¯æ°ããã¹ã¬ãããäœæããŸãã èŠæ±ãåŠçããåŸãã¹ã¬ããã¯ããŒã«ã«åå ãã次ã®èŠæ±ãåŸ ã¡ãŸãã ãã®ãªãã·ã§ã³ã¯ãã¹ã¬ãããªã³ãªã¯ãšã¹ãã¢ãããŒããšã¹ã¬ããããŒã«ã®çµã¿åããã§ãã 以äžã«äŸã瀺ããŸãã
é·æïŒ
- å€ãã®CPUã³ã¢ã®äœ¿çš
- ã¹ã¬ãã/ããã»ã¹äœæã®ã³ã¹ãåæž
çæïŒ
- åæã¯ã©ã€ã¢ã³ãæ°ã®éãããã¹ã±ãŒã©ããªãã£ã ããŒã«ã䜿çšãããšãè¿œå ã®ãªãœãŒã¹ã³ã¹ããªãã§åãã¹ã¬ãããè€æ°ååå©çšã§ããŸãããã¹ã¬ãã/ããã»ã¹ã«ãã£ãŠæ¶è²»ããã倧éã®ãªãœãŒã¹ã®æ ¹æ¬çãªåé¡ã¯è§£æ±ºããŸããã ãã®ã¢ãããŒãã䜿çšããŠ100,000ã®åææ¥ç¶ã«èããããšãã§ãããã£ãããµãŒãã¹ã®äœæã¯å€±æããŸãã
- ã¹ã±ãŒã©ããªãã£ã¯å ±æãªãœãŒã¹ã«ãã£ãŠå¶éãããŸããããšãã°ãã¹ã¬ãããã»ããã©/ãã¥ãŒããã¯ã¹ã䜿çšããŠã¢ã¯ã»ã¹ã調æŽããããšã«ããå ±æã¡ã¢ãªã䜿çšããå Žåã§ãã ããã¯ãå ±æãªãœãŒã¹ã䜿çšãããã¹ãŠã®ã¢ãããŒãã®å¶éã§ãã
äŸïŒ
- uWSGIããã³nginxã§å®è¡ãããPythonã¢ããªã±ãŒã·ã§ã³ã ã¡ã€ã³ã®uWSGIããã»ã¹ã¯ãnginxããçä¿¡ãªã¯ãšã¹ããåä¿¡ãããªã¯ãšã¹ããåŠçããã€ã³ã¿ãŒããªã¿ãŒã®Pythonããã»ã¹ã«ããããé ä¿¡ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãuWSGIäºæãã¬ãŒã ã¯ãŒã¯ïŒDjangoãFlaskãªã©ïŒã§äœæã§ããŸãã
- MySQLã¯ã¹ã¬ããããŒã«ã䜿çšããŸããæ°ããæ¥ç¶ã¯ãããããããŒã«ã®ç©ºãã¹ã¬ããã®1ã€ã«ãã£ãŠåŠçãããŸãã 空ãã¹ã¬ããããªãå ŽåãMySQLã¯æ°ããã¹ã¬ãããäœæããŸãã 空ãã¹ã¬ããã®ããŒã«ã®ãµã€ãºãšã¹ã¬ããïŒæ¥ç¶ïŒã®æ倧æ°ã¯ãèšå®ã«ãã£ãŠå¶éãããŸãã
ããããããã¯ãæãäžè¬çã§ã¯ãªãã«ããŠãããããã¯ãŒã¯ãµãŒãã¹ãæ§ç¯ããããã®æãäžè¬çãªã¢ãããŒãã®1ã€ã§ãã ããã«ããã倧ããªrpã«å°éããŠãé©åã«ã¹ã±ãŒãªã³ã°ã§ããŸãã ãã®ã¢ãããŒãã®äž»ãªå¶éã¯ãåæã«åŠçããããããã¯ãŒã¯æ¥ç¶ã®æ°ã§ãã å®éããã®ã¢ãããŒãã¯ããªã¯ãšã¹ããçããã顧客ãå°ãªãå Žåã«ã®ã¿æå¹ã§ãã
ã€ãã³ãæåã®åŠçïŒãªã¢ã¯ã¿ãŒãã¿ãŒã³ïŒ
åæãšéåæã®2ã€ã®ãã©ãã€ã ã¯ãäºãã«æ°žé ã®ç«¶äºçžæã§ãã ãããŸã§ãåæã¢ãããŒãã®ã¿ãè°è«ãããŠããŸããããéåæã¢ãããŒããç¡èŠããã®ã¯ééã£ãŠããŸãã ã€ãã³ãæåãŸãã¯ãªã¢ã¯ãã£ããªãªã¯ãšã¹ãåŠçã¯ãåIOæäœãéåæã§å®è¡ãããæäœã®æåŸã«ãã³ãã©ãŒãåŒã³åºãããã¢ãããŒãã§ãã ååãšããŠãåãªã¯ãšã¹ãã®åŠçã¯ãå€ãã®éåæåŒã³åºããšããã«ç¶ããã³ãã©ãŒã®å®è¡ã§æ§æãããŸãã ãã€ã§ããã·ã³ã°ã«ã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã¯1ã€ã®ãã³ãã©ãŒã®ã³ãŒãã®ã¿ãå®è¡ããŸãããããŸããŸãªèŠæ±ã®ãã³ãã©ãŒã®å®è¡ã¯äº€äºã«è¡ããããããå€æ°ã®äžŠåèŠæ±ãåæã«ïŒç䌌䞊åïŒåŠçã§ããŸãã
ãã®ã¢ãããŒãã®è©³çŽ°ãªèª¬æã¯ããã®èšäºã®ç¯å²å€ã§ãã ãã詳ããèŠãã«ã¯ã ReactorïŒReactorïŒããå§ãããŸãNodeJSé床ã®ç§å¯ã¯äœã§ããïŒ ã NGINXã®å éš ã ããã§ã¯ããã®ã¢ãããŒãã®é·æãšçæãèæ ®ããããšã«éå®ããŠããŸãã
é·æïŒ
- rpsãšåææ¥ç¶æ°ã«ããå¹æçãªã¹ã±ãŒãªã³ã°ã ã»ãšãã©ã®æ¥ç¶ãI / Oã®å®äºãåŸ æ©ããŠããå Žåããªã¢ã¯ãã£ããµãŒãã¹ã¯å€æ°ã®æ¥ç¶ïŒæ°äžïŒãåæã«åŠçã§ããŸãã
çæïŒ
- éçºã®è€éãã éåæã¹ã¿ã€ã«ã§ã®ããã°ã©ãã³ã°ã¯ãåæããã°ã©ãã³ã°ãããå°é£ã§ãã èŠæ±åŠçã®ããžãã¯ã¯ããè€éã§ããããããã°ãåæã³ãŒããããå°é£ã§ãã
- ãµãŒãã¹å šäœã®ãããã¯ã«ã€ãªãããšã©ãŒã èšèªãŸãã¯ã©ã³ã¿ã€ã ãå ã éåæåŠççšã«èšèšãããŠããªãå Žåãåäžã®åææäœããµãŒãã¹å šäœããããã¯ããå¯èœæ§ããããã¹ã±ãŒãªã³ã°ã®å¯èœæ§ããªããªããŸãã
- CPUã³ã¢éã§ã®ã¹ã±ãŒãªã³ã°ãå°é£ã ãã®ã¢ãããŒãã§ã¯ãåäžããã»ã¹ã®åäžã¹ã¬ãããæ³å®ããŠãããããè€æ°ã®CPUã³ã¢ãåæã«äœ¿çšããããšã¯ã§ããŸããã ãã®å¶éãåé¿ããæ¹æ³ãããããšã«æ³šæããŠãã ããã
- åã®æ®µèœã®çµæïŒãã®ã¢ãããŒãã¯ãCPUãå¿ èŠãšããèŠæ±ã«å¯ŸããŠããŸãã¹ã±ãŒãªã³ã°ããŸããã ãã®ã¢ãããŒãã®rpã®æ°ã¯ãåèŠæ±ã®åŠçã«å¿ èŠãªCPUæäœã®æ°ã«åæ¯äŸããŸãã CPUèŠæ±ãèŠæ±ãããšããã®ã¢ãããŒãã®å©ç¹ãç¡å¹ã«ãªããŸãã
äŸïŒ
- Node.jsã¯ãããã«äœ¿çšã§ãããªã¢ã¯ã¿ãŒãã¿ãŒã³ã䜿çšããŸãã 詳现ã«ã€ããŠã¯ããNodeJSé床ã®ç§å¯ãšã¯ããåç §ããŠãã ããã
- nginxïŒnginxã®ã¯ãŒã«ãŒããã»ã¹ã¯ããªã¢ã¯ã¿ãã¿ãŒã³ã䜿çšããŠãªã¯ãšã¹ãã䞊ååŠçããŸãã 詳现ã«ã€ããŠã¯ãInside NGINXãåç §ããŠãã ããã
- OSããŒã«ïŒLinuxã§ã¯epollãWindowsã§ã¯IOCPãFreeBSDã§ã¯kqueueïŒãçŽæ¥äœ¿çšãããããã¬ãŒã ã¯ãŒã¯ïŒlibevãlibeventãlibuvãªã©ïŒã䜿çšããC / C ++ããã°ã©ã ã
ååæ/åéåæ
ãã®ååã¯ãæžç±ã POSAïŒãã¿ãŒã³ãšäžŠè¡ãªããžã§ã¯ãããã³ãããã¯ãŒã¯ãªããžã§ã¯ããããåãããŠããŸãã ãªãªãžãã«ã§ã¯ããã®ãã¿ãŒã³ã¯éåžžã«åºã解éãããŸããããã®èšäºã®ç®çã®ããã«ããã®ãã¿ãŒã³ãå€å°çãç解ããŸãã ããŒãåæ/ããŒãéåæã¯ãåãªã¯ãšã¹ãã«è»œéã®å¶åŸ¡ãããŒïŒã°ãªãŒã³ãããŒïŒã䜿çšãããªã¯ãšã¹ãåŠçã¢ãããŒãã§ãã ããã°ã©ã ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®1ã€ãŸãã¯è€æ°ã®ã¹ã¬ããã§æ§æãããŸãããããã°ã©ã å®è¡ã·ã¹ãã ã¯ã°ãªãŒã³ã¹ã¬ããããµããŒãããŸããããã¯OSãèªèãããå¶åŸ¡ã§ããŸããã
æ€èšãããå ·äœçã«ããããã®ããã€ãã®äŸ ïŒ
- Goèšèªã®ãµãŒãã¹ã Goèšèªã¯ãå®è¡ã®å€ãã®è»œéã¹ã¬ãã-goroutineããµããŒãããŠããŸãã ããã°ã©ã ã¯1ã€ä»¥äžã®OSã¹ã¬ããã䜿çšããŸãããããã°ã©ããŒã¯ãŽã«ãŒãã³ã§åäœããŸãããŽã«ãŒãã³ã¯ããã«ãã³ã¢CPUã䜿çšããããã«OSã¹ã¬ããéã§ééçã«åæ£ãããŸã
- geventã©ã€ãã©ãªã䜿çšããPythonãµãŒãã¹ã geventã©ã€ãã©ãªã«ãããããã°ã©ãã¯ã©ã€ãã©ãªã¬ãã«ã§ã°ãªãŒã³ã¹ã¬ããã䜿çšã§ããŸãã ããã°ã©ã å šäœãåäžã®OSã¹ã¬ããã§å®è¡ãããŸãã
æ¬è³ªçã«ããã®ã¢ãããŒãã¯ãéåæã¢ãããŒãã®é«ãããã©ãŒãã³ã¹ãšåæã³ãŒãã®ããã°ã©ãã³ã°ã®ã·ã³ãã«ããçµã¿åãããããã«èšèšãããŠããŸãã
ãã®ã¢ãããŒãã䜿çšãããšãåæã®é¯èŠã«ãããããããããã°ã©ã ã¯éåæã«åäœããŸããããã°ã©ã å®è¡ã·ã¹ãã ã¯ã€ãã³ãã«ãŒããå¶åŸ¡ããåãåæãæäœã¯å®éã«ã¯éåæã«ãªããŸãã ãã®ãããªæäœãåŒã³åºããããšãå®è¡ã·ã¹ãã ã¯OSããŒã«ã䜿çšããŠéåææäœãåŒã³åºããæäœã®å®äºã®ãã³ãã©ãŒãç»é²ããŸãã éåææäœãå®äºãããšãå®è¡ã·ã¹ãã ã¯ä»¥åã«ç»é²ããããã³ãã©ãŒãåŒã³åºãããåæãæäœã®åŒã³åºããã€ã³ãã§ããã°ã©ã ãå®è¡ãç¶ããŸãã
ãã®çµæãååæ/åéåæã¢ãããŒãã«ã¯ãéåæã¢ãããŒãã®ããã€ãã®å©ç¹ãšæ¬ ç¹ã®äž¡æ¹ãå«ãŸããŸãã ãã®èšäºã®éã§ã¯ããã®ã¢ãããŒãã詳现ã«æ€èšããããšã¯ã§ããŸããã èå³ã®ããæ¹ã¯ãæ¬POSAïŒãã¿ãŒã³åæããã³ãããã¯ãŒã¯ãªããžã§ã¯ãã®åãååã®ç« ãèªãããšããå§ãããŸãã
ããŒãã·ã³ã¯/ããŒãéåæã®ã¢ãããŒãèªäœã¯ãæ°ãããã°ãªãŒã³ã¹ããªãŒã ããšã³ãã£ãã£ãã€ãŸãããã°ã©ã ãŸãã¯ã©ã€ãã©ãªå®è¡ã·ã¹ãã ã®ã¬ãã«ã§ã®è»œéã®å¶åŸ¡ãããŒãå°å ¥ããŸãã ç·è²ã®ã¹ã¬ãããã©ããããã¯ãããã°ã©ããŒã®éžæã§ãã ã°ãªãŒã³ã¹ã¬ããã®ããŒã«ã䜿çšã§ããæ°ããèŠæ±ããšã«æ°ããã°ãªãŒã³ã¹ã¬ãããäœæã§ããŸãã OSã¹ã¬ãã/ããã»ã¹ãšæ¯èŒããéãã¯ãã°ãªãŒã³ã¹ã¬ããã®æ¹ãã¯ããã«å®äŸ¡ã§ãããšããããšã§ããã€ãŸããæ¶è²»ããRAMãã¯ããã«å°ãªããäœæãã¯ããã«é«éã§ãã ããã«ãããGoèšèªã§æ°åäžãªã©ãèšå€§ãªæ°ã®ã°ãªãŒã³ã¹ã¬ãããäœæã§ããŸãã ãã®ãããªèšå€§ãªéã¯ãã°ãªãŒã³ãããŒãªã³ãªã¯ãšã¹ãã¢ãããŒãã®äœ¿çšãæ£åœåããŸãã
é·æïŒ
- rpsãšåææ¥ç¶æ°ã§é©åã«ã¹ã±ãŒãªã³ã°
- éåæã¢ãããŒãã«æ¯ã¹ãŠã³ãŒãã®èšè¿°ãšãããã°ãç°¡åã§ã
çæïŒ
- æäœã®å®è¡ã¯å®éã«ã¯éåæã§ãããããåäžã®åææäœãããã»ã¹å šäœããããã¯ãããšãããã°ã©ãã³ã°ãšã©ãŒãçºçããå¯èœæ§ããããŸãã ããã¯ããã®ã¢ãããŒããPythonãªã©ã®ã©ã€ãã©ãªã䜿çšããŠå®è£ ãããŠããèšèªã§ç¹ã«é¡èã§ãã
- ããã°ã©ã ã®äžéæ床ã ã¹ã¬ãããŸãã¯OSããã»ã¹ã䜿çšããå Žåãããã°ã©ã å®è¡ã¢ã«ãŽãªãºã ã¯æ確ã§ããåã¹ã¬ãã/ããã»ã¹ã¯ãã³ãŒãã«èšè¿°ãããŠããé åºã§æäœãå®è¡ããŸãã ããŒãã·ã³ã¯/ããŒãéåæã®ã¢ãããŒãã䜿çšãããšãã³ãŒãå ã§é çªã«èšè¿°ãããæäœã¯ãåæãªã¯ãšã¹ããåŠçããæäœãšäºæž¬äžèœã«äº€æ¿ã§ããŸãã
- ãªã¢ã«ã¿ã€ã ã·ã¹ãã ã«ã¯é©ããŠããŸããã ãªã¯ãšã¹ãã®éåæåŠçã¯ãåã ã®ãªã¯ãšã¹ãã®åŠçæéã®ä¿èšŒã®æäŸãéåžžã«è€éã«ããŸãã ããã¯åã®æ®µèœã®çµæã§ãã
å®è£
ã«å¿ããŠããã®ã¢ãããŒãã¯CPUã³ã¢å
šäœã§é©åã«æ¡åŒµãããŸãïŒGolangïŒãŸãã¯ãŸã£ããæ¡åŒµãããŸããïŒPythonïŒã
ãã®ã¢ãããŒãã¯ãéåæãšåæ§ã«ãå€æ°ã®åææ¥ç¶ãåŠçã§ããŸãã ãã ãããã®ã¢ãããŒãã䜿çšããŠãµãŒãã¹ãããã°ã©ãã³ã°ããæ¹ãç°¡åã§ãã ã³ãŒãã¯åæã¹ã¿ã€ã«ã§èšè¿°ãããŸãã
ã³ã³ãã¢åŠç
ååã瀺ãããã«ããã®ã¢ãããŒãã§ã¯ããªã¯ãšã¹ãã¯ãã€ãã©ã€ã³ã«ãã£ãŠåŠçãããŸãã åŠçããã»ã¹ã¯ããã§ãŒã³ã«é 眮ãããè€æ°ã®OSã¹ã¬ããã§æ§æãããŸãã åã¹ã¬ããã¯ãã§ãŒã³å ã®ãªã³ã¯ã§ããããªã¯ãšã¹ãã®åŠçã«å¿ èŠãªæäœã®ç¹å®ã®ãµãã»ãããå®è¡ããŸãã åãªã¯ãšã¹ãã¯ãã§ãŒã³å ã®ãã¹ãŠã®ãªã³ã¯ãé çªã«ééããåç¬éã«ç°ãªããªã³ã¯ãç°ãªããªã¯ãšã¹ããåŠçããŸãã
é·æïŒ
- ãã®ã¢ãããŒãã¯ãrpsã§ããŸãã¹ã±ãŒãªã³ã°ããŸãã ãã§ãŒã³å ã®ãªã³ã¯ãå€ãã»ã©ã1ç§ãããã«åŠçããããªã¯ãšã¹ããå€ããªããŸãã
- è€æ°ã®ã¹ã¬ããã䜿çšãããšãCPUã³ã¢å šäœã§é©åã«æ¡åŒµã§ããŸãã
çæïŒ
- ãã¹ãŠã®ã¯ãšãªã«ããŽãªããã®ã¢ãããŒãã«é©ããŠããããã§ã¯ãããŸããã ããšãã°ããã®ã¢ãããŒãã䜿çšããŠé·ãããŒãªã³ã°ãç·šæããããšã¯é£ãããäžäŸ¿ã§ãã
- å®è£ ãšãããã°ã®è€éãã çç£æ§ãé«ããªãããã«ã·ãŒã±ã³ã·ã£ã«åŠçãç Žãããšã¯å°é£ãªå ŽåããããŸãã åèŠæ±ãè€æ°ã®äžŠåã¹ã¬ããã§é 次åŠçãããããã°ã©ã ã®ãããã°ã¯ãé 次åŠçãããå°é£ã§ãã
äŸïŒ
- ã³ã³ãã¢åŠçã®èå³æ·±ãäŸã¯ãã¬ããŒãhighload 2018 The Moscow Evolution of the Trading and Clearing System of Moscow Exchangeã«èšèŒãããŠããŸã
ãã€ãã©ã€ã³ã¯åºã䜿çšãããŠããŸãããã»ãšãã©ã®å Žåããªã³ã¯ã¯ãã¡ãã»ãŒãžãã¥ãŒãããŒã¿ããŒã¹ãªã©ãä»ããŠã¡ãã»ãŒãžã亀æããç¬ç«ããããã»ã¹ã®åã ã®ã³ã³ããŒãã³ãã§ãã
ãŸãšã
æ€èšãããã¢ãããŒãã®ç°¡åãªèŠçŽïŒ
- åæåŠçã
ã·ã³ãã«ãªã¢ãããŒãã§ãããã¹ã±ãŒã©ããªãã£ãšåææ¥ç¶æ°ã®äž¡æ¹ã®ã¹ã±ãŒã©ããªãã£ãéåžžã«å¶éãããŠããŸãã è€æ°ã®CPUã³ã¢ãåæã«äœ¿çšããããšã¯ã§ããŸããã - ãªã¯ãšã¹ãããšã®æ°ããããã»ã¹ã
ããã»ã¹äœæã®é«ã³ã¹ãã ãã®ã¢ãããŒãã§ã¯ãåææ¥ç¶ã®æ°ã«ããå¹ççãªã¹ã±ãŒãªã³ã°ã¯ã§ããŸããããå ±æã¡ã¢ãªã䜿çšããå Žåã¯å°é£ã§ãã åææ¥ç¶æ°ãå°ãªãé·æã®ã¯ãšãªå®è¡ã«é©ããŠããŸãã äžéšã®ã¢ããªã±ãŒã·ã§ã³ã«åœ¹ç«ã€ããããã£ããããŸãïŒä¿¡é Œæ§ã®åäžãOSã¬ãã«ã§ã®ã¢ã¯ã»ã¹å¶åŸ¡ïŒã - åãªã¯ãšã¹ãã®æ°ããã¹ããªãŒã ã
åé¡ã¯åã®ã¢ãããŒããšåãã§ãããå ±æã¡ã¢ãªãç°¡åã«äœ¿çšã§ããŸãã 以åã®ã¢ãããŒããšåæ§ã®ã¹ã³ãŒããæã¡ãŸãããããã€ãã®æçšãªããããã£ããããŸããã - ããã»ã¹/ã¹ã¬ããããŒã«ã
åã®2ã€ã®ã¢ãããŒããšæ¯èŒããŠãããã»ã¹/ã¹ã¬ãããäœæãããªãŒããŒããããåé¿ããŸãã ãããã¯ãŒã¯ãµãŒãã¹ãæ§ç¯ããããã«æãäžè¬çã«äœ¿çšãããã¢ãããŒãã rpãšäœ¿çšãããã³ã¢ã®æ°ã®ç¹ã§ããŸãã¹ã±ãŒãªã³ã°ããŸãã å€æ°ã®çããªã¯ãšã¹ããåŠçããã®ã«é©ããŠããŸãã åææ¥ç¶ã®æ°ã«ããã¹ã±ãŒãªã³ã°ãäžååã§ãã - ã€ãã³ãæåã®åŠçïŒãªã¢ã¯ã¿ãŒãã¿ãŒã³ïŒã
rpsãšåææ¥ç¶ã®æ°ã§é©åã«ã¹ã±ãŒãªã³ã°ããŸãã éåæããã°ã©ãã³ã°ã¹ã¿ã€ã«ã®ããã䜿çšããã®ãããé£ãããæµ®åãšã©ãŒããã£ããããã®ãé£ããå ŽåããããŸãã 䜿çšããCPUã³ã¢ã®æ°ã«ããã¹ã±ãŒãªã³ã°ã¯å°é£ã§ã - ååã®åæ/ååã®éåæã
rpsãšåææ¥ç¶ã®æ°ã§é©åã«ã¹ã±ãŒãªã³ã°ããŸãã å®è£ ã«å¿ããŠãCPUã®ã³ã¢ã§é©åã«ã¹ã±ãŒãªã³ã°ãããŸãïŒGolangïŒãŸãã¯ãŸã£ããã¹ã±ãŒãªã³ã°ãããŸããïŒPythonïŒã èŠæ±ã«å¯Ÿããããã»ã¹ïŒã¹ããªãŒã ïŒã¢ãããŒãããããèŠæ±ãããã®ãªãœãŒã¹æ¶è²»ãå€§å¹ ã«å°ãªããªããŸãã ããã¯ããªã¢ã¯ã¿ãã¿ãŒã³ãšã¯ç°ãªããåæã¹ã¿ã€ã«ã§ããã°ã©ã ãããŸããããªã¢ã¯ã¿ãã¿ãŒã³ãšåãæµ®åãšã©ãŒãçºçããå¯èœæ§ããããŸãã - ã³ã³ãã¢åŠçã
é«ãããã©ãŒãã³ã¹ãå®çŸã§ããŸãããå®è£ ãå°é£ã§ãã ãã¹ãŠã®ã¿ã€ãã®èŠæ±ã«ã¯é©ããŠããŸããïŒããšãã°ãé·ãããŒãªã³ã°ãè¡ãã®ã¯å°é£ã§ãïŒã
äžèšã®ãªã¹ãã¯å®å šãªãã®ã§ã¯ãããŸããããã¯ãšãªåŠçãžã®åºæ¬çãªã¢ãããŒããå«ãŸããŠããŸãã
èªè ã«ç®ãåããŸããã©ã®ãããªã¢ãããŒãã䜿çšããŠããŸããïŒ èªåã®çµéšããåŠãã ãè³åŠäž¡è«ãç¹ã«åœŒãã®ä»äºã¯äœã§ããïŒ
åç §è³æ
- é¢é£èšäºïŒ
- ã€ãã³ãé§ååã¢ãããŒãïŒ
- ãããŒãšã€ãã³ãã«åºã¥ãã¢ãããŒãã®æ¯èŒïŒ
- ååæ/åéåæïŒ
- ã°ãªãŒã³ã¹ããªãŒã ïŒ
- ã³ã³ãã¢åŠçïŒ