ISUCON6本é¸ã§å誉é‹å–¶ã¨ã—ã¦ãŠæ‰‹ä¼ã„ã—ã¦ãã¾ã—ãŸ
@matsuu #isucon ã”å”力ã„ãŸã ãèª ã«ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã—ãŸï¼ãƒãƒ¼ãƒ ã¨ã—ã¦ã¯æ®‹å¿µãªçµæžœã¨ãªã‚Šã¾ã—ãŸãŒã€äºˆé¸ã«ãŠã„ã¦å¤šå¤§ãªã‚‹ã”尽力をã„ãŸã ãã¾ã—ãŸã®ã§matsuuã•ã‚“ã‚’å誉é‹å–¶ã¨ã—ã¦æœ¬é¸ã«ã”招待ã—ãŸã„ã¨æ€ã„ã¾ã™ï¼ˆæœ¬é¸å‡ºå ´ã§ã¯ãªãé‹å–¶ã¨ã—ã¦ã®å‚åŠ ã§ã™ï¼‰ã”検討ãã ã•ã„ã¾ã›
— ISUCONå…¬å¼ (@isucon_official) 2016å¹´9月18æ—¥
ã“ã®è©±ã‚’é ‚ã„ãŸæ™‚ã¯æ£ç›´ã€Œå誉é‹å–¶ã¨ã¯ã€ã¨æ€ã£ãŸã®ã§ã™ãŒã€æœ¬é¸ã«é€²ã‚€ã¤ã‚‚ã‚Šã§äºˆå®šã‚‚é–‹ã‘ã¦ãŸã—ã¨äºŒã¤è¿”事ã§å¼•ãå—ã‘ã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚
本é¸é‹å–¶ã®ãŠæ‰‹ä¼ã„ã¨ã—ã¦ã‚„ã£ãŸã“ã¨ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã€‚
Azure関連
Azureã®ç‰¹æ€§ã‚’è¸ã¾ãˆãŸä¸Šã§ã®æ§‹æˆæ¤œè¨Žã‚„ワンクリックデプãƒã‚¤ã®ãŸã‚ã®ãƒ†ãƒ³ãƒ—レート作æˆãªã©ã‚’è¡Œã„ã¾ã—ãŸã€‚
予é¸ã§ã¯ãƒ‡ãƒ—ãƒã‚¤ã®ä»•çµ„ã¿ã«customData使ã‚ã‚Œã¦ã„ã¾ã—ãŸãŒã€customDataã¯å®Ÿè¡Œã‚¹ã‚¯ãƒªãƒ—トをbase64ã«å¤‰æ›ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã€å¤‰æ›´ã®ãŸã³ã«æ‰‹é–“ãŒã‹ã‹ã‚‹ã®ã§ã€カスタムスクリプト拡張機能を用ã„ã¦ãƒ‡ãƒ—ãƒã‚¤ã™ã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚
customDataã¯Ubuntuãªã©ä¸€éƒ¨ã®Linuxã§ã—ã‹å‹•ä½œã—ãªã„ãŸã‚ã€ã‚«ã‚¹ã‚¿ãƒ スクリプト拡張を利用ã™ã‚‹ã®ãŒã‚ªã‚¹ã‚¹ãƒ¡ã§ã™ã€‚
ã¾ãŸã€ã›ã£ã‹ãã ã‹ã‚‰Azureã®ã‚µãƒ¼ãƒ“スを有効活用ã—よã†ã¨ã®æµã‚Œã‹ã‚‰ã€Azureã®Log Analyticsを用ã„ã¦ç«¶æŠ€è€…ã®å„サーãƒã«メトリックス情報を収集する拡張機能もインストールã™ã‚‹ã‚ˆã†ã«ã—ã¾ã—ãŸã€‚
ISUCON用ã®azureインスタンスã§OMS Agent(==fluentd)ãŒå‹•ã„ã¦ã‚‹ãžâ€¦â€¦ï¼
— tagomoris (@tagomoris) 2016å¹´10月22æ—¥
ãã†ãã‚Œãれ。ã§ã‚‚実ã¯ç§ã®ãƒŸã‚¹ã§OMSå´ãŒã†ã¾ãå‹•ã‹ãªã‹ã£ãŸã‚“ã§ã™ã‘ã©ã…。
CIã®æ§‹ç¯‰
本é¸ã®æº–å‚™ã¯GitHubã®ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã§é€²ã‚ã¦ã„ãŸã®ã§ã™ãŒã€Azureã®ãƒ¯ãƒ³ã‚¯ãƒªãƒƒã‚¯ãƒ‡ãƒ—ãƒã‚¤ã‚’実ç¾ã™ã‚‹ãŸã‚ã«ã¯å…¬é–‹é ˜åŸŸã«ãƒ†ãƒ³ãƒ—レートを置ãå¿…è¦ãŒã‚ã‚‹ã“ã¨ã¨ã€ãƒ‡ãƒ—ãƒã‚¤ç”¨ã®ãƒ•ã‚¡ã‚¤ãƒ«ä¸€å¼ã‚’固ã‚ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹å¿…è¦ãŒã‚ã£ãŸãŸã‚ã€CI環境を作æˆã—ã¾ã—ãŸã€‚
CIサービスã¯ãƒ—ライベートリãƒã‚¸ãƒˆãƒªã§ã‚‚ç„¡æ–™ã§ä½¿ãˆã‚‹Werckerを採用ã—ã¾ã—ãŸã€‚
ã¾ãŸã€ä»Šå›žã®æœ¬é¸ã¯Docker環境ã ã£ãŸã®ã§ã™ãŒã€Dockerã®ãƒ“ルドãŠã‚ˆã³å‹•ä½œãƒ†ã‚¹ãƒˆã‚’è¡Œã†ãŸã‚ã«åˆ¥é€”Jenkinsサーãƒã‚‚用æ„ã—ã¾ã—ãŸã€‚Dockerã®ãƒ†ã‚¹ãƒˆã«Werckerを使用ã—ãªã‹ã£ãŸã®ã¯ã€ç¾çŠ¶Dockerのビルド環境としてWerckerは使えないãŸã‚ã§ã™*1。
Python実装
本é¸ã®Python実装ã¯ç§ãŒæ‹…当ã•ã›ã¦ã„ãŸã ãã¾ã—ãŸã€‚
ç§ãŒæœ¬è·ãƒ—ãƒã‚°ãƒ©ãƒžãƒ¼ã ã£ãŸé ƒã¯ä¸»ã«Perl/PHPを生æ¥ã¨ã—ã¦ãŠã‚Šã€ã‚¤ãƒ³ãƒ•ãƒ©ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãªä»Šã¯ã¡ã‚‡ã£ã¨ã—ãŸãƒ„ール作æˆã«Pythonを書ãã“ã¨ãŒå¤šã„ã‚‚ã®ã®Pythonã§Webアプリケーションを実装ã—ãŸçµŒé¨“ã¯ã»ã¼ã‚¼ãƒã€‚ã¨ã¦ã‚‚ä¸å®‰ã§ã—ãŸãŒãªã‚“ã¨ã‹å®Ÿè£…ã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚
当åˆã¯Twistedベースã®å®Ÿè£…ã‚’ä¾é ¼ã•ã‚ŒãŸã®ã§ã™ãŒã€ç€æ‰‹ã—ã¦ã¿ãŸã¨ã“ã‚自分ã®åŠ›é‡ã§ã¯ç„¡ç†ã ã¨åˆ¤æ–ã—ã€Flaskã§å®Ÿè£…ã—ãªãŠã—ã¦ã„ã¾ã™ã€‚
ã¾ãŸã€Python3+Gunicorn(sync)ã ã¨Server Side Eventsã®å®Ÿè£…ã§yield周りãŒã†ã¾ãå‹•ã‹ãšã€ã‚®ãƒªã‚®ãƒªã«ãªã£ã¦æ€¥é½Python2+Gunicornã«ç½®ãæ›ãˆãŸã‚Šã—ã¾ã—ãŸã€‚
残念ãªãŒã‚‰Pythonで予選を通過したチームはいなかったよã†ãªã®ã§èª°ã‹ã‚‰ã‚‚試ã•ã‚Œã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã‚‚ã—良ã‹ã£ãŸã‚‰Python実装ã§å•é¡Œã‚’解ã„ã¦ã¿ã¦ãã ã•ã„ã。
自分ã®çŸ¥è¦‹ã«åŸºã¥ãアドãƒã‚¤ã‚¹
ãã®ä»–ã€è‡ªåˆ†ã®çŸ¥è¦‹ã«åŸºã¥ã„ãŸã‚¢ãƒ‰ãƒã‚¤ã‚¹ã‚’ã„ãã¤ã‹ã•ã›ã¦ã„ãŸã ãã¾ã—ãŸã€‚
途ä¸ã‹ã‚‰ã®é‹å–¶å‚åŠ ã§è‰²ã€…ã¨å£ã‚’挟むã¨å¿«ãæ€ã‚ãªã„人もã„ã‚‹ã‹ã‚‚ã—ã‚Œãªã„ã¨æ€ã„ã€ã‚ã¾ã‚Šå‡ºã—ゃã°ã‚‰ãªã„よã†ã«å¿ƒãŒã‘ã¦ã¾ã—ãŸã€‚
ã§ã‚‚çµæžœã¨ã—ã¦å‡ºã—ゃã°ã£ã¦ã¾ã—ãŸã。ã”ã‚ã‚“ãªã•ã„ã”ã‚ã‚“ãªã•ã„。
ã„ã‚„ãé‹å–¶ã£ã¦ã“ã‚“ãªã«å¤§å¤‰ã ã£ãŸã‚“ã§ã™ã
ç§ã¯ãŸã ã®ãŠæ‰‹ä¼ã„è¦å“¡ã§ã—ãŸãŒã€ãã‚Œã§ã‚‚çµæ§‹å¤§å¤‰ã§ã—ãŸã€‚ISUCONé‹å–¶ã£ã¦ã“ã‚“ãªã«å¤§å¤‰ã ã£ãŸã‚“ã§ã™ã。
ãŸã ã®ãŠæ‰‹ä¼ã„ã§ã“ã‚Œã ã‘大変ãªã®ã«ã€ãƒ¡ã‚¤ãƒ³ã®é‹å–¶ã®çš†æ§˜ãŒã©ã‚Œã ã‘大変ã‹ã¯æƒ³åƒã‚‚ã¤ãã¾ã›ã‚“。
皆ã•ã‚“é‹å–¶ã®æ–¹ã€…ã«æ„Ÿè¬ã—ã¾ã—ょã†ã€‚ã‚ã‚ŠãŒã¨ã†ã‚ã‚ŠãŒã¨ã†ã€‚🙏
*1:ã§ããªãã¯ãªã„。Qiitaã«Werckerã§Dockerビルドをやる記事ã‚ã‚Šã¾ã™