Submit Search
第2回Web技術勉強会 webパフォーマンス改善編
1 like
1,259 views
T
tzm_freedom
社内勉強会の資料。
Technology
Read more
1 of 21
Download now
Downloaded 23 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
More Related Content
PDF
Mavenの真実とウソ
Yoshitaka Kawashima
PDF
Kuberneteの運用を支えるGitOps
shunki fujiwara
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
PPTX
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
Kentaro Ebisawa
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
PDF
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
Yuya Rin
PDF
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
Yahoo!デベロッパーネットワーク
PDF
大規模サービスを支えるネットワークインフラの全貌
LINE Corporation
Mavenの真実とウソ
Yoshitaka Kawashima
Kuberneteの運用を支えるGitOps
shunki fujiwara
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
Kentaro Ebisawa
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
Yuya Rin
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
Yahoo!デベロッパーネットワーク
大規模サービスを支えるネットワークインフラの全貌
LINE Corporation
What's hot
(20)
PDF
UnboundとNSDの紹介 BIND9との比較編
hdais
PDF
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
ippei_suzuki
PDF
[GKE & Spanner 勉強会] GKE 入門
Google Cloud Platform - Japan
PDF
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
PDF
BGP Unnumbered で遊んでみた
akira6592
PDF
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Tomoya Hibi
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
PDF
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
whywaita
PDF
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
whywaita
PDF
そろそろレガシーな.Net開発をやめなイカ?
Yuta Matsumura
PDF
"SRv6の現状と展望" ENOG53@上越
Kentaro Ebisawa
PPTX
「おうちクラウド」が今熱い!
Hirotaka Sato
PDF
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Yahoo!デベロッパーネットワーク
PPTX
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.
PPTX
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Masaki Yamamoto
PDF
さくらのVPS で IPv4 over IPv6ルータの構築
Tomocha Potter
PPTX
自宅k8s/vSphere入門
富士通クラウドテクノロジーズ株式会社
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
PDF
ネットワークでなぜ遅延が生じるのか
Jun Kato
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
UnboundとNSDの紹介 BIND9との比較編
hdais
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
ippei_suzuki
[GKE & Spanner 勉強会] GKE 入門
Google Cloud Platform - Japan
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
BGP Unnumbered で遊んでみた
akira6592
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Tomoya Hibi
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
whywaita
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
whywaita
そろそろレガシーな.Net開発をやめなイカ?
Yuta Matsumura
"SRv6の現状と展望" ENOG53@上越
Kentaro Ebisawa
「おうちクラウド」が今熱い!
Hirotaka Sato
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Yahoo!デベロッパーネットワーク
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Masaki Yamamoto
さくらのVPS で IPv4 over IPv6ルータの構築
Tomocha Potter
自宅k8s/vSphere入門
富士通クラウドテクノロジーズ株式会社
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
ネットワークでなぜ遅延が生じるのか
Jun Kato
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Ad
Viewers also liked
(10)
PDF
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
PDF
セキュリティ勉強会 暗号技術入門 1章
Naoko Suzuki
PPTX
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
yoshimotot
PDF
第3回web技術勉強会 暗号技術編その1
tzm_freedom
PDF
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
Kenji Urushima
PDF
第4回web技術勉強会 暗号技術編その2
tzm_freedom
PDF
第5回web技術勉強会 暗号技術編その3
tzm_freedom
PPTX
Analytics CloudとEmbulkを使った社会的データの分析
tzm_freedom
PDF
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Kenji Urushima
PDF
introduction to jsrsasign
Kenji Urushima
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
セキュリティ勉強会 暗号技術入門 1章
Naoko Suzuki
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
yoshimotot
第3回web技術勉強会 暗号技術編その1
tzm_freedom
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
Kenji Urushima
第4回web技術勉強会 暗号技術編その2
tzm_freedom
第5回web技術勉強会 暗号技術編その3
tzm_freedom
Analytics CloudとEmbulkを使った社会的データの分析
tzm_freedom
Certificate TransparencyによるSSLサーバー証明書公開監査情報とその課題の議論
Kenji Urushima
introduction to jsrsasign
Kenji Urushima
Ad
Similar to 第2回Web技術勉強会 webパフォーマンス改善編
(17)
KEY
Tuiningathonにいってみた
Suguru Shirai
PPTX
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
PDF
WTM52 あなたの作ったWEBサイト、生きてますか?
Masanori Oobayashi
PPT
2013/2/15 gooya社内ディスカッション「早いサイト」石川チーム資料
gooya
PPTX
今だから!Amazon CloudFront 徹底活用
Yasuhiro Araki, Ph.D
PDF
高速化はじめの一歩
Yuki Nakane
PDF
WordBench Saitama vol.6
masaaki komori
PDF
Aws summits2014 amazon_cloudfrontを利用したサイト高速化とセキュア配信
Boss4434
PDF
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
tama200x Kobayashi
PPTX
サーバーの初歩的な話セミナー@大阪20120901
Masayuki Abe
PDF
20191204_WordPressの教科書出版記念イベント_パフォーマンスチューニングとセキュリティ_小川
Tomoya Hokari
PPT
Yahoo!検索のパフォーマンス向上策全て見せます
Yahoo!デベロッパーネットワーク
PDF
スタートアップ向け!1人日でできるサービスの高速化方法と成果
Koichiro Sumi
KEY
PHP-Ninjaの裏側
Takayuki Miyauchi
PDF
WordCamp Yokohama 2010 Komori
masaaki komori
PDF
通信と放送の融合を考えるBoF 5
Masaaki Nabeshima
PDF
Node.js で SPDYのベンチマーク体験サイトを作りました
shigeki_ohtsu
Tuiningathonにいってみた
Suguru Shirai
AWSとmod_pagespeedで楽々サクサク高速化!!
aasakawa
WTM52 あなたの作ったWEBサイト、生きてますか?
Masanori Oobayashi
2013/2/15 gooya社内ディスカッション「早いサイト」石川チーム資料
gooya
今だから!Amazon CloudFront 徹底活用
Yasuhiro Araki, Ph.D
高速化はじめの一歩
Yuki Nakane
WordBench Saitama vol.6
masaaki komori
Aws summits2014 amazon_cloudfrontを利用したサイト高速化とセキュア配信
Boss4434
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
tama200x Kobayashi
サーバーの初歩的な話セミナー@大阪20120901
Masayuki Abe
20191204_WordPressの教科書出版記念イベント_パフォーマンスチューニングとセキュリティ_小川
Tomoya Hokari
Yahoo!検索のパフォーマンス向上策全て見せます
Yahoo!デベロッパーネットワーク
スタートアップ向け!1人日でできるサービスの高速化方法と成果
Koichiro Sumi
PHP-Ninjaの裏側
Takayuki Miyauchi
WordCamp Yokohama 2010 Komori
masaaki komori
通信と放送の融合を考えるBoF 5
Masaaki Nabeshima
Node.js で SPDYのベンチマーク体験サイトを作りました
shigeki_ohtsu
More from tzm_freedom
(11)
PDF
Apex on Local - Better Alternative to Salesforce DX
tzm_freedom
PDF
Land
tzm_freedom
PDF
C初心者がbyebugにPR出した話
tzm_freedom
PDF
APIテストあれこれ
tzm_freedom
PDF
第一回Web技術勉強会 efkスタック編
tzm_freedom
PDF
第三回IoT関連技術勉強会 データ通信編
tzm_freedom
PDF
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
PDF
第一回IoT関連技術勉強会 分散処理編
tzm_freedom
PDF
ElectronでExactTargetのGUIツールを作ってみた話
tzm_freedom
PDF
ApexからAWS IoT叩いてみた話
tzm_freedom
PDF
Dreamforce '15のお話
tzm_freedom
Apex on Local - Better Alternative to Salesforce DX
tzm_freedom
Land
tzm_freedom
C初心者がbyebugにPR出した話
tzm_freedom
APIテストあれこれ
tzm_freedom
第一回Web技術勉強会 efkスタック編
tzm_freedom
第三回IoT関連技術勉強会 データ通信編
tzm_freedom
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
第一回IoT関連技術勉強会 分散処理編
tzm_freedom
ElectronでExactTargetのGUIツールを作ってみた話
tzm_freedom
ApexからAWS IoT叩いてみた話
tzm_freedom
Dreamforce '15のお話
tzm_freedom
第2回Web技術勉強会 webパフォーマンス改善編
1.
Web技術勉強会 Webパフォーマンス改善編 田実 誠
2.
今回は一般的かつ超絶基本的なWeb/DBサーバ のパフォーマンスチューニングに関するお話をします。 ※C10Kとかマルチスレッドとかの話はしません
3.
• Webサーバのパフォーマンス改善 • 基本的なHTMLの評価順序 •
TCP Connection • Keep-Alive • CDN(RTT/キャッシュ) • ブラウザのキャッシュ • ドメインシャーディング • 圧縮 • gzip • minify/concat • 非同期処理 • キューイング • DBのパフォーマンス改善 • Index • バッファキャッシュ • NoSQL アジェンダ
4.
基本的なHTMLの評価順序 • ドキュメント(HTML)のロード • DNS、TCP
3way、TLS、TCP • HTMLのレンダリング • JS, CSS, 画像ファイルのダウンロード • DNS、TCP 3way、TLS、TCP • JSの評価
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レスポンスを全て受け取るまでの時間
7.
Keep-Alive 2回目以降はTCP接続を使い回すようになっている
8.
ちなみにTLSありだと… • TLS/SSLハンドシェイク分のオーバーヘッドがかかるが、こちらも使い回しの概念が有る
9.
CDNによる改善 • Contents Delivery
Network →静的コンテンツを返すためのサーバ • Akamai、Cloud Front(AWS)、cloud flare • 負荷分散(静的コンテンツはCDN、動的コンテンツはアプリサーバ) • クライアントから一番近いエッジサーバ(配信サーバ)からファイルを取得 →レイテンシ(RTT)の改善 • CDNが各リソース(静的ファイル)をキャッシュするので高速なレスポンスを実現 →アプリケーションサーバが静的ファイルを返すよりかは効率的 Client CDN Webサーバ キャッシュ切れの時だけ リクエスト 静的ファイル リクエスト レスポンス(CDNのキャッシュ)
10.
CDNのエッジサーバに対するアクセス 出典:http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-cloudfront
11.
ブラウザキャッシュによる改善 • HTTPのキャッシュ機構を利用して、ブラウザ自体にHTTPレスポンスをキャッシュし、レスポンスを使い 回す→これを使って静的ファイルのロード短縮が可能 • Cache-Control、Expiresヘッダを使ってブラウザにキャッシュの有効期限を伝達 キャッシュを利用しているので Heavy.js(1.7MB)のロード時間が短縮される
12.
ドメインシャーディングによる改善 • ブラウザの同一ドメインに対するHTTP同時接続数は6つまで • ドメインを分けてリクエストすればMAX同時接続数をドメイン数×6まで伸ばせる 同時!
13.
圧縮(gzip) 圧縮前 圧縮後(1.7MB=>12.3KBに圧縮)
14.
圧縮(minify/concat) • JavaScriptのソースコードをminifyすることでファイルを小さくできる →構文上削除しても問題ない改行や空白の削除、変数名を短くしたり • 複数のJavaScriptを読みこませる場合は、読み込ませる順番にJavaScriptを連結すればクライア ント側は一つのJavaScriptをダウンロードすれば良いのでTCP接続としては効率的 •
webpackは画像ファイルもBase64形式でJSファイルに取り込む • AngularのminifyタスクではテンプレートのHTMLファイルでさえJSファイルにする。そのHTML ファイルの内容も改行等の無駄な文字列を削除したり… • CSSスプライトもTCP接続数削減の一つ
15.
重い処理は非同期に • 画像処理等の重い処理は非同期にして他のサーバ(ワーカ)に処理を回す • Herokuでは1リクエスト30秒ルールがあるので、重い処理はワーカー等を使った非同期処理に回す ※Herokuに限らず同期処理で30秒待たされるのはUX的にNGな感じだと思うので一般的な話とし て… •
SQS(AWS)、RabbitMQ(AMQP)、Redis(Resqueとか併用して) workerQueue Enqueue Dequeue Client
16.
HTTP/2 • TCP接続の多重化(一つのTCP接続で複数のリクエストを同時に実行できる) →アセットの結合がいらなくなる? • バイナリープロトコル(HTTP/1.1はテキストプロトコル) •
ヘッダ圧縮 • 優先度制御 • サーバプッシュ リクエスト1 レスポンス1 リクエスト2 リクエスト2 リクエスト3 リクエスト3
17.
DBパフォーマンス改善 • Indexを効かせるSQL(EXPLAINを見る) • 効率的なSQL(INとかJOINを使って、できるだけまとめて取得する) •
O/Rマッパだと良くも悪くもSQLが隠蔽されてしまうのでパフォーマンスの悪い箇所はSQL文をデバッグして確かめる • コネクションプール(TCP 3way handshakeと接続処理の省略) • メモリ系のDB設定値の調整 • ファイルキャッシュ(メモリに載せよう)※後述 • メモリが足りなければスケールアップ(メモリ増設)を検討 • JOINでコストがかかるクエリは予めJOINさせる • 全文検索はElasticSearch等の全文検索エンジンを使う • 利用できればNoSQLと併用 • MemcachedやRedisなどのインメモリ系KVSはアプリキャッシュとして有用 • シャーディング/テーブル分割/非正規化
18.
Linuxファイルキャッシュ(ページキャッシュ) • Linuxには開いたファイルの内容を自動的にキャッシュする機構がある • RDBのレコード読み込みも結局のところファイル読み込みなので、DBのファイルがメモリに乗ればインメモリDBっぽ く処理される(とはいえNoSQLのインメモリDBは色々と最適化されているので性能差は大きい) SELECT
* FROM performance_test WHERE int_field = 10000000; ページキャッシュ HDD SSD × 27674.021 ms 13330.887 ms ○ 4516.920 ms 4642.373 ms メモリに載ってしまえば、ディ スクは関係ない クエリによるが3~4倍くらいの差 HDDとSSDの速度差は 2倍くらい?
19.
どうやってボトルネックを探すか? • Chrome Developer
Tool • クライアントから見たパフォーマンス/挙動を確認可能 • HTTPのRTT、ファイルサイズ、TCP接続数 • NewRelic • アプリに特定のコードを仕込むことでアプリケーションサイドのパフォーマンスを確認可能 • CPUを使いまくって遅い(画像処理等)のであれば非同期化 • I/O系が遅いのであれば… • DB→SQLのチューニング or インメモリなNoSQLを使うとか • Webサービス→非同期化 • 各RDBのEXPLAIN • Indexが効くSQLに • DBの設定
20.
• RTTの壁は超えれないので何とか工夫する • TCP接続の特性を理解して正しいチューニングをしましょう •
Keep-alive • ドメインシャーディング • CDN • キャッシュ • 圧縮(gzip, minify) • 重い処理は非同期で。ワーカーに回して負荷分散。 • HTTP/2が色々と解決してくれるかも • DBは基本的なSQLのチューニングとインメモリKVSによるアプリキャッシュ等で工夫する まとめ
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
Download