生活の詩のようであり、社会への書簡のようなもの。

生あたたかい血の通ったcontributionを、貴方と、アフリカと、そしてわたし自身に優しく美しく届けれるようになりたい。

Million Traffic Battleに参加して腹パンした

CAさんの主催されているMillion Traffic Battleに行ってきました。

僕は普段はアプリケーションばっかりやってるのですが、GoやらHashicorpさまやらISUCONやらの影響でインフラに興味を持っていたのでインフラ初心者ながら参加させていただきました。

イベントは2日間で、1日目がAPI開発、2日目がそのAPIのチューニングといった感じでした。1日で作ることを想定されてるので大きなアプリではないのですが、まぁ業務でも使ってるし一番好きだし的なところでRailsを選びました。(言語はRubyと決めていた!!というかRubyしか書けない!!)

1日目

1日目のAPI開発。1日(というか半日?)にしては分量わりとある!という印象でした。ひとまず返った後も続きを書いてそのときには点数がではじめるくらいのところまでいけました。ですが実装自体はまだまだでした。

今回APIを完成しきった人っているんだろうか...

Rubyの島でSlackのグループが早々できたおかげもあり、友人たちに助けてもらいながら越えていけました。

APIアプリケーション自体の開発はいいとしてとにかくnginxとunicornの設定にてこずってしまいました。あーーー、何回もやってるはずなのに。HTTPサーバーとアプリケーションサーバーがどんな風に動いてるのかまだまだ理解が足りていない。。。

2日目

2日目は本番のチューニング!

僕は主に以下のことをやりました。

  • カーネルパラメータ

    • 同時にアクセスできるプロセスを調整したり
  • WebServer (nginx) のチューニング

    • 割愛(またtechブログでまとめたい)
  • データベース (MySQL)
    • パラメータのチューニング
      • my.conf
        • 割り当てメモリ
        • large_memery
    • index
      • バラツキが多いものほど効果が大きい

他にも、

  • キャッシュサーバー

    • プロキシ
    • varnish cache
  • 構成を理解する => 構成を変える(今回はインスタンスひとつのみなのでなかった)

  • DB
    • シンプルなデータ構造と、シンプルな検索ロジック
    • いかにINDEXが使われるSQLを書くか否か
    • 遅いSQLの調査・改善
      • slowlog

とかやりたかったけどこちらは出来なかった。

ベンチマークは、知識がなかったのでcurlwrk使いました。

https://github.com/wg/wrk

後半indexはってnginxのパラメータいじりはじめたあたりから秒間でさばけるリクエストが上がってちょっとスコアあがったのですが、それでもトップ層には全然届かず。

最後はレスポンスの遅いメソッドは削除してしまってとにかく不一致が少なく速くレスポンスを返せるメソッドで点数を稼ぐようにしました。

まとめ

優勝したのはバックエンドをScalaで書いていた方でした。意外と今回唯一の静的言語。

あとは、JSを使ってた友達が印象に残りました。nodejsらぶな感じで面白かった。帰り際に、「nodejsを布教したかったのにScalaに持ってかれた」という今回のイベントのまとめをつぶやいていたのが印象的でした。

僕は全然ダメで一時は6番目くらいまでスコアが出たときもありましたが、基本的に中〜中の下くらいをフラフラしていました。

非常に悔しかった!!チューニング系のことは初めてだったけど、1日目のAPIアプリケーション開発の部分でも遅れてた面あったのが非常に!!

書いてるし、まぁ勉強もしてると思ってた自分に腹パンして精進し直そうと思います。