LIFULL HOME’Sにおけるサイト
の高速化と今後の対応
2017/4/12 磯野 圭輔
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。2
About me
• Keisuke Isono
– LIFULL HOME'S事業本部 技術開発部
基盤開発ユニット プラットフォームグループ
• Web Engineer
• Recent Interests
– golang, nodejs
– serverless architectures
– AWS, GCP
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。3
Our Mission
技術力と思考をもっ
て挑戦し
技術基盤を革進さ
せる
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。4
Recent work
• AWSへの移行
– キャッシュサーバーのElastiCache化
– 旧検索エンジンの廃止
• データフローの刷新
– 設計中
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。5
Contents
1. 高速化施策の紹介
2. 高速化に関わる計測
3. 今後について
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。6
高速化施策の紹介
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。7
高速化施策の紹介
1. 体感速度の向上
2. レスポンス速度の向上
3. 反映速度の向上
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。8
体感速度の向上
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。9
ユーザーの体感速度向上:先読み
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。10
ユーザーの体感速度向上:リクエストの分割(分割前)
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。11
ユーザーの体感速度向上:リクエストの分割(分割後)
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。12
レスポンス速度の向上
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。13
レスポンス速度の向上
• キャッシング
– 設定ファイルのパースを削減
• 通信データ圧縮
– APIとの通信もgzip圧縮
– APIの返却するフィールドを絞る
• 検索クエリによる検索エンジンの分散
– 遅いクエリを専用のサーバーに振り分ける
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。14
反映速度の向上
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。15
• 処理の非同期化
– 画像アップロードの非同期化
• AWSへの移行
– ディスク性能の向上による処理速度向上
– 共有データをNFSからS3へ移行することでの読み込み速度向上
サイトへの反映速度の向上
入稿
データ DB 検索
エンジン
Web
サイト
画像データ
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。16
高速化に関わる計測
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。17
高速化に関わる計測
1. ページ単位の計測
2. 分散トレーシング
3. その他
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。18
ページ単位の計測
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。19
レスポンスタイムやリクエスト数の計測
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。20
レスポンスタイムやリクエスト数の計測
• ユーザーのアクセスごとに処理時間
やリクエスト内容を記録
• そのデータを解析してグラフ化
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。21
レスポンスタイムやリクエスト数の計測
!
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。22
レスポンスタイムやリクエスト数の計測
• 気づければ直せる
• ただし、これだけだと、何が原因かは
よくわからない
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。23
分散トレーシング
zipkin
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。24
zipkinについて
Web
サイト
API API
API
DB
DB
• 各サーバーのアクセスログを見ればそれぞれのレ
スポンスタイムは分かる
• それぞれを紐付けて見ようとすると辛い
DB
200ms
API
120ms
60ms 30ms
40ms
60ms 45ms
10ms
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。25
zipkinについて
Web
サイト
API API
API
DB
DB
• 一連のリクエストにユニークなIDを付けそれをまと
めて記録する
• 確認する際はブラウザで参照可能
DB
200ms 120ms
60ms 30ms
40ms
60ms 45ms
10ms
zipkin API
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。26
zipkinについて
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。27
zipkinでの計測
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。28
zipkinでの計測
• 謎の処理時間
• DBアクセスやキャッシュアクセスの計測はしていな
いので、その部分の可能性あり
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。29
zipkinでの計測
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。30
zipkinでの計測
!
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。31
zipkinでの計測
!
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。32
zipkinでの計測
!
• APIが30msで返却しても20回呼べば600ms
• 2回目以降はキャッシュされているので気付きづら
かった
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。33
その他
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。34
その他
• 開発環境でのプロファイル
– 本番でしか再現できないような場合は、切り離した本番サーバー上
で検証する場合もある
• CloudWatchへのカスタムメトリクスの送信
– load avg. , memory utilization, cpu user/sys/idle、disk utilization
など標準では取得できないもの
– CloudWatchへの送信処理を自作して対応
• collectd pluginに差し替えたい
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。35
CloudWatchでのグラフ化
• いいグラフが見つからなかったので高速化関係な
いグラフ
• ある期間の物件数とデータサイズの推移グラフ
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。36
CloudWatchでのグラフ化
• 急に減るような部分は
CloudwatchAlarmで
検知可能
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。37
まとめ
© LIFULL Co.,Ltd.  本書の無断転載、複製を固く禁じます。38
本日のまとめ
• 計測の強化・可視化によりサービスの問題発見・改
善が格段に行いやすくなりました
• アプリケーションやインフラの改善もログやトレース
データの可視化もまだまだやれることはたくさんあ
ります
• 一緒にLIFEをFULLにしていきませんか?

LIFULL HOME'Sにおけるサイトの高速化と今後の対応

  • 1.
  • 2.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2 About me • Keisuke Isono – LIFULL HOME'S事業本部 技術開発部 基盤開発ユニット プラットフォームグループ • Web Engineer • Recent Interests – golang, nodejs – serverless architectures – AWS, GCP
  • 3.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3 Our Mission 技術力と思考をもっ て挑戦し 技術基盤を革進さ せる
  • 4.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4 Recent work • AWSへの移行 – キャッシュサーバーのElastiCache化 – 旧検索エンジンの廃止 • データフローの刷新 – 設計中
  • 5.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5 Contents 1. 高速化施策の紹介 2. 高速化に関わる計測 3. 今後について
  • 6.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6 高速化施策の紹介
  • 7.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7 高速化施策の紹介 1. 体感速度の向上 2. レスポンス速度の向上 3. 反映速度の向上
  • 8.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8 体感速度の向上
  • 9.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9 ユーザーの体感速度向上:先読み
  • 10.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10 ユーザーの体感速度向上:リクエストの分割(分割前)
  • 11.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11 ユーザーの体感速度向上:リクエストの分割(分割後)
  • 12.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12 レスポンス速度の向上
  • 13.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。13 レスポンス速度の向上 • キャッシング – 設定ファイルのパースを削減 • 通信データ圧縮 – APIとの通信もgzip圧縮 – APIの返却するフィールドを絞る • 検索クエリによる検索エンジンの分散 – 遅いクエリを専用のサーバーに振り分ける
  • 14.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14 反映速度の向上
  • 15.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15 • 処理の非同期化 – 画像アップロードの非同期化 • AWSへの移行 – ディスク性能の向上による処理速度向上 – 共有データをNFSからS3へ移行することでの読み込み速度向上 サイトへの反映速度の向上 入稿 データ DB 検索 エンジン Web サイト 画像データ
  • 16.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16 高速化に関わる計測
  • 17.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17 高速化に関わる計測 1. ページ単位の計測 2. 分散トレーシング 3. その他
  • 18.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18 ページ単位の計測
  • 19.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。19 レスポンスタイムやリクエスト数の計測
  • 20.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20 レスポンスタイムやリクエスト数の計測 • ユーザーのアクセスごとに処理時間 やリクエスト内容を記録 • そのデータを解析してグラフ化
  • 21.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21 レスポンスタイムやリクエスト数の計測 !
  • 22.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22 レスポンスタイムやリクエスト数の計測 • 気づければ直せる • ただし、これだけだと、何が原因かは よくわからない
  • 23.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23 分散トレーシング zipkin
  • 24.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24 zipkinについて Web サイト API API API DB DB • 各サーバーのアクセスログを見ればそれぞれのレ スポンスタイムは分かる • それぞれを紐付けて見ようとすると辛い DB 200ms API 120ms 60ms 30ms 40ms 60ms 45ms 10ms
  • 25.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25 zipkinについて Web サイト API API API DB DB • 一連のリクエストにユニークなIDを付けそれをまと めて記録する • 確認する際はブラウザで参照可能 DB 200ms 120ms 60ms 30ms 40ms 60ms 45ms 10ms zipkin API
  • 26.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26 zipkinについて
  • 27.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27 zipkinでの計測
  • 28.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28 zipkinでの計測 • 謎の処理時間 • DBアクセスやキャッシュアクセスの計測はしていな いので、その部分の可能性あり
  • 29.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29 zipkinでの計測
  • 30.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。30 zipkinでの計測 !
  • 31.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。31 zipkinでの計測 !
  • 32.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。32 zipkinでの計測 ! • APIが30msで返却しても20回呼べば600ms • 2回目以降はキャッシュされているので気付きづら かった
  • 33.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。33 その他
  • 34.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。34 その他 • 開発環境でのプロファイル – 本番でしか再現できないような場合は、切り離した本番サーバー上 で検証する場合もある • CloudWatchへのカスタムメトリクスの送信 – load avg. , memory utilization, cpu user/sys/idle、disk utilization など標準では取得できないもの – CloudWatchへの送信処理を自作して対応 • collectd pluginに差し替えたい
  • 35.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。35 CloudWatchでのグラフ化 • いいグラフが見つからなかったので高速化関係な いグラフ • ある期間の物件数とデータサイズの推移グラフ
  • 36.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。36 CloudWatchでのグラフ化 • 急に減るような部分は CloudwatchAlarmで 検知可能
  • 37.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。37 まとめ
  • 38.
    © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。38 本日のまとめ • 計測の強化・可視化によりサービスの問題発見・改 善が格段に行いやすくなりました • アプリケーションやインフラの改善もログやトレース データの可視化もまだまだやれることはたくさんあ ります • 一緒にLIFEをFULLにしていきませんか?