カッティングボード

カルマをカットしてます

ISUCON7に参加してきました

土曜日にISUCONの本戦に参加し,ISUCON終わりから日曜日の夜までHackerWarsというハッカソンのイベントに参加してました.両方のことについて書こうと思ってたらクソ長くなったので分けるとして今回はISUCONに関して書きます.

ISUCON

きっかけ

研究室の同期とISUCONの記事を見かけたことから軽いノリで出ることを決め,後輩にめっちゃできる人がいたのでその人を誘って出ることを決めました.

ISUCON開催まで

夏休みあたりから忙しくない時は週一でISUCONの過去問を解く会をやってISUCON力を高めるためにいろいろやってました. 実装言語としてはなんか速いらしいということでGoに決めて,Go勉強会的なのやったりして勉強しました.

予選

予選の問題は3台構成で2台がWebサーバーで1台がDBサーバーになっているチャットサービス的な問題でした.
僕は最初は初期スコアの計測だったり,言語実装の切り替えだったりをしてました. その後からはユーザーのデータをキャッシュする部分だったりを実装してました.

チームのスコアが上がった要因は2つあったと思います. 一つはDBに入っていた画像データをファイルとして書き出して,NFSで3台のPCで共有し,静的ファイルとして配信したことだと思います.画像データへのアクセスが多くDBの負荷を高めていたり,単純に処理として重かったです.

2つ目はDBサーバーをWebサーバーとして使ったことです.何個か変更を行った結果,外部との通信帯域を使い尽くしていたので2台から3台に増やせば1.5倍になるじゃんというよく理論でこの変更をしました.まぁ結果としてスコアは上がりましたがかなり力業だったと思います.

本戦

本選の問題は3台構成で3台がWebサーバーで1台がDBサーバーになっている複数人で協力できるクッキークリッカー的な問題でした. 僕は今回も最初は初期スコアの計測だったり,言語実装の切り替えだったりをしてました. その後からはDBをメモリに乗っける作業だったりを実装してました.

今回もチームのスコアが上がった要因は2つあったと思います. 一つはラウンドロビン方式でアクセスする部屋ごとにソケットを繋ぐサーバーを固定したことです.これによりデータをメモリに乗っけても問題が無くなったり,一つのサーバーに負荷が集中することがなくなりました.

2つ目は予選と同じくDBサーバーをWebサーバーとして使ったことです.今回はCPU負荷がネックになっていて思考停止でCPUを増やすためにDBサーバーをWebサーバーとして使っていました.まぁ力業だけどDBがネックにならない限りは使える手段かなと思います.

感想

全体的に二人に比べると圧倒的に技術力不足でした.圧技術不足だったけど二人の提案する速度向上法だったり,コード見たりでISUCON力的には圧倒的成長を遂げることができたような気がします.まぁ完全に役立たずで終わったわけではなく部分部分ではチームに貢献することもある程度はできたので良かったのかなと思います.

最終的な結果としても全員初参加で予選では学生6位で全体56位,本戦では学生3位で全体11位といういい感じな結果に終わることができたので良かったと思います.

もっと上に行けたのではと感じる部分もあったので,来年までに精進してもっといい結果を出せるように頑張ります.