blogこの広告は、90日以上更新していないブログに表示しています。2017」に参加してきた話タイトルめっちゃ長いですね、ごめんなさい。内容もめっちゃ長いです、ごめんなさい。2017終わって先週末、面白そうなイベントがいっぱいあったので、とりあえず片っ端から参加してきました。DDCC予選ISHOCON1朝4:30に高速バスに乗り込み、長野から新宿へ、京浜東北線で渋谷まで。株式会社scouty様にて、ISHOCONというISUCONの練習会が開かれるとの情報を得て、参加してきました。scouty.co.jpscouty.connpass.comISUCONは一昨年から毎年参加しているコンテストで、Webアプリケーションをレギュレーション内においてひたすら早くするコンテストです。去年はこんな感じで、学生一位をとりました。goryudyuma.hatenablog.jp今年も開催されるので、去年に引き続き史上初(多分)の学生連覇を目指して頑張ります。そのためにも練習が必要で、練習会を開催してくださる、それも参加費無料でってなると、めちゃくちゃありがたいです。実質というのは、点数的には二位だったんですけど、点数一位の@showwinさんが、作問者かつ運営という立場だったので、一位の立場が降ってきた感じですね〜。後ちょっとだったので、完全勝利したかったのですが・・・。コードはある程度Gitで管理していたのですが、コミットログが適当すぎて何してるかわからないと思われるので、時系列順に書いときます。[n]はベンチマークでn点取ったことを示しています。素のVimでGofmtとか使わずに書いたので、インデントとかバラバラなのは許して。github.com個人参加ですがチーム名を決める必要があり、優勝商品がシャチョーさんと焼肉らしいので、思うがまま「焼肉食べたい」って名前にしました。渋谷駅新南口を出たまではよかった、でもそこからだと大分遠回りになってしまった。橋もトンネルも一本もないなんて・・・。出席とって、荷物置いて、会場内Wifi入ったらMacのアプデが・・・。Macのアプデ終わらず、スマホでレギュレーション読む。サーバー立ててとりあえずenqueueして、環境確認。僕はDB担当なので、まずはDBから見ていく。MySQL5.5で動いてたので、即5.7へ上げて、mysql-slow-queryを入れる。インデックスペタペタ貼って、ベンチ回す。16533点でトップに立つ。webappをサービスとして立ち上げたいな、init.d書くかーってなる。一位だったのは一瞬だった、すぐに抜かれた。init.dに書いたけどうまく動かなくて、昼ごはん食べる。ふつーに動かすことはできるので、サービス化は諦め。一人じゃなくてチームなら、インフラ班に任せるみたいにできるんだけど・・・。昼食中のおしゃべりで、ベンチマークの引数にworkloadでもっと並列度あげるといいかも?みたいな話が出たのでちょっとやってみる。ISUCON本番だと、他のチームメンバーがみるところも、一人だと全部みる必要がある。できないわけではないのでやる。「僕はDB担当!」って心の中で叫んでいたので、ここまでコードはほとんど読んでいない。読むかという気持ちになる。他のチームでマイナス何十万点みたいな幻を見た気がする。あれは一体なんだったのか・・・。全データをメモリに乗せてしまうことを決意。ISUCON6予選で僕たちがやった方法。書き込みはDBにもメモリ上にもするが、読み込みはメモリ上からのみ読み込むことで、読み込みをひたすら早くするのと同時に再起動試験にも耐えうるようにする。後、initialize時にメモリ上にデータを構築するようにしとく必要あり。なんかページ番号と件数とがあってないみたいなこと言われまくる。後々わかるが、自分の実装バグ。適当に直したが、ちょっと手間取ってた。そのほかにも気づいた点があれば随時直していた。データをメモリ上に乗せたやつが、ベンチ完走。Go1.6が使われてたので、Go1.9に。なんでもっと早く気づかなかった・・・。