Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DrupalとWEB高速化 CDNについて

281 views

Published on

内部キャッシュと外部キャッシュ

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

DrupalとWEB高速化 CDNについて

  1. 1. Drupalと“WEB高速化“ 内部キャッシュと外部キャッシュ
  2. 2. 2 ABOUTME Job : 小さな “CDN会社” レッドボックス ※取り扱いトラフィックは約50Gbps前後(2017年時点) Name: 小川 かつひさ (KATSUHISA OGAWA) Like : キャッシュ・負荷分散・WEB高速化 https://www.facebook.com/ogawaka WEB高速化ブログ Past : いんふら屋さん サーバーやスイッチを設定したり色々やってるアレ http://blog.redbox.ne.jp
  3. 3. 3 WEB表示スピードが世界を変える レスポンスタイムが WEBサイトにあたえる影響 というお話をご存じでしょうか?
  4. 4. 4 WEB表示スピードが世界を変える Amazonのような巨大なサイトの場合、 1秒遅いことが年間約16億ドルの機会損失になる。 つまり、たった1秒の差で 16億ドル以上の利益を生み出すということにもなります。 1秒 16億ドル = 読み込み速度が1秒遅くなる ↓ ページビューは11%減少 顧客満足度は16%下がる ↓ コンバージョン率は7%減少する =
  5. 5. 5 WEB表示スピードが世界を変える 伝説のプログラマーが 素晴らしいコードで作成したシステム カリスマデザイナーが 神秘的で斬新に描いたイラスト 表示速度が遅ければ価値が低下する。
  6. 6. 6 Drupal×WEB高速化 DrupalはWEB高速化フレンドリー ホスト名に依存しない マルチドメインで運用する場合、Root/Sites/以下にドメイン名 と同一フォルダを作成し、THEME等を配置するだけ。 ※所謂DBにドメイン名が書き込まれない。 (D7/8共通) キャッシュしやすいヘッダが出力される Drupal標準のキャッシュ機能をONにするだけで、 Cache-Control Max-age xxヘッダが出力される。 D8はPurge・Generic HTTP Purgerを導入すると キャッシュTAGを出力してくれる。 Coreにキャッシュ機能が付属 Drupal Coreにキャッシュする仕組みが実装されている。 D8はOPCACHEが組み込まれている。
  7. 7. 7 キャッシュが世界をかえるかもしれない キャッシュ技術をつかって WEBを高速化するお話。
  8. 8. 8 Drupal×WEB高速化 キャッシュの種類は主に3つ 内部キャッシュ(インサイド) Drupalがホストされているサーバー内でキャッシュ 外部キャッシュ(アウトサイド) Drupalがホストされているサーバー以外でキャッシュする 外部キャッシュ(ユーザーサイド) ユーザーのブラウザキャッシュなど { { } } { }
  9. 9. 9 Drupal×WEB高速化 Drupalの内部キャッシュ D7 Coreの内部キャッシュ Drupal7 認証ユーザーのキャッシュ制御がNG。 ※別途Authcacheモジュールを入れることによって補填可能。 D8 Coreの内部キャッシュ Dynamic Page CacheモジュールをONにするだけでOK! ユーザー識別はCache contextsというもので識別している。 https://www.drupal.org/docs/8/api/cache-api/cache-contexts 判定順位 cookies headers ip languages request_format session theme timezone url user
  10. 10. 10 Drupal×WEB高速化 その他のキャッシュ OPcache Coreの内部キャッシュを利用できないコンテンツを 高速化する場合はOPcacheが有効 これだけでも、まあまあ早くなります。 ブラウザキャッシュ 適切なCacheContolヘッダを付与しユーザーサイドの ブラウザキャッシュをきかせる。
  11. 11. 11 Drupal×WEB高速化 ある一定のアクセスがあるサイトの場合 内部キャッシュだけでは限界がくる。 DBやサーバー・回線の負荷が どんどん上昇していきます! だいたい、5000req /sec ~ 10000req /sec ぐらい
  12. 12. 12 そこで外部キャッシュの出番 外部キャッシュサービス = CDN (Content Delivery Network)
  13. 13. CDNサービスの概要 13 最適な経路選定 初回コンテンツ取得 2回目リクエスト オリジンへアクセスしない 最適な経路選定 キャッシュ削除 キャッシュ前 キャッシュ後 CDN(エッジサーバー)にコンテンツをコピーし 次回以降エンドユーザーに高速に配信。 初回リクエスト
  14. 14. 14 外部キャッシュ(CDN)のメリット 外部キャッシュはメリットがいっぱい!  ファイル別にキャッシュ時間を指定  キャッシュさせる・させないコンテンツの指定  個別にキャッシュ削除が可能  トラフィック負荷軽減  サーバー自体の負荷軽減  機能の分離化が可能
  15. 15. 15 外部キャッシュ(CDN)のデメリット 登録や設定が一手間かかる パージする仕組みを考える必要がある キャッシュルールを明確にする 外部キャッシュの場合、CDNベンダが提供しているAPIとの連携が必須。 ※内部キャッシュの場合、モジュールなどで連携がしやすい。 外部CDNベンダーとの契約、登録、設定など ある程度自分で頑張らないといけない。 外部CDNサービスはDrupalの何をキャッシュすべきで、 逆に何をキャッシュしてはいけないのかわからない。 そのため、ルールを明確に決めないといけない。
  16. 16. 16 外部キャッシュ(CDN)の注意点 以前: 静的コンテンツを配信 = CDN 現在: 動的コンテンツも配信 = CDN CDNが情報漏洩につながる危険
  17. 17. 17 外部キャッシュ(CDN)の注意点 外部CDNベンダの仕様を把握しておく • CDNベンダの仕様は様々(最低限RFCには準拠はしている) • キャッシュキーとなる内容(URL、Cookie、クエリ、メソッド等) • キャッシュしない命令ヘッダや設定の確認(一番重要かも?) 以下のレスポンスヘッダいずれかが付与されている場合 キャッシュしないパターン(弊社の場合) Cache-Control: max-age=0 Cache-Control: no-store Cache-Control: no-cache Cache-Control: private Pragma: no-cache その他: 基本認証が設定されたコンテンツ ダイジェスト認証が設定されたコンテンツ GET/HEAD以外のメソッド
  18. 18. 18 外部キャッシュ(CDN)DRUPALの場合 Drupalでキャッシュさせないパス一覧 ^/status.php$ ^/update.php ^/install.php ^/apc.php$ ^/admin ^/admin/.*$ ^/system/files/.*$ ^/user ^/user/.*$ ^/users/.*$ ^/info/.*$ ^/flag/.*$ ^.*/ajax/.*$ ^.*/ahah/.*$ サンプル(正規表現) 課金関係のモジュールが利用しているパス カート関連のモジュールのパス ソーシャルログイン関連のパス その他キャッシュさせない項目
  19. 19. 19 次は、がっつりキャッシュさせる
  20. 20. 20 最大限キャッシュさせる・キャッシュ順序 キャッシュ時間の優先順位を確認 キャッシュ時間の順序(弊社の場合) Cache-Control max-ageがある場合 max-ageの期間 Cache-Controlヘッダがない場合 デフォルトTTL(24H) Cache-Control max-age Cache-Control s-maxageの両方がある場合 s-maxageの期間 (ブラウザキャッシュとしてはmax-ageの期間) Expiresを付与している場合 Expiresが未来の場合、その期日まで Expiresが過去の場合デフォルトTTLが適用
  21. 21. 21 最大限キャッシュさせる・キャッシュグループ化 キャッシュグループ化 ユーザーエージェントのパターンは数百種類以上ある。 一般的なCDNは、Vary User-Agentヘッダをみてキャッシュしてしまい ヒット率が低下する原因の一つ。 そこで、ユーザーエージェント毎にキャッシュをグループ化する。 Future Phone Smart Phone Other キャッシュグループユーザーエージェント AU Softbank DoCoMo iphone android その他 (PCブラウザなど) >
  22. 22. 22 最大限キャッシュさせる・正規化チューニング クエリストリングのソート リクエストにクエリストリングが付与されている場合、 動的ソートしキャッシュヒット率を大幅に向上させる。 http://domainname.com/?cid=123&uid=123&user=000 http://domainname.com/?user=000&uid=123&cid=123 http://domainname.com/?uid=123&cid=123&user=000 異なる3つのURL 同一 キャッシュ 順番が入れ替わるようなクエリが付与される場合、 参照プログラムもそれを考慮しているため問題とならない。 不要なCookieの削除 リクエストに不要なCookieが付与されている場合、 CDN側で自動的に削除する。(GAなど削除OKなものに限る) UID=user1 CID=temp counter=0010 UID=user1 CID=temp counter=0010 Non Cookie キャッシュ
  23. 23. 最大限キャッシュさせる・クエリーチューニング 23 動的コンテンツ対応(Query String) 特定の区切り文字から開始されるパラメーターを除外してキャッシュする。 動的にURLが変更となるようなコンテンツであっても、可能な限りキャッシュ することが可能。 http://www.domainname.com/?cid=200&user=1&count=11 クエリカスタマイズの例 cid及びcountから始まる連番は動的に変化するため、 これらの値は取り除いてキャッシュする。 http://www.domainname.com/?cid=200&user=1&count=11 http://www.domainname.com/?cid=300&user=1&count=22 結果、異なるURLであっても同じコンテンツとして扱われ、 オリジンサーバーの負荷が軽減されます。 異なる2つのURL >
  24. 24. 24 最大限キャッシュさせる・Cookieチューニング 動的コンテンツ対応(Cookie) 特定の文字列を取り除いたり、認証情報のみ保持することによって HIT率を高める事が出来る。 UID=user1 CID=temp counter=0010 Cookieカスタマイズの例 結果、異なるCookieの値が付与されていても、効率よくキャッ シュすることができ、オリジンサーバーの負荷が軽減されます。 除外処理 UID=user1 CID=temp counter=0010>
  25. 25. 25 最大限キャッシュさせる・認証情報のグループ化 Drupalの認証ユーザー向けキャッシュ Cookieに付与されるセッション情報を取り出す (S{1,2}ESS[a-z0-9]+|NO_CACHE)=", "; 1=") CDN側でセッション情報入りのCookieをキャッシュキーにすることにより、 認証ユーザー毎にキャッシュ可能 BigPipe対策( Drupal8 ) (S{1,2}ESS[a-z0-9]+|NO_CACHE|big_pipe_nojs)
  26. 26. 26 正直、CDNの設定は大変です。 なので、面倒な設定を詰め込んだ CDNサービスを作ってみた。
  27. 27. Rapid START CDNサービス 27 無料で開始 プリセットを用意 マルチプラットフォーム https://cdn.tokyo ※Drupalとエッジサーバーを連携させて開発 「CDN 無料」で検索
  28. 28. Rapid START CDNサービス 28 Rapid STARTの特徴  無料でSTART  DNSを変更するだけでOK  1秒以下の高速キャッシュ削除  DrupalをCDN化するプリセット(7月)  SSL(HTTP/2)配信も可能(7月初旬)  タグベースのパージAPIも提供(する予定)  オリジンサーバーへHOSTヘッダを透過 アクティブドメイン = 113個
  29. 29. まとめ 29 Drupalは他のCMSと比べキャッシュフレンドリーである。 キャッシュの仕組みを十分把握しインシデント防止。 WEBサイトのキャッシュ化は規模に依存しない。 フロントはがっつり、バックエンドは普通がトレンド。 CDNを利用することで、シンプルな構造化が可能。 CDNをもっと身近に
  30. 30. THANK YOU!

×