詳しくはこちら > ISUCON6 開催&日程決定! #isucon : ISUCON公式Blog
今回はぼっちーむを回避して、会社の人と合わせて3人(+おまけ)でやっていました。 5、6人いれば2チームで競う感じの参戦方法もありだったのですが、ちょっと都合が合わず。。なので1チームでした。
今回は初のチーム参戦ということもあって、意外と勝手がわからないことが多く、苦戦しました。
結果としては予選敗退でした・・・次はもうちょっと上位へ・・・!
ちなみに前回の参加レポはこちら > ISUCON5 オンライン予選に参加していました
やったことをまとめていきますねー
==============================
■初Azure!!
初というとちょっと語弊がありますが、触ったことがあるのはかなり昔のAzureなので初Azureでもいいでしょう。 当時と比べてかなり進化したUIになっていて、とても使いやすかったです。 ガッツリインフラマンじゃないのでなんとも言えないところもありますが、まあまあいい感じなのではないでしょうか。
ちょっぴり残念ポイントとしては、無料枠をなぜか使いきっており(もしかして:MSのAPI的なやつで登録した?)、 仕方なく従量課金になったところでしょうか。数百円くらいの請求が来ると思います。まあまあ。
■とりあえずシステムをPHPに切り替えた
まっさきにPHPへ切り替えました。 切り替えたとき、nginxのMIME読み込みがなかったためか、Chromeで正しく画面が表示されておらず、この解決にも時間がかかってしまいました。 ただまあ、静的ファイルはちゃんと出ていたのでベンチは通っていましたw
3000点くらいですかね。
ちなみにPHP7が入っていました。 5.6.xxxだったら7入れてようと思っていたのですが、さすがにそこでの利点はないようです;;
■とりあえずgit pullで更新できるようにした
とりあえず社内のリポジトリにぶっこんで、git pullしてコードを更新できるようにしました。 capistranoなど仕込んでもよかったのですが、おてがるに、最速に、安定に。
■isudaの文字列長を別カラムに保存してインデックスを張った
チームメイトがなんだこれはーーーって言いながら直していました。 これでスコアが6000点くらいでしたかね。
他にもインデックスがなさそうなところにもりもり張ってこのくらいだったかと。
■isutar→isudaにHTTP通信するのをやめた
ぼくがなんだこれはーーーーって言いながら書き直していました。 具体的にはDBも同居しているんだからそのまま直にSELECT掛けにいけばいいんじゃないかなあ、という実装に変更しました。 同居ではなく、サーバ台数が多いなら分けたほうが縦横に広げやすいと思うので、そっちのほうがいいですよねきっと。
この同タイミングで、nginxも1サーバだけにするように変更しました。
ちょこちょこバグが発生して時間がとられていくものの、無事完了してスコアが15000点くらいです。
■isuda→isutarにHTTP通信するのをやめた
逆も同じつくりになっていたので、こちらも同様にしてやめました。 また同タイミングで、nginxのfastcgicacheを入れました。
スコアが23000点ほど。
ただfastcgicacheはうまく設定できていなかったようで、スコアへの要因はあまりなかったようです。
■Redisキャッシュへ
ここまでですでにhtmlifyメソッドがヤバソウ、スターをキャッシュとかできないかなあ、といった話題が出ていました。 こつこつ裏で実装を進めており、夕方ころに完成、マージしていきます。
ここでスコアが25000点ほど。 うーん、キャッシュの作り方が悪かったのか、ちょっと微妙な結果でした。
■時間切れ。 といったあたりで終了の時間になりました。
2万点台に乗ったとき、ベンチのランキング上位に入ったので、このまま順調に対応していければ本選出場も行けそうな予感がチーム内にあったのですが、、 バグが出まくったりコンフリクトしたりと、課題が残る結果に終わってしまいました。
==============================
時系列的にはこんなところです。
やり残した部分や気になる部分を挙げると…
・htmlifyをちゃんと見れていなかった ここ改善する余地めっちゃありそう。
・スパムチェックも何かできそう バイナリがWebサーバになっていて、そこそこパフォーマンス高そうでしたが、HTTP通信はやっぱりコストが高いと思います。キャッシュできるといいなあ、とか。 バイナリになっていて隠されていましたが、例えばベンチをガンガン回してチェックした内容をRedisとかnginxのリバースプロキシなどにとりあえず入れておくとか…。 気合い入れてリバースエンジニアリング的なこととか…;; 最初からちょっと様子をみていたのですが、パフォーマンス高そう、がわかったときに一気に後回しにしていました(この判断はただしい気がする)
・キャッシュをちゃんと作る もうちょっと気合い入れて作ったらもうちょっとスコア伸びてくれそう というか作ったキャッシュが当たっているか見てないのも問題→当たってないならそのキャッシュは作ってもダメなのではーーー
・最初にスコア計算の方法をちゃんと見ておくべき POST遅延がかなり減点されるので、そこで一部足を引っ張られていた可能性が高そう
・初期化処理生かせてない 前回参加したISUCONでは初期化処理もそこそこコードを書いていたのですが、今回はまったく書いていませんでした。 キャッシュを作ったり、下準備をしたりなどいろいろできるはず。。。
・個々人で開発できる環境整備してあげよう ケチって1サーバで動作確認しまくっていたのですが効率が悪すぎて。。。 ローカルでも動くようにDBコピーするとかいろいろ手は打てたはず
・リブート検証してないよ 結果としてはしなくてもよかった点数になりましたが、ここもちゃんと見てあげないと、でした。 ルールにも再起動して大丈夫なこと、とかって書いてありましたね。
・git pullしてたけどコンフリクトしてやばい感じになってた 雑にフリースタイルにコミット!プッシュ!マージ!していましたが、ぶつかって直すと壊れて、が後半に頻発してヤバイ感じになっていました。 ある程度のルールを事前に決めるなりすり合わせするべきですねー
・個々人の役割があまり明確でなかった ある人はこれをやり、ある人も同じものをやり、が多くは無いですが少し発生していました。 それぞれ得意スキルが異なっているはず(あまり詳しい得意スキルを把握していなかった)なので、最高のパフォーマンスを出せる場所へ誘導してもりもりやってもらう感じに~~~ うぐぐぐ。。
ぐぬぬ・・・・課題が山盛りじゃ・・・