Upgrade to Pro — share decks privately, control downloads, hide ads and more …

全世界から爆速で使えるTypetalkを目指して-キャッシュしないCDNによるAPI高速化 /...

全世界から爆速で使えるTypetalkを目指して-キャッシュしないCDNによるAPI高速化 / typetalk-api-acceleration-with-non-cache-cdn/

2018年11月22日に福岡で開催された「Geeks Who Drink -自社プロダクト運用 Edition-」にて、Typetalk インフラエンジニアの二橋(@futahashi)が、TypetalkでキャッシュしないCDNを用いたAPI高速化技術について発表しました。

Geeks Who Drink -自社プロダクト運用 Edition-
https://nulab.connpass.com/event/105113/

株式会社ヌーラボ

November 28, 2018
Tweet

More Decks by 株式会社ヌーラボ

Other Decks in Technology

Transcript

  1. 自己紹介 自己紹介 ・名前 ・名前: 二橋 二橋 宣友 宣友 (@futahashi) ・

    ・Typetalkのインフラエンジニア のインフラエンジニア ・趣味 ・趣味 ・運動 ・運動 卓球 卓球/ダーツ ダーツ/ランニングなど ランニングなど (部活動制度 部活動制度/手当あり 手当あり) ・資格 ・資格 (技術書毎月 技術書毎月1冊手当あり 冊手当あり)
  2. 話す内容 話す内容 1. Typetalkについて について 2. [ 本題 本題 ]キャッシュしない

    キャッシュしない CDN による による API 高速化 高速化 ・ ・Typetalkが抱えていた課題 が抱えていた課題 ・ ・CDNについて について ・キャッシュしない ・キャッシュしないCDNの特徴 の特徴 ・キャッシュしない ・キャッシュしないCDNの注意点 の注意点 ・導入方法の例 ・導入方法の例 3. 今後改善したいこと 今後改善したいこと AWSありきの内容になってますが ありきの内容になってますが ご了承下さいワン ご了承下さいワン
  3. CDNとは? とは? オリジン オリジン(Webサーバ サーバ) ユーザ ユーザ CDN ・CDN =

    Content Delivery Network の略 ・Webコンテンツを多くのユーザに効率良く配信するネットワークの仕組み ・ユーザはCDN経由でWebコンテンツを取得 ・CDNはオリジンからコンテンツを取得してキャッシュ ・ユーザを最も近いCDNのエッジに誘導 ・静的ファイル(動画/画像/CSSなど)の配信に適している
  4. キャッシュしない キャッシュしないCDNの特徴 の特徴 ・ ・APIなど動的な部分に対して適用できる。 など動的な部分に対して適用できる。 ・幅広いWebサービスに利用できる。 ・既存のインフラへの影響が少ない。 ・既存のインフラへの影響が少ない。 ・基本的に追加する形で適用する。

    ・高品質なネットワークを展開できる。 ・高品質なネットワークを展開できる。 ・場所(国/地域)に依存しない。 ・経路障害や遅延が起きにくくなる。 ・ ・CDNプロバイダの保護機能が使える。 プロバイダの保護機能が使える。 ・DDoS攻撃の防御 (AWS Shield) ・アクセス制御 (AWS WAF) ・無料の証明書 (AWS ACM) 汎用的に使えて、簡単に導入できて、 汎用的に使えて、簡単に導入できて、 高品質な 高品質なNWを利用できるワン を利用できるワン
  5. キャッシュしない キャッシュしないCDNの速さの秘訣 の速さの秘訣 (1) CloudFront Latency Based Routing => レイテンシの低いエッジへ誘導

    (2) TCP/IP Optimizations for the Network Path => 最適なネットワーク経路選択 (3) Keep-Alive Connections to reduce RTT => RTT削減のためのKeep-Alive処理 (4) AWS Backbone Network => 強力なAWSバックボーンネットワーク (5) SSL/TLS Optimizations => SSLの暗号化に必要な重い接続処理の回数を削減 CloudFront半端ない 半端ない
  6. 導入方法の例 導入方法の例 (①キャッシュ設定 キャッシュ設定) 全部オリジンに転送して、 全部オリジンに転送して、 キャッシュはしないように設定すれば キャッシュはしないように設定すればOK AWS CloudFrontの設定例

    の設定例 注意 注意 AWS公式の最新ドキュメントを 公式の最新ドキュメントを 参照して設定して下さい。 参照して設定して下さい。 検証時は複数ユーザを用いて 検証時は複数ユーザを用いて 動作検証して下さい。 動作検証して下さい。
  7. 導入方法の例 導入方法の例 (②Websocket対応 対応) message.typetalk.com typetalk.com CDN導入後 導入後 CDN導入前 導入前

    typetalk.com アプリサーバ (EC2) CloudFront ALB Nginx (EC2) アプリサーバ (EC2) Nginx (EC2) Websocketは は CloudFront経由させない 経由させない
  8. 導入方法の例 導入方法の例 (②Websocket対応 対応) message.typetalk.com typetalk.com CDN導入後 導入後 CDN導入前 導入前

    typetalk.com アプリサーバ (EC2) CloudFront ALB Nginx (EC2) アプリサーバ (EC2) Nginx (EC2) Websocketは は CloudFront経由させない 経由させない でしたが
  9. Happy NEWS!! ・昨日、 ・昨日、CloudFrontが がWebsocket対応しました!! 対応しました!! ・追加の設定等は特に不要らしいです。 ・追加の設定等は特に不要らしいです。 ・制限事項はよく確認したほうが良さそうです。 ・制限事項はよく確認したほうが良さそうです。

    ・ ・Websocketも もCloudFrontの制限事項に依存 の制限事項に依存 ・ ・10分間のアイドルタイムアウト 分間のアイドルタイムアウト (参考)Websocket対応アナウンス https://aws.amazon.com/jp/about-aws/whats-new/2018/11/amazon-cloudfront-announces-support-for-the-websocket- protocol/ (参考)CloudFront制限事項 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html CloudFront半端ない 半端ない
  10. 導入方法の例 導入方法の例 (③L4影響対応 影響対応) real_ip_header X-Forwarded-For; real_ip_recursive on; # Trust

    ALB set_real_ip_from [VPCのIP] # Trust CloudFront set_real_ip_from [CloudFrontのエッジのIP1] set_real_ip_from [CloudFrontのエッジのIP2] ... AWS EC2の のNginxの設定例 の設定例 ★ポイント ポイント ・ ・X-Forwarded-Forヘッダを使う。 ヘッダを使う。 ・ ・ALB/CloudFrontのエッジ のエッジIPを信頼で を信頼で きるプロキシとして登録する。 きるプロキシとして登録する。 X-Forwarded-For: [クライアントIP], [プロキシIP1], [プロキシIP2] (参考)X-Forwarded-Forヘッダのフォーマット 注意 注意 CloudFrontのエッジ のエッジIPは時々変わるので、変更を追従する必要があ は時々変わるので、変更を追従する必要があ る。 る。 (対処方法の一例は次のページ 対処方法の一例は次のページ)
  11. さいごに さいごに ・ ・Typetalkの開発者募集中です! の開発者募集中です! ご興味がある方は会社にお話に来てみませんか? 募集職種: - Scalaエンジニア -

    DevOpsエンジニア ・ ・Typetalkのユーザ募集中です! のユーザ募集中です! チャットで効率良く働きたい方、使ってみませんか?