2016-09-18

ISUCON6 負けてきました

そういえば久しぶりの記事になってしまった…
以下、すごくとりとめのない日記みたいな記事です。

去年はタイミング合わずに出られなかったので、 今まで通り、@gaooh と @froncool と出る予定だったのだけれど、1週間くらい前にいろいろあって @gaooh が抜けたので、 @froncool とのふたりで。
ふたりともAzureは初めてということもあって、事前に素振りをしたのだけれど…
Azureが悪いとかそういう話ではなくて、飲みながらあーだこーだ話して、@froncool の個人的事情などもあり、ちょっとこのままじゃできないなー、みたいな感じで。

そのうえ、前日にまた面倒なことがちょっとあって、ふたりともテンションだだ下がりで、
「結局やめとく?」
「んーいちおうやろうか」
みたいな感じのテンションでした。
すみません。

ということでISUCON6の予選1日目に参加してきました。

当日。
10時集合…なんだけど、よく考えたら10時集合じゃダメですね。
無線の設定とか、必要な項目渡したりとかそういうこと考えると15分前とかに集合すべきだった。

とはいえ、結局、寝坊だのなんだのがあって、11時ごろ集合。ダメダメです。
とりあえず初期スコアを測ってみたら、Perlで3000点ほど。
お互い特にこだわりないし、まあPerlでいいか、と言うことに。

ソースコードを読んで、さてどうしようかーとか言ってたら12時ちょい前になったのでご飯を食べに。
ご飯を食べながらISUCONと全く関係ない話をして、戻ってきたら13時。

「よし、そろそろ本気出すか」
もう3時間たってます…

暫定で「これをやりましょう」ってなったのはこれ



  • アプリケーションが2つ立っていて効率が悪そうな感じだったので1つにまとめる
  • mysql と nginx の設定をいじる


  • この辺をやって、4000点程度。うーん。

    「StarはRedisにすれば速そう」
    「えーRedis立てるのめんどい」

    「EntryもRedisにしたら速いんじゃね?」
    「ループ意外とめんどくさいと思うよ」

    みたいな感じで劇的な改善案は思いつかず。
    (Redisちゃんとやれよ自分)

    そんな中、 / へのアクセスが遅いという話になり、 / へのアクセス時に同じ処理を10回回している部分があって、それが1回ごとにDB舐めてるのでそこを改善。
    そしたら、4000→10000点に。

    その後、あっちいじってこっちいじってあんまり変わらず…という時間が続く。
    16時ごろ、起動するPlackのプロセス数をいじってみたら、16000まで上昇。いいね。

    その後も小康状態が続く。

    「もうSPAM判定の結果をキャッシュするしかない」
    明らかにほかに改善すべき点はあるものの、一番のボトルネックがSPAM判定だったので、とりあえず…ということでやってみることに。
    SPAM判定がされた場合、それをDBに保持しておく、という手法を取ってみました。

    結果…
    1回目:32000点
    2回目:35000点
    3回目:39000点
    4回目:45000点
    (以降変わらず)

    となりましたとさ。
    SPAM判定のキャッシュは initialize しても持ち越すようにしていたため(多分実装としては良くない)、キャッシュに乗り切るまでは試行しつづけると効率がよくなるので、点数が変わらなくなるまでぐるぐるさせました。
    点数が止まった時点でDBを見た感じ、SPAMとされるPOSTは100種類。なるほどキリがいいですね。

    この時点で17:45で、これ以上がんばってもあんまり変わらなそうだよね、ということでここまで。

    チート(SPAMのキャッシュ)ありで 45000点、チートなしで16000点、という結果を報告します。
    18時時点のリーダーボードでは、上位10位に入るくらいでした。
    ただし、これは自チームだけ18時時点の点数、他チームは17時時点の点数になっているので、実際に10位ではないはず。

    全体の結果が出てないのでなんともいえないですが、多分予選敗退ですね。
    万が一、「17時時点から他チームの点数が上がらない」「2日目参加のチームが全部うちより弱い」などの奇跡的な条件が重なれば本戦進出できるかもしれません。

    とはいえ、やる気がなかったわりに高得点は叩けたのでだいぶ満足です。

    リポジトリとかもちゃんと作らず、1インスタンスしか立ち上げなかったので、声かけというソフトロックをしながら二人で同一ファイルをvimでいじるという、あれな感じのやり方でした。

    ということで…
    次回はちゃんとやります。

    打ち上げ!!!








    「あ、OKのやつもキャッシュしておけば6万点は行ったんじゃない?」