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

はじめてのアーキテクティング - クラウド上でアーキテクチャを設計するコツを学ぼう

Avatar for kazuya iwami kazuya iwami
October 01, 2022
3

はじめてのアーキテクティング - クラウド上でアーキテクチャを設計するコツを学ぼう

初学者向けワークショップ AWS JumpStart で利用

Avatar for kazuya iwami

kazuya iwami

October 01, 2022
Tweet

Transcript

  1. © 2022, Amazon Web Services, Inc. or its Affiliates. はじめてのアーキテクティング

    クラウド上でアーキテクチャを設計するコツを学ぼう Iwami Kazuya
  2. © 2022, Amazon Web Services, Inc. or its Affiliates. Webアプリケーションの⼤まかな構成要素

    Web上で提供されているアプリケーション 例えば、インターネットを介して Webブラウザで利⽤できるサービスなど インターネットを介したやり取り Webサーバー Webブラウザ クライアント サーバー リクエスト レスポンス ↑ここに着目
  3. © 2022, Amazon Web Services, Inc. or its Affiliates. こんなことを考えたことはありませんか︖

    o 例えば⼿元のPC上で、何かしらのWebアプリを作成しているとする o ⼿元で動かす分には機能的に問題なく動作するようになった o 後は仮想サーバーを1台⽤意して環境構築すれば完璧🎉 …なのだろうか︖ Aさん 1台のサーバー
  4. © 2022, Amazon Web Services, Inc. or its Affiliates. 実際のサービスでは

    このような構成を取るケースも多い 1台のサーバー Web データベース (プライマリ) ロード バランサー Web Web サーバー CDN オブジェクト ストレージ データベース (レプリカ) インメモリ データストア DNS
  5. © 2022, Amazon Web Services, Inc. or its Affiliates. 求められる要件は

    ”機能” 要件 だけではない︕ o 解決したいビジネス課題 → Webアプリ → 様々な要件 o 機能要件 o 実装する機能についての要件 o 例) ボタンAをクリックした場合、処理Xが実⾏されること o ローカル環境での実装は主に機能要件を⾒ることが多いが、 この場合はサーバー1台あれば⼗分に⾒える o ⾮機能要件 o 機能以外の、品質に関わる要件 o 例) 可⽤性、スケーラビリティ、パフォーマンス、運⽤、セキュリティ等 o 運⽤期間中のサービス停⽌時間を年間計10時間以内に抑えられること o アクティブユーザーが10万⼈の場合も、1秒以内にレスポンスを返却すること o ⾮機能要件やプロジェクト上の様々な制約を満たすことを考えると、 システム全体のアーキテクチャ設計が重要になる
  6. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計の⼤切さ

    アーキテクチャ設計(※)とは o 機能・⾮機能要件、制約条件を満たすシステム全体の設計を、ソフトウェア だけでなくインフラの観点も含めて⾏うこと 本セッションでは、 o ⼀般的なWebアプリに求められる品質の要件を確認しつつ、 特にインフラの観点に重きを置いたアーキテクチャ設計のコツをお伝えします ※ システムアーキテクチャ設計、アーキテクティング、 system design 等 呼び⽅は⾊々ある
  7. © 2022, Amazon Web Services, Inc. or its Affiliates. 本セッションの⽴て付け

    o クラウド上での アーキテクチャ設計 がどのようなものなのかお伝えします o アーキテクチャ設計で意識すべき観点と取りうる選択肢を知ろう o 検討する上で叩き台となる⼀般的な構成とはどのようなものなのか o アーキテクチャ設計の始め⽅ o できるだけ AWS (クラウド) に限らない、より⼀般的な話をします
  8. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討 ※ AWS Well Architected Frameworkを参考に記載。IPAの非機能要求グレードなどを利用する場合もある
  9. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討
  10. © 2022, Amazon Web Services, Inc. or its Affiliates. 信頼性に課題があるサービスの例

    サーバーが故障するたび サイトにアクセスできない (機会損失やブランドイメージ低下) ❌ バックアップは恐らく取っているが 目標復旧時間などは決まっていない (復旧の手順が整理されてない、時間がかかる)
  11. © 2022, Amazon Web Services, Inc. or its Affiliates. ロードバランサーで複数台のサーバーに負荷を分散させる

    o ロードバランサを前段に配置し、複数のサーバーにリクエストを分散させる o ロードバランサは定期的にサーバーの⽣死を確認し (=ヘルスチェック)、 正常に動作しているサーバーにのみリクエストを渡す ロード バランサー Web サーバー Web サーバー Web サーバー HTTPリクエスト HTTPリクエスト 負荷を複数のサーバーに 分散する仕組み ❌
  12. © 2022, Amazon Web Services, Inc. or its Affiliates. 複数のデータセンターを活⽤する

    データセンターレベルの障害を回避するために、複数のデータセンターを活⽤する Web サーバー Web サーバー Web サーバー ロード バランサー データセンター1 データセンター1 データセンター2 ❌ ※ データセンターのイメージ図
  13. © 2022, Amazon Web Services, Inc. or its Affiliates. DBの障害時には別の複製先に切り替える仕組みを⽤意する

    o DBサーバーの障害時には、レプリケーション先に切り替えることで、 短いダウンタイムでサービスを復旧させることができる MySQL (Source) MySQL (Replica) レプリケーション Web Web Web サーバー MySQL MySQL Web Web Web サーバー フェールオーバー (切り替え) ❌ ❌ 読み書き 読み書き
  14. © 2022, Amazon Web Services, Inc. or its Affiliates. バックアップ戦略の策定と仕組みの⾃動化

    o まずは災害時にビジネス的に許容可能な RPO / RTO を検討する o RTO = 障害発⽣時に「どのくらいの時間で」 復旧させるか o RPO = 障害発⽣時、過去の「どの時点まで」のデータを復旧させるか o バックアップ戦略に従って、⼀括で漏れなくバックアップが取れられるよう ⾃動化しておくことを推奨 o AWSの場合、各種サービスの⾃動バックアップ機能やAWS Backupの活⽤ ※ RTO・RPOはできる限り最⼩ににしたいという要件のままだとコストや⼯数 が跳ね上がるので、ビジネス側と適切な落とし所を話し合うこと https://aws.amazon.com/jp/blogs/news/top-10-security-best-practices-for-securing-backups-in-aws/
  15. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討
  16. © 2022, Amazon Web Services, Inc. or its Affiliates. スケーラビリティ・パフォーマンスに課題があるサービスの例

    ユーザーが数千人を超えると 動作が非常に遅くなる (ユーザー体験が悪化) 🔥 サーバーのCPU/メモリ枯渇、DBやストレージのIO性能の上限に当たる等 o ユーザーが増加した場合も、安定した体験を提供したい
  17. © 2022, Amazon Web Services, Inc. or its Affiliates. スケールアウト可能な構成とする

    スケールアップだけでは限界があるので、スケールアウトも可能な構成が望ましい スケールアップ (ダウン) サーバーのスペックを変化させる スケールアウト (イン) 同じスペックのサーバーの台数を変化させる ロード バランサー 1 CPUコア 2 GB メモリ 64 CPUコア 256 GB メモリ … …
  18. © 2022, Amazon Web Services, Inc. or its Affiliates. 読み込み専⽤DBサーバー(リードレプリカ)を活⽤する

    o Webアプリでは、書き込みに比べ読み込みの処理が中心となる場合が多い o DBの観点では、リードレプリカを複数台⽴てることで、 読み込みのパフォーマンスを向上することができる MySQL (Source) MySQL (Replica) MySQL (Replica) 読み書き可能 読み込み専用 … 非同期レプリケーション (反映に少し時間が掛かる点は注意) Web サーバー SELECT文 SELECT文 INSERT/UPDATE/DELETE文 Web サーバー Web サーバー
  19. © 2022, Amazon Web Services, Inc. or its Affiliates. インメモリデータストアを活⽤する

    o インメモリデータストアとは、メモリ上にデータを格納することで非常に 高速なやり取りが可能なデータストア (Redis, Memcached等) o 例えば、頻繁に必要となる情報をキャッシュしておく用途に利用される o キャッシュに乗っているデータへのアクセスは非常に高速 Redis MySQL Web サーバー ※ キャッシュ戦略については、Cache-AsideやWrite Throughなどを調べてみてください Web サーバー Web サーバー Web サーバー インメモリデータストア
  20. © 2022, Amazon Web Services, Inc. or its Affiliates. Staticなコンテンツ配信に適した仕組みを活⽤する

    ロード バランサー データベース Staticなコンテンツの例: 画像 / 動画 / データファイル / HTML / CSS / JavaScript 等 Staticなコンテンツ配信 に適した仕組み Web Web Web サーバー ファイル サーバー dynamicなコンテンツの例: リクエストごとにDBなどにアクセスし、 中⾝が変化するAPIなど 画像
  21. © 2022, Amazon Web Services, Inc. or its Affiliates. Staticなコンテンツ配信に適した仕組みを活⽤する

    Staticなコンテンツの例: 画像 / 動画 / データファイル / HTML / CSS / JavaScript 等 CDN オブジェクト ストレージ コンテンツの キャッシュ 安価で耐久性 が⾼いストレージ ロード バランサー データベース Web Web Web サーバー dynamicなコンテンツの例: リクエストごとにDBなどにアクセスし、 中⾝が変化するAPIなど staticなコンテンツ配信の パフォーマンスやコストが最適化できうる
  22. © 2022, Amazon Web Services, Inc. or its Affiliates. CDN

    (Content Delivery Network) を活⽤する o CDNを利用しない場合 配信元 サーバー 大勢がアクセスするstaticなデータ (画像/動画/HTML/CSS/JS等) ヨーロッパの ユーザー 日本の ユーザー (日本)
  23. © 2022, Amazon Web Services, Inc. or its Affiliates. CDN

    (Content Delivery Network) を活⽤する o CDNを活用する場合 o ユーザーに近い場所から直接コンテンツを高速に配信できる o 配信元のサーバーの負荷を軽減できる 配信元 サーバー 大勢がアクセスするstaticなデータ (画像/動画/HTML/CSS/JS等) ヨーロッパの ユーザー 日本の ユーザー CDN ≒ 世界中に大量に配置されたキャッシュサーバー群 (日本)
  24. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討
  25. © 2022, Amazon Web Services, Inc. or its Affiliates. 開発や運⽤に改善の余地があるサービスの例

    アプリのログを確認する際は各サーバーに入って確認 システム全体のエラー率やレイテンシがパッと分からない (障害時の復旧に時間がかかってしまう)
  26. © 2022, Amazon Web Services, Inc. or its Affiliates. メトリクスやログを収集・活⽤する仕組みを整備

    o 問題が発⽣した際の速やかな対応や、データドリブンなサービスの改善を 効率よく⾏う上ではメトリクスやログを収集して活⽤する仕組みは重要 o 取得するメトリクスやログ、アラートを上げる対象、適したツールを検討 o クラウドの場合、各種サービスやリソースの増減に対応したツールが便利 o システムが複雑化するにつれ、「どこで問題が⽣じているか」を確認する ためのトレースの仕組みへのニーズも徐々に増加している https://speakerdeck.com/track3jyo/startup-monitoring-aws2022
  27. © 2022, Amazon Web Services, Inc. or its Affiliates. 開発や運⽤に改善の余地があるサービスの例

    数ヶ月に一度、手動で テストやデプロイを実施 (機能リリース速度が上がらない) アプリのログを確認する際は各サーバーに入って確認 システム全体のエラー率やレイテンシがパッと分からない (障害時の復旧に時間がかかってしまう)
  28. © 2022, Amazon Web Services, Inc. or its Affiliates. CI/CDの仕組みを⽤意する

    o より⾼速なサイクルで価値提供を⾏うためには、システム側でも 頻繁に安全な⽅法でサービスをリリースする仕組み作りが重要となる o CI(継続的インテグレーション) o ソフトウェアの変更を⾃動でビルド・テストし、本番にデプロイ可能な 状態かをこまめに検証する o CD(継続的デリバリ / デプロイメント) o デプロイの準備や、デプロイ作業⾃体を⾃動化する レポジトリ ビルド テスト デプロイ 本番 ステージング 開発 GitHub等 コードの 変更 CI CD
  29. © 2022, Amazon Web Services, Inc. or its Affiliates. インフラのコード化

    (Infrastructure as Code) o 以下ようなニーズがある場合、インフラのコード化を検討する価値がある o 環境の複製を容易にしたい o インフラ構成についてもデプロイ前にチームでコードレビューしたい o インフラもテストからデプロイまで⾃動化したい o コードを読むだけで容易に構成を把握可能な状態にしておきたい EC2: Type: AWS::EC2::Instance Properties: ImageId: ami-xxxxxxxxxx InstanceType: t2. AWS CloudFormationで仮想サーバーを立てる例
  30. © 2022, Amazon Web Services, Inc. or its Affiliates. 開発や運⽤に改善の余地があるサービスの例

    数ヶ月に一度、手動で テストやデプロイを実施 (機能リリース速度が上がらない) リリース後もパッチ当てや 障害対応にリソースを割かれている (本来は新機能開発に人を回したいのに…) アプリのログを確認する際は各サーバーに入って確認 システム全体のエラー率やレイテンシがパッと分からない (障害時の復旧に時間がかかってしまう)
  31. © 2022, Amazon Web Services, Inc. or its Affiliates. AWSの場合、適材適所にマネージドサービスを組み合わせる

    コンピューティング アプリケーション統合 ARとVR Game Tech IoT 機械学習 モバイル 量⼦テクノロジー ロボット⼯学 カスタマーエンゲージメント エンドユーザーコンピューティング 分析 ブロックチェーン データベース 開発者⽤ツール マネジメントとガバナンス メディアサービス ネットワークとコンテンツ配信 ⼈⼯衛星 セキュリティ ストレージ o マネージドサービス = AWS側が構築・運⽤を肩代わりしてくれるサービス o 仮想サーバー上で⾃前で全て作ることもできるが、マネージドサービスを 適材適所に組み合わせることで、より楽にシステムを構築・運⽤できる
  32. © 2022, Amazon Web Services, Inc. or its Affiliates. AWSの場合、適材適所にマネージドサービスを組み合わせる

    o マネージドサービス = AWS側が構築・運⽤を肩代わりしてくれるサービス o 仮想サーバー上で⾃前で全て作ることもできるが、マネージドサービスを 適材適所に組み合わせることで、より楽にシステムを構築・運⽤できる 仮想サーバー上でDBを運⽤する場合 電源、ネットワーク ラック導⼊管理 サーバメンテナンス OSのパッチ ミドルウェアのパッチ バックアップ スケーラビリティ 可⽤性 ミドルウェアの導⼊ OSの導⼊ アプリからの利⽤ 電源、ネットワーク ラック導⼊管理 サーバメンテナンス OSのパッチ ミドルウェアのパッチ バックアップ スケーラビリティ 可⽤性 ミドルウェアの導⼊ OSの導⼊ アプリからの利⽤ DBのマネージドサービスを使う場合 AWSが管理 ⾃前で管理
  33. © 2022, Amazon Web Services, Inc. or its Affiliates. AWSの場合、適材適所にマネージドサービスを組み合わせる

    o マネージドサービス = AWS側が構築・運⽤を肩代わりしてくれるサービス o 仮想サーバー上で⾃前で全て作ることもできるが、マネージドサービスを 適材適所に組み合わせることで、より楽にシステムを構築・運⽤できる ⾃由度が⾼い 開発・運⽤が楽 トレードオフ (サービスの制限) (開発・運用が面倒) 開発から運用まで自分の責務で行う マネージドサービスの活用
  34. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討
  35. © 2022, Amazon Web Services, Inc. or its Affiliates. コスト最適化に課題があるシステムの例

    コストの概算や その内訳を把握していない (今のコストが適切なのか判断できない) 過度にコスト削減を要求された結果、 ビジネス成功に重要な他の要件が満たせない
  36. © 2022, Amazon Web Services, Inc. or its Affiliates. コストの概算と内訳を把握する

    o やりたいことはビジネスの成功 o ビジネスの成果と、実際に掛かるコストを定量的に把握して、 今どれぐらいインフラに投資すべきか、コスト削減すべきかを⾒直すと良い o 全体のコスト概算だけでなく、その中で⽀配的な要素を把握することが⼤切 Web ロード バランサー Web Web サーバー データベース 30% 40% 5% ストレージ 10% その他の サービス群 15% この辺りから 確認すると効果的 ※コストの割合のイメージ
  37. © 2022, Amazon Web Services, Inc. or its Affiliates. コスト最適化に課題があるシステムの例

    コストの概算や その内訳を把握していない (今のコストが適切なのか判断できない) 適切なリソースのサイズやタイプを 選択していない (選択肢を知らない) 過度にコスト削減を要求された結果、 ビジネス成功に重要な他の要件が満たせない リクエストが少ないタイミングも 大量のサーバーが立ちっぱなし
  38. © 2022, Amazon Web Services, Inc. or its Affiliates. 適切なサイズやタイプのリソースを選択する

    ※ 例えばAWSでは o 最新世代のサーバーを選択することでコストパフォーマンスが向上 o DB・ストレージについても、ユースケースに合ったサービス、クラス、 オプションを選択することでコスト削減可能 o ⼀定期間利⽤をコミットすると安価に利⽤できる料⾦モデルも検討 o 本番運⽤後に実際の使われ⽅を確認して、不要なリソースを減らすことも可能
  39. © 2022, Amazon Web Services, Inc. or its Affiliates. AutoScalingの機能を活⽤する

    ロード バランサー Web サーバー Web サーバー Web サーバー Web サーバー Web サーバー 平均CPU使用率: 50%
  40. © 2022, Amazon Web Services, Inc. or its Affiliates. AutoScalingの機能を活⽤する

    ロード バランサー Web サーバー Web サーバー Web サーバー Web サーバー Web サーバー 平均CPU使用率: 30%
  41. © 2022, Amazon Web Services, Inc. or its Affiliates. AutoScalingの機能を活⽤する

    ロード バランサー Web サーバー Web サーバー Web サーバー (例えば)平均CPU使用率を見て、サーバーの台数を上下させる 平均CPU使用率: 50% 台数が減ると 料金も抑えられる
  42. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計で意識すべき観点とは︖

    o どれほどの信頼性を求めるのか o どれほどのスケーラビリティ・パフォーマンスを求めるのか o 効率良く開発や運⽤を⾏えるのか o コストは最適化できているのか o セキュリティ観点での検討
  43. © 2022, Amazon Web Services, Inc. or its Affiliates. セキュリティ対策に課題のあるプロジェクトの例

    IPA「守るべき情報資産・情報リスクの考え⽅」 https://www.ipa.go.jp/files/000013297.pdf 何から手を付ければ いいんだろう? とりあえずXを導入すればいいのか? (自分たちにとってより重要な 施策にコストを掛けるべきだった)
  44. © 2022, Amazon Web Services, Inc. or its Affiliates. セキュリティの考え⽅

    o まずはリスク分析を⾏い、 「何をどこまで守るか」を検討しよう o ベースラインアプローチ o ⾃社に合うガイドラインを選定して、ギャップ分析を⾏う o ISO 27001 / PCI-DSS / AWSのWell Architected Framework等 o 詳細リスク分析 o 情報資産の洗い出し(例: 漏洩時のインパクトの⼤きい情報は何か) o 資産ごとの脅威・脆弱性の洗い出し o リスクの定量化 o 対策予算や⼈的リソースも加味しつつ、リスクへの対策や優先度を検討 o 定期的なリスクの確認と対策のアップデート(PDCAを回す)
  45. © 2022, Amazon Web Services, Inc. or its Affiliates. ベースラインアプローチの例

    - Well Architected Framework o SEC 1. ワークロードを安全に運⽤するには、どうすればよいですか? o SEC 2. ユーザー ID とマシン ID はどのように管理したらよいでしょうか? o SEC 3. ⼈とマシンのアクセス許可はどのように管理すればよいでしょうか? o SEC 4. セキュリティイベントをどのように検出し、調査していますか︖ o SEC 5. ネットワークリソースをどのように保護しますか? o SEC 6. コンピューティングリソースをどのように保護していますか? o SEC 7. どのようにデータを分類していますか? o SEC 8. 保管時のデータをどのように保護していますか? o SEC 9. 転送時のデータをどのように保護していますか? o SEC 10. インシデントの予測、対応、復旧はどのように⾏いますか?
  46. © 2022, Amazon Web Services, Inc. or its Affiliates. リスク分析とその対策の例

    o 情報資産︓DBに格納された顧客情報(⽒名、住所、商品購⼊履歴) o 脅威︓悪意のある社外ユーザーからの不正アクセス o 脆弱性︓ファイアウォールの設定の不備、XSS、SQLインジェクション o リスク o 個⼈情報の漏洩により、原因究明・謝罪費の発⽣やブランドイメージの毀損 o 対策 o ファイアウォールの設定を⾒直し、必要最⼩限のアクセスのみ許可する o 主要な脆弱性を理解し、脆弱性を残さない実装をする o 保険的対策としてWAF(Web Application Firewall)を利⽤する
  47. © 2022, Amazon Web Services, Inc. or its Affiliates. 検討する上で叩き台となる⼀般的な構成

    とはどのようなものなのか リ フ ァ レ ン ス ア ー キ テ ク チ ャ
  48. © 2022, Amazon Web Services, Inc. or its Affiliates. Web

    ロード バランサー Web Web サーバー ⾼い信頼性が求められる際の構成例 データベース データベース (レプリカ) 障害時のフェイルオーバー用 DNS ファイル サーバー 画像等のファイル 読み書きのクエリ
  49. © 2022, Amazon Web Services, Inc. or its Affiliates. データベース

    (レプリカ) Web データベース ロード バランサー Web Web サーバー CDN オブジェクト ストレージ データベース (レプリカ) インメモリ データストア staticな コンテンツ配信 ⾼い信頼性やスケーラビリティが求められる際の構成例 AutoScalingの活用 dynamicなAPI DNS HTML, CSS, JavaScript, 画像, 動画… 読み書き 読み込み キャッシュ
  50. © 2022, Amazon Web Services, Inc. or its Affiliates. AWSでの⼀例

    AWS Summit Online 2020 「1人から1000万人までの道のり: AWS におけるスケールするインフラ設計とは?」
  51. © 2022, Amazon Web Services, Inc. or its Affiliates. はじめてのアーキテクチャ設計の進め⽅の例

    1. 要素技術、アーキテクチャ設計の基礎、⼀般的な構成例などを学ぶ 2. ビジネス要件からシステムに求められる要件を整理・仮定する 3. 抽象的な設計から初めて具体(例えばAWSのサービス群)に落とす 4. 必要に応じてコアとなるシステムのPoC(検証)を実施する 5. 設計・実装後には(負荷)テストを⾏い、要件を満たせているか確認する
  52. © 2022, Amazon Web Services, Inc. or its Affiliates. 例えば、簡易的な

    短縮URL発⾏サービス について考えてみる https://go.aws/xxxx
  53. © 2022, Amazon Web Services, Inc. or its Affiliates. ビジネス要件からシステムに求められる要件を整理・仮定する

    o ⻑いURLを友達に送る際や、資料に乗せる際などに⾒やすくなるように、 短縮URLを⽣成する仕組みを提供したい 企画・PdM
  54. © 2022, Amazon Web Services, Inc. or its Affiliates. ビジネス要件からシステムに求められる要件を整理・仮定する

    機能要件 o Webアプリケーションとして利⽤できる o ユーザー認証は不要 o URLを⼊⼒すると、短縮URLを⽣成する o 短縮URLにアクセスすると、元のURLにリダイレクトされる アーキテクト 企画・PdM
  55. © 2022, Amazon Web Services, Inc. or its Affiliates. ビジネス要件からシステムに求められる要件を整理・仮定する

    o ⾮機能要件 信頼性 パフォーマンスや スケーラビリティ 可用性 メンテナンスタイム RTO/RPO レスポンス速度 アクセス数 データ量 99.9% (年間9時間弱の停⽌) 基本的に24/365での提供を想定 Web画面は月1時間のメンテナンス時間を取る ⽬標復旧時間 (RTO): 1⽇ ⽬標復旧時点 (RPO): 1時間前 ユーザー100万⼈を想定 URL作成が1RPS、URLへのアクセスは100RPS 99%が500ms以内に返ってくる URL格納DB︓250万レコード = 1GB / ⽉ アクセスログ︓2.5億レコード = 100GB / ⽉
  56. © 2022, Amazon Web Services, Inc. or its Affiliates. ビジネス要件からシステムに求められる要件を整理・仮定する

    o ⾮機能要件 開発・運用 の効率性 運用体制 デプロイ モニタリング SREチームとプロダクト開発チームで担当 1⽇1回のデプロイを想定してCICDの仕組みを⽤意 外形監視やリソース監視をツールAで⾏う ログもAに集約し簡単に検索可能な状態にする その他 予算 プロジェクト期間 スキルセット XX 万円 XX ヶ⽉ 徐々にコンテナを利⽤した開発に移⾏しつつある DBはMySQLに慣れたエンジニアが多い
  57. © 2022, Amazon Web Services, Inc. or its Affiliates. ⼤まかな要素とそれらの関係を洗い出す

    短縮URLサービス API コンテンツ配信 Webブラウザ REST APIを提供 - 短縮URL作成 - 元のURLへのリダイレクト HTML/CSS/JavaScript/画像 を配信
  58. © 2022, Amazon Web Services, Inc. or its Affiliates. 重要な機能について実装イメージを検討する

    短縮URLサービスAPIの例 POST /shoten {“url”: “https://amazon.co.jp”} o urlをハッシュ化 o DBにハッシュと元URLを格納 o 短縮URL /{hash値} を返却 GET /{hash値} o DBから元URLを取得 o 存在した場合、301で元URLにリダイレクトする ※ アクセスログも保存
  59. © 2022, Amazon Web Services, Inc. or its Affiliates. Web

    データベース (プライマリ) ロード バランサー Web Web サーバー CDN オブジェクト ストレージ データベース (レプリカ) インメモリ データストア staticな コンテンツ配信 例えばこの構成を叩き台に検討を始めるとする AutoScalingの活用 動的なAPI DNS HTML, CSS, JavaScript, image, video… コンテンツ配信は この構成で良さそう 今回のリクエスト量であれば インメモリストア無しでも要件を満たしそう チームのスキルセットに合わせて アプリはコンテナ、DBはMySQLを利用 大量のアクセスログを 保管する仕組みが必要
  60. © 2022, Amazon Web Services, Inc. or its Affiliates. 修正後の構成

    Web MySQL ロード バランサー Web Web サーバー CDN オブジェクト ストレージ MySQL (レプリカ) API DNS HTML, CSS, JavaScript, Image コンテナ活用 アプリケーション ログ
  61. © 2022, Amazon Web Services, Inc. or its Affiliates. AWSでのアーキテクチャ案

    Route 53 CloudFront S3 ECS on Fargate ALB Aurora MySQL (Writer) (Reader) ※ 本セッションでは AWSサービスの紹介は割愛 CloudWatch
  62. © 2022, Amazon Web Services, Inc. or its Affiliates. アーキテクチャ設計において⼤切なこと

    o すべての要件、制約を満たすのが難しい場合は、ビジネスを成功させる 上で優先させるべき点に⽴ち返り、トレードオフの中で判断する o 要件を満たす中でできるだけシンプルな構成を検討する
  63. © 2022, Amazon Web Services, Inc. or its Affiliates. まとめ

    (本セッションの振り返り) o クラウド上での アーキテクチャ設計 がどのようなものなのかお伝えします o アーキテクチャ設計で意識すべき観点と取りうる選択肢を知ろう o 検討する上で叩き台となる⼀般的な構成とはどのようなものなのか o アーキテクチャ設計の始め⽅ アーキテクティングのイメージは湧きましたか?
  64. © 2022, Amazon Web Services, Inc. or its Affiliates. 更に勉強したい⽅へ

    o System Designについては⽇本語だとこのあたり o 🔍 「system-design-primer ⽇本語」 o https://github.com/donnemartin/system-design- primer/blob/master/README-ja.md o AWSのアーキテクチャ設計については o 🔍「1人から1000万人までの道のり: AWS におけるスケールする インフラ設計とは?」 o AWSでのシステム構築で意識すべき点をより包括的に記載しているのは o 🔍 「 AWS Well-Architected フレームワーク」
  65. © 2022, Amazon Web Services, Inc. or its Affiliates. よくある失敗例:

    初期から複雑な構成を組んでしまう o 将来⽣じうるあらゆる要件に初期から備えすぎてしまうのがこのパターン o アーキテクチャを複雑にすると、運⽤、改善のコストが増すことを理解する o サービスが⼤きく成⻑し、機能が増えてきた段階では、 当初想定していなかった課題が⾒えてくる。そのタイミングで改善しよう o (近い将来を含め)明らかに⾒えている課題を解決できる 最もシンプルなアーキテクチャを選ぶべき
  66. © 2022, Amazon Web Services, Inc. or its Affiliates. よくある失敗例:

    他社の成功事例に引っ張られる o 銀の弾丸はない o その技術はどういう背景からどういう課題を解決するために登場したのか。 メリットは何で、デメリットは何かを理解しなければならない o 特性のトレードオフにも気を配る o 可⽤性、パフォーマンス、スケーラビリティ、料⾦、 学習コスト、運⽤コスト等 o 上⼿く⾏った事例は、本当に⾃分たちの置かれている状況でも有効か︖
  67. © 2022, Amazon Web Services, Inc. or its Affiliates. よくある失敗例:

    運⽤が上⼿く回らない o 最新の技術を取り⼊れたものの、構築後に運⽤が上⼿く回らないという話 を定期的に聞く o ある技術を採⽤する場合は、 o 直近だけでなく数年後の運⽤も⾒据えて選定する o 運⽤チームが分かれている場合は、運⽤チームへのスキルトランスファー も⼯数に含める o スキルの属⼈化を避ける(その⼈が抜けると誰も触れない状況を避ける)