Author Archive

    はてなブックマーク - ISUCON3の本選にFulabで参加してきました
    このエントリーをはてなブックマークに追加

    Fusic 平田です。
    予選を繰り上げ当選できたので、本選に参加してきました。

    一緒に参加したヌーラボ染田さんのblog記事ISUCON3本選関連エントリまとめあたりも合わせてご覧ください。
    我々が何をやったかの詳しいところは染田さんの記事に書いてあるので、僕の視点から見たことを時系列で並べてみます。

    前日の作戦会議

    「今日は飲んでも飲みすぎない」が最初の確認事項。
    あとは前回の反省で、「事前の検討を長めに」「入れ替えが容易ならやってみて、だめだったら戻すくらいで」といったところを確認。
    とは言え後は複数台構成だろうってくらいの予想しかできなかったので、「立ち合い強く、あとは流れで」みたいな話になりました。
    「地方参戦の強みをおやつで発揮する」というのも協議結果で、これについては後述。

    で、前日の準備にopsletを活用。
    弊社の眼鏡軍曹が作ったもので、ISUCONに合わせて機能追加までやってくれたものです。
    機能としては、curlで標準出力やらファイルの中身やらをぼんぼんサーバに飛ばすもので、



    こんな感じで見れるってやつです。
    手元で試したのとかを送っておいて、あとは当日活用しようってことで大いに使わせていただきました。

    当日朝

    遅れることなく無事に到着。
    写真をいろいろ撮ったりしつつ。


    ~開始前

    PCの準備をしたり、会場を見回ったり、おやつの確認をしたり。
    おやつは生八つ橋とめんべいを用意。


    事前説明など~競技開始前

    既にwktk感が止まらない事態だったのですが、説明が始まってさらにテンションUP。
    で、OPムービーに「画像投稿」と出た瞬間から「これはやばい」感ががが。

    開始~12:00ごろ

    前日の作戦会議どおり、まずは中身を確認。
    のち以下の方針(染田さんの記事からコピペ)。

    ・予選同様フロントは varnish に入れ替えてキャッシュなるべくきかせよう
    ・アプリの外部プロセスでの変換処理がツラいので Imlib2 (or Imager) に置き換えよう
    ・MySQL の timeline 周りの臭そうな所をひとまずつぶそう
    ・いきなり複数台展開するとボトルネック分かりづらくなるから、まずは一台でチューニングして各サーバへの展開は後からにしよう

    なんとなく「上3つを片付けて、ある程度スコアが伸びるのが15時くらいかなー」「それからボトルネックに合わせて展開しつつ更にいろいろ手を出して17時過ぎて、あとは再起動確認しつつ最終調整かなー」とか考えていたんですが、完全に甘い目論みでした。
    自分は前回同様、varnishでキャッシュして捌くところが担当。

    ~15:00

    とりあえず、varnishに差し替える→fail!fail!fail!
    最低限の設定(静的ファイルだけキャッシュ、あとはpass)しか入れてないはずだけどなー。。。と思いつつ、ヘッダの状況とか確認して合わせたりしつつ。
    timelineが30秒詰まってまともに動かない。。。のでアプリ側を見たらsleepとか入ってて、これで眠ってるんだろうなーということで外して再チェック。
    でもfail!fail!fail!で、こりゃvarnishのほうちゃんと見直そうってことで、サーバ2のほうで別途確認を進めることに。
    この時サーバ2を初めて覗くことになったのですが、
    > 残りの4台は社長が追加契約した直後の状態なので、まっさらな状態です
    てなレギュレーションにガクブルしてたらperlとかmysqlとかは入ってたので、思ったより社長は悪人じゃなかった!と一人ほっとした次第です。

    で、そこからいろいろ設定。

    ・ヘッダをもう少し調整してばっちり合わせる
    ・アプリ側でno-cacheヘッダ付加してたなーと思い、念のためつけてみたり

    とかやっているうちにfailは出ないことを確認して、よし画像をーと進めたのですが

    ・ログインユーザごとにキャッシュ分けなきゃーなので、cookieの値を見て、ユーザのapp_keyごとにキャッシュを分ける
    ・/icon/と/image/をキャッシュさせた時のfailが回避できない
    ・変な状態のキャッシュが残りにくいよう(failしないように)頻繁に消すようにして整合性を重視
    → したつもりでもfailするしそもそもスコアが全然伸びない

    と言ったところで詰まって、どうしたもんかなーとか思っている間に15:00。
    アプリ側は、画像変換処理を入れ替えたらどうもfailするとか、timeline部分のクエリを改善すべくfollow情報をmemcachedに放り込むとか、手は打つものの大きくスコアを伸ばすに至らず、memcachedで画像をキャッシュさせる戦略に切り替えつつ、といったところ。
    要はスコアを伸ばせてない状態のままで、「もう15時かー!」と3人で悲鳴あげてました。

    ~16:45くらい

    とは言えこのまま手をこまねいているわけにもいかないので、vmod-memcachedとか持ってきて策を練るも、うまいことキャッシュを操作しようとなると

    ・そのリクエスト+Cookieの値に合わせた値をmemcachedに保持しておく必要がある
    ・となるとアプリにさらなる改変が必要
    ・画像キャッシュする部分も影響受けそうで、改変コストがだいぶ大きい

    といったところで手を付けられない、ぐぬぬ、と。
    そうこうしている間にアプリ側の改修が進み、画像のキャッシュがヒットしだして、スコアが伸びて4000くらいに到達。
    この辺で山本さんに現状の問題をざーっと伝えたところ、「なんかiconは何も考えずにキャッシュさせるだけでよさげ」といった話になり、あーそれならすぐできるな、とさっくり設定して、ついでにサーバ1(アプリ改修を反映しているサーバ)をバックエンドにしてベンチを走らせてみる。



    ( ゚д゚)
    (つд⊂)ゴシゴシ
    (;゚ Д゚) …?!
    思わずガッツポーズしてしまいました。

    ~17:30くらい

    といったところでworkloadを変えたりいろいろ実験してサーバ構成を見直す。
    個別検証だったり、アプリ改修の最中でサーバを分けていたりの経緯で
    サーバ1 -> APサーバ
    サーバ2 -> キャッシュサーバ
    サーバ3 -> 空き
    サーバ4 -> memcachedサーバ
    サーバ5 -> DBサーバ
    といった役割構成。
    DBは余裕綽々だったので、AP/キャッシュサーバを増やす方向で検証を進める方向にシフト。
    サーバ1とサーバ2をAP+キャッシュ(varnish)の同一構成にしてベンチ→fail!fail!fail!とうまくいかず、調査と対応を進める。
    とかやってるうちにLINE選抜が40000超えのスコアを出して、会場が「うわー」「うげー」「うひー」みたいな声で溢れかえっていました。
    僕は「うわー」って叫んだ一人です。
    引き続きvarnishだけ増やす設定進めようとするも、確実に終わらせるには時間的に厳しいので断念。

    ~18:00

    残り時間も少なく、これ以上の手入れは厳しいと判断して、サーバ再起動をしての動作チェックに移行。
    ここはもう3人で声掛け確認をしつつ、「サーバ2再起動しましたー」「サーバ5再起動OKー」みたいな感じでひたすらに確認。
    全ての懸念が取り除かれて最終ベンチを走らせたところでタイムアップとなり、最終ベンチのスコアは11000くらい。ただしfail(時間切れのためと思われます)。

    結果発表待ち中

    終わってみるといろいろ思いつくもので
    ・そういやimagemagickのパラメータ全然変えてなかった
    ・横展開に舵を切るのが遅かったかしら
    ・iconだけvarnishでキャッシュさせる手はもっと早く気付けたなあ
    ・おやつ全然手を付けてなかった→懇親会で配ろう
    といったあたりがすらすらと出てくるんだから困ったもんです。
    また、この後に備えてウコンを仕入れて投入。

    結果発表

    ご存じのとおりLINE選抜が優勝し、#茶番のハッシュタグが乱舞。



    その後、出題者の藤原組長の講評、そして優勝以外の結果一覧。
    計測前のスコアでは7-8位くらいで、「failしなきゃ真ん中よりは上かなー」くらいに考えていたのですが、



    3位!!ということで、予選繰り上げ通過から考えるとかなりのジャンプアップ。
    100万円とダンボーは残念ながら獲得できませんでしたが、きちんと計測完走して上位に入れたのでほっとしました。

    懇親会

    戦いきった後なので、心地よい疲れとともに飲みまくりました。
    ISUCONの話だったりそうでない話だったり、某社某会長の物まねを見せていただいたり、楽しい時間が過ごせました。
    あと、モリスコールを生で聞けたのでよかったです。

    反省とかいろいろ

    予選の時は、何か手を打つ→スコアが上がる、のループをうまく続けられたのですが、今回はなかなかスコアが上がらずに苦戦しました。
    その中で視野が狭くなっていった部分もあり、この辺はまだまだ精進しなければならないなと感じました。
    また、優勝したチームやベンチで高スコア出していたチームは、早い段階で複数台構成を意識して進めていた点が大きく違ったなと。
    当初のもくろみ通りに早めに複数台に展開できていればまた違ったのでしょうが、この辺は自分の実力が足りなくて次の策を打つまでに時間がかかりすぎたなーと反省しきりです。
    一方で、終盤を再起動検証につぎ込んで結果を残せたのは、安定スキーな自分としては満足のいくところです。

    その後

    お祝いということで、社内の方々からいろいろいただきました。



    ありがとうございますありがとうございますどうしてこうなった。

    最後に

    以前から参加したいと思っていてようやく参加できて、ありがたいことに本選まで参加させていただきました。
    当日もずっと言っていたのですが、1日中ひたすら楽しかったですね。
    楽しいイベントを提供していただいたISUCON運営チームの皆様、本当にありがとうございました。
    また、本選に快く送り出していただいた弊社の皆様、ありがとうございました。
    そして、一緒に戦っていただいたヌーラボの山本さん&染田さん、本当に本当にありがとうございました。
    また次回も参加したいとか言い出すと思いますが、その際は皆様よろしくお願いいたします。ぺこりぺこり。

      はてなブックマーク - Fukuoka.pmでクイズを支える技術について発表してきました
      このエントリーをはてなブックマークに追加

      Fusic 平田です。
      なんだか連続で記事を書く羽目になっていますが、まあ気にしないことにします。

      10/26に行われたFukuoka Perl Workshop #24にて、久しぶりに発表をしてきました。
      他の参加者の方々のエントリなどは以下の通り。
      福岡のPerl Workshop「Fukuoka.pm#24」に行ってきました! – ゆーすけべー日記 v2
      Fukuoka Perl Workshop #24 YAPC::Asia レポート 2013 – 新なんでもありBLOG
      Fukuoka.pmに乱入してきた! – Hachioji.pm 日めくりテックトーク
      Fukuoka Perl Workshop #24 行ってきた(あと、自分の知ってる昔話) – てっく★ゆきろぐ Rev2
      2013年のCPANモジュール作成事情 – charsbar(slideshare)

      話したこと

      自分の発表スライドは以下になります。

      当日のデモの代わりの動画は以下になります。

      当日の発表内で公開すると言っていた、iPadスタンドのPDFは以下になります。

      ipadスタンド(PDF 2.95KB)

      ※ 全部山折りです。
      ※ プリンタで印刷すると、余白の関係でサイズ調整が微妙にずれたりするので、キンコーズとかで印刷したほうがいいかもしれません。

      補足とか

      まず、暇ではありません。
      ※ これ書いておかないと、すごく誤解されまくるので。
      IT会社の10周年だし、何かしら普段使っている技術も活用したほうがいいよね、という建前のもとにいろいろ進めました。
      ある程度たたき台ができて、その後はディテールにどこまで凝れるか、というのが焦点になり。
      細部に凝れば凝るほど権利的な部分がアウト方向に進んでいったのですが、あくまで内輪の余興ということでご容赦ください。

      日々業務の合間を縫いつつ、同僚から「あいつは何をやっているんだ」という目で見られていたかどうかはよく分かりませんが。
      勉強会の発表ネタとして昇華できたので、良かったんじゃなかろうかと。
      ちなみに、当日発表の中で一番評価が高かったのはiPadスタンドでした。
      ※ iPadスタンドは別の方に作成していただきました。ナイテナイヨ?

      Fukuoka.pmについて

      久々に参加したのですが、すごく充実した内容でした。
      ※ ustの配信で若干じゃなくミスってたので、そのへんは次回までに改善しておきます。。。
      誰かが言ってたんですが、発表者と聞いている人の距離がかなり近く、まったり進む感じが非常に良い勉強会です。
      次回もそのうちあるでしょうし、天神PerlとかPerl入学式とかもあると思うので、また参加したいと思います。

      遠征していただいた皆様、遠征支援いただいたJPAさん、会場を提供いただいたヌーラボさん、主催の津留さんはじめ参加者の皆様、ありがとうございました。ぺこぺこ。

        はてなブックマーク - ISUCON3のオンライン予選にFulabで参加してきました
        このエントリーをはてなブックマークに追加

        Fusic 平田です。
        あーだこーだ言ったりやったりしている間に当日を迎えてしまいましたので、予選に参加してきました。
        今回はヌーラボさんのお二人(@dragon3さん, @tksmdさん)と組ませてもらい、チーム名はFusic x nulab = Fulabに決定。

        ちなみに最終スコアは

        で、もう一歩のところだったのかなー1 と思われます。
        ※ 2013/10/09 20:00追記: 繰り上がり当選してました!

        だいたい時系列にやったことを並べると、

        前々日にSkypeでざっくり作戦会議

        ・まあPerlかなーとかvarnish使うかなーとか
        ・台風で予定狂いそうだったので3人で祈る

        当日朝

        ・無事3人揃って参加可能に
        ・ヌーラボさんにお邪魔して、環境準備とか
         ・TV会議システムで京都のtksmdさんとやり取り
          ・超スムーズでうらやましくなる
         ・backlogのプロジェクト立てたり、公開鍵渡したり
         ・他にチャットはtypetalk、メモはEtherPad
          ・とか書いてたら普通にヌーラボさんのプロダクツ紹介になっていたことに自分で驚いた

        開始

        ・とりあえず動かして初期スコア確認(Perlで800くらいだった)
        ・皆でいろいろ覗く
        ・とりあえずis_private邪魔だなーとかmy.cnfないなーとかそういう話

        11:00ごろ作戦会議

        ・ちゃっちゃとvarnish立てよう
        ・DBのインデックスとかクエリとか見直さないとね
        ・なんとなくフロント/アプリ/DBで役割分担

        ~13:00くらいまで

        ・さくっと2000くらいまでは行って、TOP5くらいには入っていそうなのを確認
        ・その後も見直しつつベンチ回す
        ・やっぱMySQL重いしCPU食ってるのがなかなか落ち着かない
        ・このへんでmarkdownの生成周りをどうにか対処しないとなーという話に
        ・is_private=0が邪魔なので、memos_publicテーブル作って、SQLのWHERE句に出てこないよう改修開始

        ~16:00くらいまで

        ・じりじり順位落としてツライ
        ・memcacheに乗せられるものを徐々に乗せる方向に
        ・並行してmarkdownの処理もキャッシュ作って乗せたりする方向に対応
        ・workloadを上げてみて、5くらいで一番スコア出たのを確認
        ・いくつか罠を見つけたので、引き続き罠探したり
        ・varnish側でgzip切ったのも多分この辺

        ~18:00

        ・MySQLの設定変えたらdiskfullになるとか
        ・markdown周りのキャッシュが効きだしてスコアがまた伸び始める
        ・他もいろいろmemcacheに乗せまくる
        ・どうもvarnishのキャッシュが乗せきれてないのを対処再開するも時間切れ

        といった感じでした。
        他のチームのやったことを見る限り、アプローチはだいたい間違ってなかったのかなーと。
        いくつか効果出そうなところで手をつけきれなかったりとか、フロントでうまくさばけていれば2 もっとスコア伸ばせたなーとか、その辺でいくらかずつ足りなかったようです。

        開始から終了まで、ずっと楽しかったです。
        ぜひ次回があればまた参加したいですね。
        主催の皆様、本当にありがとうございました。ぺこりぺこり。

        1. 暫定の予選突破ラインが8700くらいだったようで、本当にあと一歩でした。。。 []
        2. varnishでスコア激伸びした!てのも見かけるので、ブレークスルー起こせなかったのが心残り []