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

1人から1000万人までの道のり:AWSにおけるスケールするインフラ設計とは?

Avatar for kazuya iwami kazuya iwami
June 01, 2020
12

 1人から1000万人までの道のり:AWSにおけるスケールするインフラ設計とは?

AWS Summit Online 2020

Avatar for kazuya iwami

kazuya iwami

June 01, 2020
Tweet

Transcript

  1. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 1⼈から1000万⼈までの道のり︓ AWSにおけるスケールするインフラ設計とは︖ ⽯⾒ 和也 ソリューションアーキテクト 技術統括本部 インターネットメディアソリューション部
  2. Kazuya Iwami Internet Media Solution Architect, Amazon Web Services Japan

    Machine Learningプロジェクトの⽀援も⾏う 最近お気に⼊りのAWSサービス - AWS CDK - AWS Fargate - AWS Chime SDK
  3. DB プライマリ/ スタンバイ CDN オブジェクト ストレージ Web ロード バランサ Web

    Web インメモリ キャッシュ NoSQL DB サービス A サービス B キュー DB リード レプリカ Webアプリケーションを構築する場合、 どのような構成から始めますか︖
  4. AWSでの構成例 VPC Elastic IP address EC2 Instance Amazon RDS instance

    Amazon Route 53 Elastic IP Address Amazon EC2 Amazon RDS User Amazon Route 53 - 100人
  5. データベースの選択肢 電源、ネットワーク ラック導⼊管理 サーバメンテナンス OSのパッチ ミドルウェアのパッチ バックアップ スケーリング 可⽤性 ミドルウェアの導⼊

    OSの導⼊ アプリケーション実装 オンプレミス EC2 お客様がご担当する作業 AWSが提供するマネージド機能 電源、ネットワーク ラック導⼊管理 サーバメンテナンス OSのパッチ ミドルウェアのパッチ バックアップ スケーリング 可⽤性 ミドルウェアの導⼊ OSの導⼊ アプリケーション実装 電源、ネットワーク ラック導⼊管理 サーバメンテナンス OSのパッチ ミドルウェアのパッチ バックアップ スケーリング 可⽤性 ミドルウェアの導⼊ OSの導⼊ アプリケーション実装 AWSマネージドなDBサービス
  6. ⾃動 バックアップ スナップ ショット パッチ更新 • フルマネージドのRDBMSサービス • DBエンジンはMySQL, Oracle,

    SQL Server, PostgreSQL, MariaDB, Aurora から選択可能 • DBのセットアップやバックアップ、パッチ適⽤などをAWSが管理してくれるため メンテナンスコストを⼤幅に削減 Amazon RDS (Relational Database Service) アベイラビリティゾーン 1 アベイラビリティゾーン 2 負荷分散のための 「読み取り⽤レプリカ」 別AZにデータを同期 ⾃動的にフェイルオーバー
  7. 現在の構成における将来的な課題 VPC Elastic IP address EC2 Instance Amazon RDS instance

    スケールアップには限界 可⽤性に課題 User Amazon Route 53 - 100人
  8. VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1 AZ2

    EC2 Instance Amazon RDS instance (プライマリ) Application Load Balancer (ALB) User Amazon Route 53 - 10,000人 - 100人
  9. ステートレスなアプリケーションであることが⼤切 • セッション情報 • Amazon RDSやAmazon DynamoDBのようなDBサービスに保存 • もしくはAmazon ElastiCache

    (Memcached/Redis) のようなインメモリキャッシュに保存 • ログ • CloudWatch Agentを利⽤し、Amazon CloudWatch Logsにログを送信 • Kinesis Agentを利⽤し、Amazon Kinesis Data Firehoseを経由しAmazon S3にログを送信 ⻑時間存在するすべてのデータは、 ステートフルなバックエンドサービスに格納しなければならない
  10. VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1 AZ2

    EC2 Instance Amazon RDS instance (プライマリ) Amazon CloudWatch ログ / メトリクス Amazon CloudWatch User Amazon Route 53 - 10,000人 - 100人
  11. 現在の構成における将来的な課題 VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1

    AZ2 EC2 Instance Amazon RDS instance (プライマリ) Amazon CloudWatch User Amazon Route 53 - 10,000人 - 100人 ログ / メトリクス
  12. 現在の構成における将来的な課題 VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1

    AZ2 EC2 Instance Amazon RDS instance (プライマリ) Amazon CloudWatch 🔥 💰 User Amazon Route 53 - 10,000人 - 100人 ログ / メトリクス
  13. 多数のユーザーが快適に利⽤できるよう 改善するフェーズ Web DB プライマリ/ スタンバイ ロード バランサ Web Web

    CDN オブジェクト ストレージ DB リード レプリカ - 1,000,000人 - 10,000人 - 100人 • ユーザーが数万⼈から数⼗万⼈に増加しても 安定したレイテンシでサービスを提供したい • 可⽤性 拡張性 • ⾃動化やコストの最適化 インメモリ キャッシュ
  14. 静的コンテンツ配信部分をオフロード VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1

    AZ2 EC2 Instance Amazon RDS instance (プライマリ) CDN User Amazon Route 53 - 1,000,000人 - 10,000人 - 100人 オブジェクト ストレージ コンテンツの キャッシュ 安価で耐久性 が⾼いストレージ
  15. Amazon CloudFront CDN導⼊の利点 • ユーザーを⼀番近いエッジロケーションに誘導することで 配信を⾼速化 • エッジサーバでコンテンツのキャッシングを⾏い オリジンの負荷をオフロード クライアント

    オリジン (配信元) Amazon CloudFront レスポンス向上 負荷軽減 CDN (Content Delivery Network) とは • ⼤容量キャパシティを持つ地理的に分散したサーバー群(エッジ)から コンテンツをキャッシュしたり代理配信をするサービス
  16. Amazon S3 (Simple Storage Service) • データ保存・バックアップ⽤途に向くオブジェクトストレージ • S3⾃体に静的コンテンツ配信機能あり •

    ⾃動的に3箇所以上のAZに隔地保管 • データ耐久性は、99.999999999% • 容量無制限、サイジング不要 • REST APIを介してデータを操作 • 1プレフィックス辺り秒間5500回以上GETリクエストが可能 • 従量課⾦ 1GByteあたり⽉間 $0.0125~ • ⻑期アーカイブ⽤なら$0.00099〜 ※ 2020年6⽉時点での⽶国東部の⾦額
  17. 静的コンテンツ配信部分をオフロード Amazon CloudFront S3 bucket User Amazon Route 53 -

    1,000,000人 - 10,000人 - 100人 VPC EC2 Instance Amazon RDS instance (スタンバイ) ALB AZ1 AZ2 EC2 Instance Amazon RDS instance (プライマリ)
  18. データベースへの読み込みクエリをオフロード VPC ALB AZ1 Instance Instance Instance Amazon RDS (リードレプリカ)

    Amazon CloudFront S3 bucket User Amazon Route 53 - 1,000,000人 - 10,000人 - 100人 Amazon RDS (プライマリ) ⾮同期 レプリケーション 読み込み専⽤ DBインスタンス 🔥
  19. クラウド向けに再設計された MySQL, PostgreSQL と互換性のあるRDBMS コマーシャルデータベースの性能と可⽤性を1/10のコストで フルマネージド ハードウェアの⽤意、 ソフトウェアのパッチ適⽤、 セットアップ、構成、 バックアップといった

    管理タスクからの解放 ⾼い安全性 ネットワーク分離、 保管時/通信の暗号化 優れた性能と拡張性 標準的なMySQLと⽐べて5倍、 標準的なPostgreSQLと⽐べて 3倍のスループットを実現; リードレプリカを最⼤ 15 個 追加してスケールアウト可能 耐障害性、⾃⼰修復機能を 兼ね備えたストレージ; 3 つのAZにわたり、6 個の コピーを保持; Amazon S3への継続的な バックアップ ⾼可⽤性と耐久性 Amazon Aurora
  20. 頻繁に利⽤されるデータをキャッシュ VPC ALB AZ1 Instance Instance Instance Amazon RDS (リードレプリカ)

    Amazon CloudFront S3 bucket User Amazon Route 53 - 1,000,000人 - 10,000人 - 100人 Amazon RDS (プライマリ) インメモリ キャッシュ • ⾮常に⾼速なデータストア • メモリ上にデータを格納
  21. Amazon ElastiCache • フルマネージド • インメモリキャッシュを数クリックで起動、実⾏、スケーリング可能 • 可⽤性を向上させる機能 (モニタリング、⾃動障害検出、復旧、拡張、パッチ適⽤、バックアップ) •

    ⾮常に⾼いパフォーマンス • ⾮常に⾼速な2種類のエンジン(Memcached, Redis)をサポート • ミリ秒未満の応答時間を実現 • AmazonによるRedisの機能拡張 • 主な⽤途 • キャッシュ、セッション管理、リアルタイム集計
  22. 頻繁に利⽤されるデータをキャッシュ VPC ALB AZ1 Instance Instance Instance Amazon RDS (リードレプリカ)

    Amazon CloudFront S3 bucket User Amazon Route 53 - 1,000,000人 - 10,000人 - 100人 Amazon RDS (プライマリ) ElastiCache Redis
  23. VPC Instance Amazon RDS (スタンバイ) ALB AZ1 AZ2 Instance Amazon

    RDS (プライマリ) Instance Instance Instance Instance Amazon RDS (リードレプリカ) Amazon RDS (リードレプリカ) Amazon CloudFront S3 bucket ElastiCache Auto Scaling group ここまでの振り返り User Amazon Route 53 - 1,000,000人 - 10,000人 - 100人 ElastiCache
  24. VPC ALB AZ1 Instance Instance Instance Amazon CloudFront S3 bucket

    現在の構成における将来的な課題 Auto Scaling Group User Amazon Route 53 Amazon RDS (プライマリ) Amazon RDS (リードレプリカ) ElastiCache 🔥 - 1,000,000人 - 10,000人 - 100人
  25. 更に意識して計測・分析・改善の サイクルを回すフェーズ それ以上 - 1,000,000人 - 10,000人 - 100人 •

    ユーザーが数百万⼈以上に増加しても 安定したレイテンシでサービスを提供したい • 可⽤性 拡張性 • ⾃動化やコストの最適化 • 組織 運⽤
  26. 具体的な改善の例 アプリケーションパフォーマンスの改善のために - アプリケーションのプロファイリングの実施や、メトリクス・ログを詳細に出⼒し分析 - アプリケーションロジックやSQLの改善 - 様々なレイヤーでのキャッシュの利⽤ - ⾮同期処理化

    RDSプライマリインスタンスへの負荷集中対策のために - DBのシャーディング - NoSQLの利⽤ 運⽤の改善のために - 様々なレイヤーでマネージドサービスを活⽤し、可⽤性やスケーラビリティを担保 - サービスをモジュール、コンポーネント、マイクロサービスなどの単位で分割 - 運⽤オペレーションの⾃動化 - Infrastructure as CodeやCI/CDの導⼊
  27. 具体的な改善の例 アプリケーションパフォーマンスの改善のために - アプリケーションのプロファイリングの実施や、メトリクス・ログを詳細に出⼒し分析 - アプリケーションロジックやSQLの改善 - 様々なレイヤーでのキャッシュの利⽤ - ⾮同期処理化

    RDSプライマリインスタンスへの負荷集中対策のために - DBのシャーディング - NoSQLの利⽤ 運⽤の改善のために - 様々なレイヤーでマネージドサービスを活⽤し、可⽤性やスケーラビリティを担保 - サービスをモジュール、コンポーネント、マイクロサービスなどの単位で分割 - 運⽤オペレーションの⾃動化 - Infrastructure as CodeやCI/CDの導⼊
  28. RDSにおけるDBの分割⽅法 Forum DB User DB Product DB C B A

    User ShardID 002345 A 002346 B 002347 C 002348 B 002349 A
  29. 具体的な改善の例 アプリケーションパフォーマンスの改善のために - アプリケーションのプロファイリングの実施や、メトリクス・ログを詳細に出⼒し分析 - アプリケーションロジックやSQLの改善 - 様々なレイヤーでのキャッシュの利⽤ - ⾮同期処理化

    RDSプライマリインスタンスへの負荷集中対策のために - DBのシャーディング - NoSQLの利⽤ 運⽤の改善のために - 様々なレイヤーでマネージドサービスを活⽤し、可⽤性やスケーラビリティを担保 - サービスをモジュール、コンポーネント、マイクロサービスなどの単位で分割 - 運⽤オペレーションの⾃動化 - Infrastructure as CodeやCI/CDの導⼊
  30. モダンなソフトウェア開発におけるCI/CD AWS CodeBuild + サードパーティー AWS CodeCommit AWS CodeBuild AWS

    CodeDeploy AWS X-Ray AWS CodePipeline モニター デプロイ テスト ビルド コード管理 開発 AWS Cloud9 AWS IDE toolkits Amazon CloudWatch AWS CloudFormation AWS SAM AWS Cloud Development Kit インフラの コード化 Amazon CodeGuru
  31. 具体的な改善の例 アプリケーションパフォーマンスの改善のために - アプリケーションのプロファイリングの実施や、メトリクス・ログを詳細に出⼒し分析 - アプリケーションロジックやSQLの改善 - 様々なレイヤーでのキャッシュの利⽤ - ⾮同期処理化

    RDSプライマリインスタンスへの負荷集中対策のために - DBのシャーディング - NoSQLの利⽤ 運⽤の改善のために - 様々なレイヤーでマネージドサービスを活⽤し、可⽤性やスケーラビリティを担保 - サービスをモジュール、コンポーネント、マイクロサービスなどの単位で分割 - 運⽤オペレーションの⾃動化 - Infrastructure as CodeやCI/CDの導⼊
  32. Thank you! © 2020, Amazon Web Services, Inc. or its

    affiliates. All rights reserved.
  33. 開発を⽀援するサービスの⼀覧 CI/CD tools Monitoring & tracing SDKs IDE IDE and

    DevOps toolkits CLI and scripting tools Web apps Mobile Languages Infrastructure as code AWS CodeStar AWS CodePipeline AWS CodeBuild AWS CodeCommit AWS CodeDeploy AWS CloudFormation AWS CDK AWS Cloud9 AWS X-Ray Amazon CloudWatch AWS Elastic Beanstalk AWS Amplify Amazon Corretto