2014年9月アーカイブ

今年もこの季節がやってきました。

今年のISUCON4は出題がクックパッドになりました。自分たちは去年に引き続き @sugyan @tagomoris とLINE選抜チームを組んで参加しました。

共催枠なので予選免除で本選には出れるのですが、場数も重要だと去年参加して分かったので予選も参加しました。参加は1日目の土曜日です。

結果は「51192」ランキングには入りませんが、10位相当のスコアになります。言語はPerlです。ちなみに、2日目のベンチマークツールでも実行しましたが同等のスコアがでました。

準備

とりあえず、会社のchatに専用のchannelをつくり、@sugyan @tagomorisと簡単に確認し、去年の自分たちが用意したwikiを読み直しておこうと話をしました。

去年の本選前と同じく、使うであろうソフトウェアについては、コピペでインストールができるように準備しておきました。とは言っても去年とほぼ同じでいくつかバージョンがあがっているぐらいです。

準備したソフトウェアは

  1. memcached
  2. openresty
  3. mysql
  4. 使うであろうperl moduleを書いたcpanfile

なかんじ。

開始〜

去年の経験から、コードに手を付けるよりもまず、どんなサイトか確認し、冷静にプロファイルを取ろうということで、アクセスログの解析と、pt-query-digestをつかってMySQLのプロファイルをとりました。

そこで、今回のアプリケーションがログインの機能しかなく、アクセスするURLもクエリの種類も非常にすくなく、データ量もそれほど多くないことがわかりました。

この時点ですべてのデータを1つのプロセスの中でもつ、ISUCON用語でインメモリDBアプリにしたらよいスコアでるよね〜と分かりましたが、その本選に向け、スケールするような構成で行きたいということで現状のアプリケーションを改善していく方向でやりました。開催枠なので予選を通過出来るスコアをだせばいいやという余裕もありました。

ソフトウェアインストール

アプリケーションはmemcachedにデータを移動し、MySQLを使わないアプローチに決まったので、sugyanとtagomorisはアプリケーションの改善を行い、自分はソフトウェアのインストールや入れ替えを行いました.

perlの初期スコアが「1495」、workloadを4にあげて「3186」、ここからnginxをopenrestyに入れ替え、秘伝のタレnginx.confをいれ、StarmanをStarletに入れ替えるなどして「3489」。次にMySQLをこれまたチューン済みのmy.cnfとともに入れ替えてworkload 8で実行「2964」

この次に、使わなくなる予定のMySQLのインデックスの追加を行ってみました。すると、「cannot assign requested address」などのエラーがでたので、あぁ、keepalive効かないんだーと思って、sysctl.confにいくつか足してチューニング、ファイルデスクリプタもlimits.confを弄るなどして増やした。

すると、workload 4で「38417」、workload 8で「40690」とかいう数字がでた。

このあたりで13時。

アプリケーションの変更

ここから主に sugyanとtagomorisのアプリケーション変更。初期化フェーズでmemcachedに入れるところ、アクセス拒否を行うためのカウント、ログなどと段階的に進んでました。自分はその裏で、index.htmlを静的に吐き出したり、Starletを改造したり細かいチューニングをしていましたが、それほど効果なかったように思えます。

途中でreportが合わない問題に当たってなかなかスコアが上がらない時間が続きましたが、memcachedにデータを移しつつ、SQLがなくなっていく毎に45k=>50kとスコアがあがり、最後にプロセス数を弄ったりしつつ、50000〜52000ぐらいのスコアがでるようになりました。

バグに苦しんでた4万中盤で、5万点ぐらいは行きたいなーと思っていたので、その点数がでて一安心。

本選に向けて

事前の話通りに、プロファイルをとり方向性を明確にした上で取りかかり、実装できたところが良かった。それでも上はまだいるので本選に向けて予選の復習と、あれこれ作戦をチームで考えていきたい所存です。

クックパッドの皆様、そして941さんとりあえず予選おつかれさまでしたー。本選もよろしくお願いします!

YAPC::Asia Tokyo 2014 Tokyo の1日目の「Web Framework BenchmarksとPerlの現状報告会」というタイトルでLTと、2日目に「Dockerで遊ぼう」という発表をしてきました。

うしろのばやしさんにラーメンと一緒に飲み込まれてしまった感がありますが、PSGI/Plackのパフォ厨としては、どうしても現状を報告しておきたい内容でありました。unicornに勝ちたい!!

2日目の朝イチというコマでありましたが、大勢の方に見に来て頂いて驚きました。前半の内容を盛り込みすぎて時間が足りなくなってしまい、すみませんでした。アンケートで既にDockerを使っている方が凄く多かったので、インストールの部分とかは飛ばしてもよかったんじゃないかと思いましたが、Dockerを使う上で少しでも役に立てば幸いです。

ベストトーク賞

うずらさんのPHP発表は内容面白かったし、喋りはうまいし、スライドも作り込んであってさすがという感じでした。ベンチマークで自分がLTで紹介したオプションを使って頂いて嬉しかった。時代はPHP

その他のトークではgugodの「One layer down below」とSawyerの「Plack for Fun and Profit (But Mostly Profit)」の二人がよかった。新しいものや多機能なものに飛びつくのではなく、ひとつレイヤーの低い部分から必要最小限で高速に動作するものを作ったり、ビジネスの継続という視点で冷静に見極める。Booking.comという大規模なサービスの中身が垣間みれたようで、とても参考になりました。

そうそう、今回はスピーカー登録だけだったので、ベストトーク賞の投票権がなかったのが残念。

microservice

昔からあるものにそれっぽい名前がついて流行るというやつなんだけど、今回のYAPC::Asiaでもいくつかのトークで出て来た。とくにあんちぽくんさんの発表がよくまとまっていた。

個人的に、この分野にコミットできることとしては、内部APIをコールする高速なHTTPクライアントや、内部APIに実行に特化したAppサーバの開発があるのかなぁと漠然と思った。gugodがトークで紹介していたHijkがまさにそれ。

おそらく、それがないと「microservice化したらアプリケーションが100倍遅くなった!!!microserviceは単なるバズワード!!!!!」とかになってしまうので、microserviceを唱えるみなさまにおかれましては如何に通信のオーバーヘッドを減らすかというあたり、「並列実行で万全〜」とかじゃなくもうちょい具体的な解決案の提案が必要なんじゃないかと思いました。

そういえば。2009年のYAPC::AsiaでLWPからCurlに変更してCPU使用率をグッと下げるというのを紹介していた

isuconの宣伝

2つの資料にも入っていますが、今回のYAPC::Asiaでは会う人、会う人にISUCON予選への出場を進めておいた。楽しいし、勉強になるし、100万円は僕らが頂くので貰えませんが賞金でるし、みんな挑戦するとよいですよ #上から目線

参加はこちらから↓↓↓↓

ISUCON4 オンライン予選の参加登録を開始しました

余談

スライドのレゴはこのセットのバイクを組み替えると作れます。Pete Corpさんという方がyoutubeで公開している動画を見て作ってみました

レゴ ムービー スーパーサイクルチェイス 70808
レゴ (2014-02-07)
売り上げランキング: 1,434

レゴムービーは最高の映画です

LEGO (R) ムービー ブルーレイ&DVDセット(初回限定生産/2枚組/デジタルコピー付)  [Blu-ray]
ワーナー・ブラザース・ホームエンターテイメント (2014-08-02)
売り上げランキング: 460

このアーカイブについて

このページには、2014年9月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2014年8月です。

次のアーカイブは2014年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja