More Related Content
Similar to 第2回Web技術勉強会 webパフォーマンス改善編
Similar to 第2回Web技術勉強会 webパフォーマンス改善編 (20)
More from tzm_freedom (11)
第2回Web技術勉強会 webパフォーマンス改善編
- 3. • Webサーバのパフォーマンス改善
• 基本的なHTMLの評価順序
• TCP Connection
• Keep-Alive
• CDN(RTT/キャッシュ)
• ブラウザのキャッシュ
• ドメインシャーディング
• 圧縮
• gzip
• minify/concat
• 非同期処理
• キューイング
• DBのパフォーマンス改善
• Index
• バッファキャッシュ
• NoSQL
アジェンダ
- 5. Keep-Alive
• TCP 3way handshakeは時間のオーバーヘッドがあり効率的ではない
→TCP 3way handshakeを省略したい
• Keep-Aliveは一つのTCP接続を使い回す仕組み
→HTTPヘッダにConnection: Keep-Aliveを指定することでWebブラウザ側がTCP接続を使いま
わしてくれる
• HerokuはデフォルトでKeep-Aliveしてくれるっぽい(ブラウザ – Heroku Router間?)
HTTPリクエスト(HTMLくださーい)
HTTPレスポンス(HTML渡しまーす)
SYN(これから通信するよー)
SYN/ACK(OKよろしくー)
ACK(じゃあ次のリクエストで送るよー)
リクエスト/レスポンスの前段で200ms
- 6. Keep-Alive
• オレンジ=>TCP 3way handshake
• 緑=>TTFB(Time To First Byte):HTTPリクエストからレスポンスのfirst byteまでの時間
• 青=>ダウンロード時間
• 灰色=>待機時間
• 紫=>TLS handshake
• 緑+青=>HTTPリクエスト~HTTPレスポンスを全て受け取るまでの時間
- 9. CDNによる改善
• Contents Delivery Network
→静的コンテンツを返すためのサーバ
• Akamai、Cloud Front(AWS)、cloud flare
• 負荷分散(静的コンテンツはCDN、動的コンテンツはアプリサーバ)
• クライアントから一番近いエッジサーバ(配信サーバ)からファイルを取得
→レイテンシ(RTT)の改善
• CDNが各リソース(静的ファイル)をキャッシュするので高速なレスポンスを実現
→アプリケーションサーバが静的ファイルを返すよりかは効率的
Client CDN Webサーバ
キャッシュ切れの時だけ
リクエスト
静的ファイル
リクエスト
レスポンス(CDNのキャッシュ)
- 17. DBパフォーマンス改善
• Indexを効かせるSQL(EXPLAINを見る)
• 効率的なSQL(INとかJOINを使って、できるだけまとめて取得する)
• O/Rマッパだと良くも悪くもSQLが隠蔽されてしまうのでパフォーマンスの悪い箇所はSQL文をデバッグして確かめる
• コネクションプール(TCP 3way handshakeと接続処理の省略)
• メモリ系のDB設定値の調整
• ファイルキャッシュ(メモリに載せよう)※後述
• メモリが足りなければスケールアップ(メモリ増設)を検討
• JOINでコストがかかるクエリは予めJOINさせる
• 全文検索はElasticSearch等の全文検索エンジンを使う
• 利用できればNoSQLと併用
• MemcachedやRedisなどのインメモリ系KVSはアプリキャッシュとして有用
• シャーディング/テーブル分割/非正規化
- 19. どうやってボトルネックを探すか?
• Chrome Developer Tool
• クライアントから見たパフォーマンス/挙動を確認可能
• HTTPのRTT、ファイルサイズ、TCP接続数
• NewRelic
• アプリに特定のコードを仕込むことでアプリケーションサイドのパフォーマンスを確認可能
• CPUを使いまくって遅い(画像処理等)のであれば非同期化
• I/O系が遅いのであれば…
• DB→SQLのチューニング or インメモリなNoSQLを使うとか
• Webサービス→非同期化
• 各RDBのEXPLAIN
• Indexが効くSQLに
• DBの設定
- 21. • ブラウザのキャッシュコントロールについて
http://qiita.com/hkusu/items/d40aa8a70bacd2015dfa
• Heroku Router
https://devcenter.heroku.com/articles/http-routing
• 書籍
• ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
• SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)
• 内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)
• ウェブパフォーマンスの基礎とこれから
http://www.slideshare.net/kawada_hiroshi/ss-46149727
• HTTP/2
http://www.slideshare.net/kazuho/http2-51888328
http://www.slideshare.net/asumaslv/http2-57141644
• ファイルキャッシュ
http://d.hatena.ne.jp/naoya/20070521/1179754203
• コネクションプール
http://blog.yuuk.io/entry/architecture-of-database-connection
参考URL