ã¤ã³ãã©é¨ã®èäºï¼@ryot_a_raiï¼ã§ãã
ä»å¹´ã®4æãå¼ç¤¾ã«ã¯11åã®æ°åã¨ã³ã¸ãã¢ãå ¥ç¤¾ãã¾ãããããã¦ç¾å¨ã3ã¶æéã®ç ä¿®ãåãã¦ãã¾ãããã¸ãã¹ããã¼ããæè¡ç ä¿®ã¾ã§å¹ åºãè¡ããã¦ãã¾ããããã®ä¸ã§5æä¸æ¬ã«ãããªã£ãã¤ã³ãã©ç ä¿®ã¨ãã®å¾ã®ç¤¾å ISUCONã«ã¤ãã¦ãç´¹ä»ãã¾ãã
ã¤ã³ãã©ç ä¿®ï¼è¬ç¾©ï¼
ã¤ã³ãã©ç ä¿®ã¯ã¤ã³ãã©é¨ã«é å±ãããã¨ã³ã¸ãã¢ã«éãããå ¨æ°åã¨ã³ã¸ãã¢ãåå ããç ä¿®ã§ããæ¥å¸¸æ¥åã§ã³ã¼ããæ¸ãã¦ãµã¼ãã¹ãéçºãã¦ããããã§ç¥ã£ã¦ããã¦ã»ãããã¤ã³ãã©ã«é¢ããåºç¤ç¥èãå ±éè¨èªãç²å¾ãããã¨ãç®çã¨ãã¦ãã¾ããåè¨3æ¥éãã¤ã³ãã©é¨ã®@kani_bã¨åæ ãã¦è¬ç¾©ãã¾ãããç ä¿®å 容ã®å 容ã¯ãã£ããã¨ä»¥ä¸ã®ãããªãã®ã§ãã
1æ¥ç®
- ã¤ã³ã¿ã¼ãããã¨ã¯
- ãã©ã¦ã¶ã§ã¦ã§ããµã¤ããé²è¦§ããéã«ãªã«ãèµ·ãã¦ããã®ã
- IPããHTTPã¾ã§ãã£ããã¨
- Webã¤ã³ãã©ã¢ã¼ããã¯ãã£æ¦è¦³
- ä¸å±¤ã¢ã¼ããã¯ãã£ï¼Webãµã¼ã層ãWebã¢ããªã¼ã±ã¼ã·ã§ã³å±¤ããã¼ã¿ãã¼ã¹å±¤ï¼ã®è©±
- ã¹ã±ã¼ã«ã¤ã³/ã¢ã¦ã
- Vimè¶ å ¥é
- ã¢ããªã±ã¼ã·ã§ã³ãµã¼ã
- Rack, Ruby on Railsã®ä»çµã¿ãå½¹å²
- WEBrickãUnicornãªã©ã®HTTPãµã¼ãã®è©±
2æ¥ç®
- ãã¼ã¿ã¹ãã¢
- MySQL
- ã¹ãã¼ã¯ã¨ãª, explain, ã¤ã³ããã¯ã¹
- ãã©ã³ã¶ã¯ã·ã§ã³, ããã¯
- ã¬ããªã±ã¼ã·ã§ã³ã¨ã¹ã±ã¼ã«ã¢ã¦ã
- Memcached
- slab allocator, consistent hashingãªã©ä½¿ãä¸ã§ç¥ã£ã¦ããããç¥è
- Redis
- Memcachedã«æ¯ã¹ãå©ç¹ã使ãã©ããã«ã¤ãã¦
- å
¨ææ¤ç´¢
- Solr, Elasticsearchã®å½¹å²ãå©ç¹ã«ã¤ãã¦
- MySQL
- Webãµã¼ãã¨ãããã·
- nginx
- éçãã¡ã¤ã«ã®é ä¿¡
- Unicornãªã©ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã®å段ã«é ç½®ããæå³
- nginx
3æ¥ç®
- ãã®ä»ã®æ§æè¦ç´
- ãã£ãã·ã¥
- Railsãã£ãã·ã¥ã¹ãã¢
- Varnishã«ããã¬ã¹ãã³ã¹ã®ãã£ãã·ã¥
- CDN
- CDNã®å½¹å²ãå©ç¹ã«ã¤ãã¦
- ãããå¦ç
- ãããå¦çã¨ã¯ãªã«ã
- å¼ç¤¾ã®ãããå¦çç°å¢ã«ã¤ãã¦
- ããããæ¸ãéã«æ°ãã¤ããã¹ããã¨
- ãã£ãã·ã¥
- Infrastructure as Code
- ãªãã³ã¼ãã§è¨è¿°ããã
- Itamae, Serverspecã«ãããµã¼ããããã¸ã§ãã³ã°
- ããã¾ã§ã®æä½æ¥ãèªååãã¦ã¿ã
- ããããâã¯ã©ã¦ãâã«ã¤ãã¦
- AWSãªã©ããããã¯ã©ã¦ããµã¼ãã¹ã®å©ç¹ã¨å種ãµã¼ãã¹ã«ã¤ãã¦
å ¨ä½ã¨ãã¦èªåã§è§¦ã£ã¦è¦ããããããã«ãã³ãºãªã³ãå¤ããããªãã¾ãããã²ã¨ãã²ã¨ãVirtualBox( + Vagrant)ã§VMãæ§ç¯ãããã®ä¸ã§æ¼ç¿ãã§ããããã«ãã¦ãã¾ããä¾ãã°ãèªåã§å®è£ ããRackã¢ããªã±ã¼ã·ã§ã³ãWEBrickãUnicornã§åãããããnginxãåæ®µã«æãã§ãã³ããã¼ã¯ãåã£ã¦å¹æã確èªããããã¾ããã
段éã°ã©ã³ããªï¼ç¤¾å ISUCONï¼
4æ¥ç®ã¯æ°åç ä¿®ã®ãã£ãã¼ã¬ã¨ãã¦æ®µéã°ã©ã³ããªï¼ç¤¾å ISUCONï¼ãéå¬ãã¾ãããISUCONã¯å¹´ã«ä¸åéå¬ããã¦ããããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã³ã³ãã¹ãã§ã段éã°ã©ã³ããªã¯ãã®ç¤¾å çã§ã*1ãæ®µéã°ã©ã³ããªã¯æ°åç ä¿®ã®ä¸ç°ã§ããããã£ãããªãæ°å以å¤ã®ç¤¾å¡ã«ãåå ãã¦ãããããã¨ãããã¨ã§ã¨ã³ã¸ãã¢å ¨ä½ã§åå è ãåãéå¬ãã¾ãããåå è ã¯æ°å11åï¼4ãã¼ã ï¼ãæ°å以å¤23åï¼9ãã¼ã ï¼ã¨ãªãå¤§çæ³ã§ããã
æºå
ä»åã®æ®µéã°ã©ã³ããªã®æºåã»éå¶ã¯ã¤ã³ãã©é¨ã®3åï¼@mirakui, @kani_b, ç§ @ryot_a_raiï¼ã§ãããªãã¾ãããå ·ä½çã«ã¯ä»¥ä¸ã®æºåããã¾ããã
- åå è
ãã¼ã¿ã«ãµã¤ãï¼mirakuiï¼
- ãã³ããã¼ã¯ãå®è¡ãããããã³ããã¼ã¯çµæãè¦ãã
- 社å ã®åå è 以å¤ãããè¦ããããã«ãã¦ããæ°ã«å ¥ãã®ãã¼ã ãå¿æ´ã§ããããã«ãã¾ãã
- ç´ æµãªãã¡ã¤ã³ï¼æ®µé.jpï¼ã§ã¢ã¯ã»ã¹ã§ããããã«ãã¾ãã
- åèå®è£
ï¼ryot_a_raiï¼
- è¤æ°è¨èªå®è£ ã¯ç¨æãããRuby on Railsã§ã®å®è£ ã®ã¿ãç¨æãã¾ããï¼å¼ç¤¾ã§æãå¤ãå©ç¨ããã¦ããè¨èªã»ãã¬ã¼ã ã¯ã¼ã¯ï¼
- æ°åç ä¿®ã§å¦ãã ãã¨ãæ´»ããããããN+1ã¯ã¨ãªãã¹ãã¼ã¯ã¨ãªãªã©æ¥å¸¸ã§ãç®ã«ããããããªæ¶èãã¤ã³ããç¨æãã¾ãã
- ãã¼ãã¯ãéå®è£ ãªã¯ãã¯ããããã§ãã
- ãã³ããã¼ã¯ï¼ryot_a_raiï¼
- Gatlingãã¤ãã£ã¦å®è£ ãã¾ãããã¬ã¹ãã³ã¹ããã§ãã¯ã§ãããããã¹ããã¼ã¿ãæµãè¾¼ãããã¨ãç°¡åãªç¤¾å ISUCONã§ã¯ååæ©è½ãã¾ããã
- ã¹ã³ã¢ããã³ããã¼ã¯ã®æå¦ãªã©ã¯Gatlingã®simulation.logããç®åºãã¾ãã
- ãµã¼ãã®æºåï¼kani_bï¼
- åå è ã®ç°å¢ããã³ããã¼ã«ãªã©ãç¨æ
- ä»åã¯AWS EC2ä¸ã§1ãã¼ã ã«ã¤ãc4.largeã3å°ï¼io1 EBS 100IOPSï¼ãç¨æãã¾ãã
- gp2ã使ã£ã¦ããªãã®ã¯ãã¼ã¹ããé²ããã
- ã¡ã¤ã³ã®AWSã¢ã«ã¦ã³ãã¨ã¯å¥ã®ã¢ã«ã¦ã³ããå©ç¨ãã¦ãããããã¤ã³ã¹ã¿ã³ã¹æ°ã®å¶éã«å¼ã£ããã£ã¦ãæ¥ãã§ç·©åç³è«ãä¸ãã¾ããâ¦
ä½è«ã§ãããæ°åç ä¿®æºåã社å ISUCONã®éçºå宿ã«å©ç¨ããã´ã£ã©ã¼ã¸ã¥ä¼è±é«åãããã£ãã§ããä¼è°å®¤ãé¨å±ã«ãã£ã¦ã¯å¤§ããã®ãã¼ãã«ãããå¤ä¸ã¾ã§éçºããã£ã¦ããã¾ãããããæãã®æ¸©æ³ãããã¾ããã
çµæ
æçµçµæã¯ä¸ã®ããã«ãªãã¾ãããæ¬å®¶ISUCONæ¬é¸åºå ´å¢ï¼@sora_h, @eagletmtï¼ã大人ããªãã¹ã³ã¢ã§åªåãã¾ããããæ°åãã¼ã ãåæã¹ã³ã¢ã®4, 5åã®ã¹ã³ã¢ãåºããæ°åç ä¿®ã®ææãè¦ã¦ã¨ãã¾ãããåå è ã®ææ³ããããã好è©ã§ä»å¾ã宿çã«éå¬ãã¦ããããã¨èãã¦ãã¾ãã
ã¾ã¨ã
以ä¸ãä»å¹´ã®ã¤ã³ãã©ç ä¿®ã«ã¤ãã¦ãç´¹ä»ãã¾ãããä»å¹´ã¯è¬ç¾©å½¢å¼ã社å ISUCONãååã ã£ããã¨ããããæºåã大å¤ã§ããããä»å¹´ã®çµé¨ãæ¥å¹´ä»¥éã«ãç¹ããããã¨ããã¨æã£ã¦ãã¾ãããããªæ°åç ä¿®ã社å ISUCONã«åå ãããã主å¬ãããã¨ããããªãããã²ä¸ç·ã«ãã£ã¦ããã¾ãããï¼