いい感じにスピードアップするコンテストの紹介

Ed660f8535bfc39e355af5a1e54bb88f?s=47 rch850
August 28, 2019

 いい感じにスピードアップするコンテストの紹介

社内勉強会でISUCONについて紹介したときの資料。5分LT用。

Ed660f8535bfc39e355af5a1e54bb88f?s=128

rch850

August 28, 2019
Tweet

Transcript

  1. いい感じに スピードアップする コンテストの紹介 2019.08.29 社内LT @rch850

  2. ISUCON: いい感じにスピードアップコンテスト LINE が主催するバックエンドエンジニア向けコンテスト 2011年から毎年開催 2019年は 9/7,8 にオンライン予選、10/5 に LINE

    本社で本選 年々、参加チームが増えている (407 → 528 → 600)
  3. ISUCON のココがいい 8時間の競技時間、とにかくアドレナリンが出まくる 学びが無限にある トップ企業からの出題にワクワク(今年はさくら&メルカリ) マジでオススメ

  4. コンテスト概要 お題となるウェブサービスが実装されたサーバ数台が与えられます。 8時間以内に、できる限り大量のアクセスをさばけるよう高速化しましょう。 ユーザー目線での動作が変わらない限り、何をしても構いません。 “各サーバにおけるソフトウェアの入れ替え、設定の変更、アプリケーション コードの変更および入れ替えなどは一切禁止しない。”

  5. 初期状態のサーバー

  6. トップページ GET / (+10点) メッセージ投稿 POST /message (+5点) フォロー POST

    /follow (+5点) トップページ GET / (+10点) メッセージ投稿 POST /message (+5点) SELECT * FROM user; 35 pt ベンチマーカー
  7. スピードアップしたサーバー

  8. ベンチマーカー トップページ GET / (+10点) トップページ GET / (+10点) メッセージ投稿

    POST /message (+5点) フォロー POST /follow (+5点) トップページ GET / (+10点) メッセージ投稿 POST /message (+5点) トップページ GET / (+10点) メッセージ投稿 POST /message (+5点) フォロー POST /follow (+5点) メッセージ投稿 POST /message (+5点) フォロー POST /follow (+5点) SELECT name FROM user WHERE id IN (?); メッセージ投稿 POST /message (+5点) フォロー POST /follow (+5点) フォロー POST /follow (+5点) トップページ GET / (+10点) 100 pt
  9. どうやってスピードアップするの?

  10. 負荷が高いプロセス、遅い HTTP アクセスやデータ ベースアクセスの特定、 ボトルネックを次々解消していく キャッシュサーバ (Redis) の導入、 データベース構造の最適化、負荷分散 再起動確認、さらなる極みへ……

    序盤 中盤 終盤 隙がないよね
  11. 例えばこんなコード

  12. def get_adult_count(): users = db.query(“SELECT * FROM user”) count =

    0 for user in users: if user.age >= 20: count = count + 1 return count
  13. def get_adult_count(): return db.query(“ SELECT COUNT(*) FROM user WHERE age

    >= 20 ”)
  14. 面白いと思った? ぜひチャレンジしよう!

  15. ISUCON 8 (2018年) 予選言語比率 Go   203組 40.0% Ruby  106組 20.9% Perl   70組 13.8%

    Python 65組 12.8% PHP   44組 8.7% Node.js 20組 3.9%
  16. 様々な装備 • 負荷が高いプロセス ◦ ps コマンド ◦ top コマンド •

    遅い HTTP アクセス ◦ Chrome Developer Tools > Network ◦ kataribe • 遅いデータベースアクセス ◦ explain ◦ pt-query-digest • 遅い処理 ◦ rack-lineprof
  17. へしこずの戦績 ISUCON 5: 予選早解きで本戦出場、本戦は0点 (failed) ISUCON 6: 他3名も加えて2チームで参加 ISUCON 7:

    25位 / 407組 ISUCON 8: 54位 / 528組