309 Views
July 28, 17
スライド概要
・日時:7/11
・テーマ:LIFULL HOME'S高速化への道のり
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
HOME’S高速化への道のり 2017/7/11 株式会社LIFULL LIFULL HOME’S事業本部 賃貸事業部UXユニット 水野 慎也
自己紹介 水野 慎也 2006年 ベンチャー企業に営業として新卒入社 2007年 エンジニアに転向。 2009年 LIFULL中途入社。 主にLIFULL HOME‘S事業のエンジニアメンバーとして開 発業務に従事。 現在は、賃貸マーケットのUX向上をミッションとした部署 でエンジニアメンバーを統括しています。 趣味:筋トレ、居酒屋めぐり
やったこと 3 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 メンバー高速化経験者がおらず、 手探り状態でいろいろ調査・検討 ・サーバ強化 ・ミドルウェアの導入 ・プログラム言語・FWのバージョンアップ ・プロダクトコードの改修 等々・・・ 4 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 調査の結果インフラ・ハード面に関しては既に相 当手が入っており、最終的にはコードの改修など ソフト面での対応が中心になった。 今回は「すごく泥臭い対応で乗り切った」 と言うお話をします。 5 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
特に改良の余地が見られなかったハード面 ・サーバ強化 AWSインスタンスの台数増加・インスタンスタイ プのグレードアップを検討 →既に高級なタイプが利用された上でチューニン グされており、以上は費用面から見合わない ・ミドルウェアの導入 APC(オペコードキャッシュ)最適化検討 →開発環境のパフォーマンスが悪く、本番環境に GUIが無くチューニングのために導入したところ 本番では特に問題は見当たらなかった 6 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
特に改良の余地が見られなかったハード面 ・APC 7 Hit Rate キャッシュが使わ れている率 たいてい3桁行くのに1~2桁 前半(個人環境が集まって おり各個人しかアクセスしな いキャッシュで占められて いるからというのはある) Cache full count キャッシュが満杯 になりすべて開放 した回数 回数がやけに多い(短い Uptimeの中で何度もやって いる) Hits & Misses キャッシュヒット率 もっとHitは多くできるはず Shared Memory APCに割り当てられ たメモリ量 デフォルトの256。Cache full countしまくってるのでもっと 大きくしていいのでは System Cache Entries キャッシュできてい るファイル 参照される頻度の高いphp が検索しても出てこない © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
特に改良の余地が見られなかったハード面 ・プログラム言語・FWのバージョンアップ →工数が膨大なため断念。しかしいずれはやらね ばならないことのため、導入に関しての準備・工 数調査までを行った。 8 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 継ぎ足し継ぎ足しで使い続けた秘伝のソース、 「ここは未開の領域のはず」 →プロダクトコードのボトルネックを調査、 改修を中心に対応を進めた。 9 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
プロダクトコードのボトルネック撲滅 キャッシュ最適化 結果:△~○ ・データの寿命に合わせた適切な保持期間で ・「キャッシュすれば早くなるだろう」と安易に 実装されていたものなどをヒット率を考慮し改修 通信データを圧縮 結果:○ ・API通信のgzip圧縮等でデータ通信を高速化 ・CPU負荷は増加するのでバランスを 並列処理化 結果:△~◎ ・順番不問の処理はできるだけ並列で同時に 10 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 無駄なデータのダイエット 結果:○ ・使わない情報を丸ごと取ってくる処理に適切な 絞込みを行う。(駅マスタ、APIの返り値等) 遅延読み込み(ajax、lazyload) 結果:△ ・初期表示に支障がなければ一つの手 ・クローラーには認識されなくなるなどのリスク 踏まえる 不要機能の削除 結果:◎ ・表示速度に影響のある機能を思い切って切る ・本当に不要だったか?の検証は必要 11 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 カテゴリ PJ 効果 不要機能削除 物件詳細「最近見た」を除去 大 並列処理化 indiv並列処理 大 通信データ圧縮 マスタデータgzip圧縮 大 キャッシュ最適化 キャッシュ構成の見直しと使用メモリ削減 中 備考 全ページに効果あり マスタ系を県・物件種 別単位で適切にキャッ シュ。メモリ消費の削 減も効果的だった。 Code/Item code:bukkenInfoFilterOemキャッ 中 シュ化 データダイエット nextraAPI field_set無駄削減 中 キャッシュ最適化 遅延読み込み 「他の取扱い物件」「間取ランキング」ajax化 中 キャッシュ最適化 css/js minifileキャッシュバスター 小 データダイエット 画像SVG化ロゴ画像軽量(SVG) 小 並列処理化 list /individual/系並列処 小 遅延読み込み 画像遅延読み込み 小 通信データ圧縮 op→image ほぼ無 元のボトルネックが小 さい 3G環境では一部悪化 ドメインを散らすがう まくいかず 大:100msec~ 中:50msec程度 小:~数10msec 12 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
使ったツールなど 13 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 • GoogleAnalytics 母数が最も多く、信頼性の高い情報が得られる • Dynatrace サイトに定期アクセスしデータ蓄積(競合比較) • 自作速度計測ライブラリの埋め込み 各functionごとのボトルネック調査。 • chromeデベロッパーツール 手軽にざっくりパフォーマンス計測 • zipkin 分散トレースシステム。APIのボトルネック調査 14 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 • GoogleAnalytics 速度指標に利用。 「サーバ平均応答時間」「平均ドキュメント コンテンツ読 み込み時間」「平均読み込み時間」 のウォッチ。ユーザ体験として特に平均ドキュメント コン テンツ読み込み時間を注視 • Dynatrace 競合比較に利用 自社・競合サイトの同機能ページ (物件一覧など)に対して 定期アクセスし、速度データを取得。 15 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 • 自作速度計測ライブラリの埋め込み 16 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
やりたかったこと (やれなかったこと) 17 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 やりたかったこと(やれなかったこと) ■HTTP/2化 同時リクエスト数を増やせ、大量に存在する外 部タグの呼び出しなどを効率化 →サイト全体をhttps化する必要があり、網羅的な 改修が必要だったため見送り ■PHPバージョンアップ(5.4→7) 処理速度の向上 →既存コードのライブラリなどが導入の障壁に。 18 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
サイト高速化 新技術導入での解決を図っても、 大抵結局は地道な対応が必要に。 腹を決めて取り掛かる。 19 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
おわり