@yurahunaで予選2日目に参加しました。事前にやったこと使用する言語の選択では,メンバー全員が研究で多少は使っていることから,Pythonを選択することに決めました。過去のISUCONでの本選出場者数から考えるとPythonはやや分が悪いっぽいのですが,普段Web系のプログラミングをしていない勢のチームだったので使い慣れた言語の使う方が大切だと思ったからです。練習はISUCON5の予選でやりました。「MySQLってどうやってログインするの?」とか「バックアップってどうやるの?」というところから始めないといけなくて時間がかかりましたが,数日かかって21000点くらいに到達して「私なんだかいける気がしてきた...!」(ここに青葉ちゃんの画像を貼る)となりました。ISUCON5はMySQLのクエリ改善が重要だったのですが,それ以前のISUCONではキャッシュやパラメータ設定が重要だったりしたこともあったようなので,Redisのチュートリアルをやったり,NginxやMySQLやGunicornの秘伝のタレを作ったりしておきました。問題のアプリケーションの内容はてなキーワードのようなアプリでした。DESC)という順番で優先されます。「テレビ」と「テレビ東京」というキーワードがある状態で記事内に「テレビ東京」という文字列が出現した場合には「テレビ東京」が優先また,キーワード記事には「はてなスター」のような機能があり,お星様をつけることができます。Gunicornの設定を秘伝のタレに書き換えました。この時点で動作確認をすると500が帰ってきて大変でした。socketで接続するように変更したら,エラーが出てしまいました。今回のアプリケーションはキーワード記事を管理するisudaというアプリケーションと,はてなスターを管理するisutarというアプリケーションに分かれており,相互にHTTPで情報をやり取りするマイクロサービスのような構成になっていました。socketでの接続を無効にすることにしました。classをMeinheldに変更したら謎のエラーが起こったり,/etc/mysql/my.cnfに貼ったシンボリックリンク先の設定ファイルが読み込まれなかったりして,まともに動くようになった頃には13:00頃になっていました...設定が終わったら何かアプリに加える前にプロファイルを取ると心に決めていたので,kataribeで実行時間の多いパスを探すことにしました。他には,mysqldumpslowでスロークエリを探してみると,スロークエリらしいクエリは何も見つかりませんでした。ベンチマーク中にtopコマンドを見てもわかるように,今回はSQL勝負ではないようです。中盤load_starsとhtmlifyの2つのメソッドが遅いことが分かったので,この2つを中心に改善することにしました。中身はisudaからisutarにHTTPリクエストを投げて「はてなスター」の情報を取ってくる処理でした。HTTPリクエストがボトルネックっぽいのでisudaとisutarのマイクロサービスをぶち壊してモノリシックな構成にすることにしました。isutarの実装がとても軽かったので,isudaにisutarを取り込みました。続いてhtmlifyの中身は記事中に出現したキーワードにリンクを付ける処理でした。正規表現よりはAho-Corasickのほうマシな気がしたので,ライブラリを探してきて検証をしていました。終盤ブラウザ上での動作確認では正しく動いているっぽいのに,ベンチマークにかけるとFAILする現象が発生していてデバッグが大変だったのですが,その原因が分かりました。いつの間にか,ブラウザで閲覧しているIPアドレスが,以前ISUCON5の練習で使っていたインスタンスのIPアドレスになっていました。201611,000点くらいでした。キャッシュ戦術重要ですね。反省したことMySQLのmy.cnfのシンボリックリンク問題my.cnfの実体をGitのリポジトリ下において/etc/mysql/my.cnfにシンボリックリンクを置くことにしていたのですが,なぜか設定ファイルが読み込まれない現象に遭遇しました。これはAppArmorが関係しているようです。AppArmor」でググると過去の犠牲者がたくさん見つけられます。classにMeinheldを使ってスコアを改善したという事例があったので,練習の時に試してみると実際1000点くらい上がったので今回も使ってみました。GitHuborangain.hatenablog.com理由はよくわからないのですが,URLに日本語が入っている場合に落ちてしまいました。以下のコードで落ちてるっぽいので後で調べます。するダメなワークフローだったので,今度はもう少しまともなワークロフローを考えたいです。デバッグしていたのですが,さすがに効率が悪すぎるのであとでやり方を調べます。MySQLのオプションMySQLへの接続で以下のようなコードが書いてありました。utf8mb4')sql_modeなんか指定したほうが良いらしいです。www.songmu.jputf8mb4MySQLの文字コードにはハハパパ問題と寿司ビール問題という2つの罠があるようです。さんにおすすめされたので、試しに導入してみました。(1)はてなブログをはじめよう!kujira16さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。