Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Kubernetesと共にふりかえる! エンタープライズシステムのインフラ設計・テストの進め方大全

Avatar for 高棹大樹 高棹大樹
November 17, 2025

Kubernetesと共にふりかえる! エンタープライズシステムのインフラ設計・テストの進め方大全

Avatar for 高棹大樹

高棹大樹

November 17, 2025
Tweet

More Decks by 高棹大樹

Other Decks in Technology

Transcript

  1. Kubernetesと共にふりかえる! エンタープライズシステムの インフラ設計・テストの進め方大全 CloudNative Days Winter 2025 2025年11月18日 株式会社 野村総合研究所

    マルチクラウドインテグレーション事業本部 金融基盤サービス部 エキスパートアーキテクト 高棹 大樹
  2. 1 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    高棹 大樹 – Daiki Takasao NRI 金融基盤サービス部 • Elastic Kubernetes Service(EKS)を用いた金融機関 様向けマイクロサービス共通基盤 のインフラ担当 主な仕事 趣味 最近の困り事 • キャンプ • 筋トレ • 子供と遊ぶ(相手をしてくれる内に。。) • 飼っている猫が懐いてくれない
  3. 2 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    NRIの会社紹介 使命 創発する社会 私たちの価値観 企業理念 社会に対して 新しい社会のパラダイムを洞察し、その実現を担う お客様に対して お客様の信頼を得て、お客様とともに栄える 夢と可能性に満ち、豊かさを実感する、 活力ある社会 人々の英知がつながり、 環境にやさしい持続可能な社会 強くてしなやかな、安全で安心に満ちた社会 先見性と緻密さで、期待を超える 多彩な個が互いに尊重し、志をひとつにする 情熱と誇りを胸に、あくなき挑戦を続ける コーポレート・ステートメント
  4. 3 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    NRIグループ4つの事業 NRIの会社紹介 コンサルティング CONSULTING 創業以来、シンクタンクとしての深い知見と先見性を活かし、官民の様々な分野で戦略策 定・政策立案を支援してきました。また、政策・産業・事業・技術への深い理解とお客様との 対話を通じ、課題解決に向けた施策を提案し、伴走しています。 AIをはじめとする技術革新が加速し、社会や市場の変化が予測困難となる今、ビジネスを 次のステージへと導くには、先見性に裏付けられたマネジメントコンサルティング、 先進技術で事業・業務革新を加速するシステムコンサルティング、 それらを統合する実行力が不可欠です。 未来を見据え、今を変えることで、 お客様の最良のパートナーであり続けることを目指します。 NRIグループはコンサルティングやさまざまなITソリューションの提供を通じて、 社会や産業を確かな明日へ導くとともに、世界中のお客様と新しい価値を共創しています。 金融ITソリューション FINANCIAL IT SOLUTIONS NRIグループは、金融ビジネスを取り巻く環境変化を高い洞察力で捉える研究員や コンサルタント、ITソリューションサービスを提供するビジネスアナリストやデジタル人材の連携に よって次世代ソリューションを提供し続け、金融機関の事業継続を多方面から支えています。 近年は、金融機関や政策当局、異業種プレーヤーなどとの価値共創により、 金融機能の変革に取り組んでいます。金融は、社会の重要インフラです。 進化し続けるデジタル技術との相性を常に考えながら、 安定かつ先進的な社会インフラを実現し、 社会課題に果敢にチャレンジしていきます。 産業ITソリューション INDUSTRIAL IT SOLUTIONS 産業分野の業界トップ企業のビジネスパートナーとして、コンサルティングからシステム開発や運 用まで、一貫したサービスを提供しています。 コンサルタントとエンジニアが共同でお客様のビジネス環境やデータを分析しながら、最適なIT ソリューションを提供しています。また、コンサルティング部門から運用部門まで、NRIグループの リソースをインテグレーションし、お客様のデジタル戦略を柔軟かつスピーディーに 実現します。 長年にわたってミッションクリティカルなシステムを構築・運用してきた 経験と実績で、これからもお客様の事業インフラとしてのシステム基盤を 支えていきます。 IT基盤サービス IT PLATFORM SERVICES IT技術の革新が加速する中、巨大化・複雑化が進むITシステム基盤の重要性が増しています。 NRIグループは先進的な技術を見通し、戦略的にサービスやソリューションに取り入れ、お客 様の成長や変革の実現をサポートします。先進技術の調査・研究やAI技術の活用も積極 的に実施しています。また、マルチクラウドを含むシステム全体を運営するマネージドサービスや お客様の働く環境を創り出すデジタルワークプレイス事業などを展開しています。 さらに、高度化するサイバー脅威に対応するデジタルトラスト事業やお客様が 直面するセキュリティ課題の解決、総合的なセキュリティレベルの向上を 支援しています。
  5. 4 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    近年エンタープライズシステムにもクラウドネイティブ化の波は来ている オンプレ→クラウドへのリフトは一巡 クラウドのポテンシャルを最大限享受するフェーズへ 従来アーキテクチャの課題を解消し、 よりアジリティの高いシステム開発を実現 エンタープライズシステムは インフラにも高い品質が求められる
  6. 5 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    エンタープライズシステムはインフラにも高い品質が求められる。 ◼エンタープライズシステムの構築プロジェクトの進め方は、長い歴史で体系化されている ◼品質の高いインフラを構築するためにはこの進め方に沿う事が重要 要件定義 設計 実装・構築 テスト 移行 システム構築プロジェクト 維持・保守 クラウドのメリットを最大限に活かすには、 進め方のシフト・追加の考慮が必要! クラウド・Kubernetesを活用したシステムを題材に インフラ設計・テストの進め方を解説します!
  7. 6 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    アジェンダ インフラ基本設計 01 インフラテスト 02
  8. 7 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼本日の内容は、2026年初旬刊行予定の『新版 インフラ設計のセオリー』(リックテレコム)から抜 粋したものです。 ◼本日解説しない、要件定義、維持・保守フェーズ等も詳細に解説しています! ◼宜しければ是非手に取ってみてください! 実は、、 ←こちらの新版を執筆しました!
  9. 8 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼話すこと ⚫ Kubernetes・クラウドを用いたエンタープライズシステムのインフラ構築を行うための、設計・テストの進め方 ◼話さないこと ⚫ ITインフラの構成・設計パターン ⚫ Kubernetesの基礎知識(Pod,Deployment,Serviceとは? Etc..) ⚫ クラウドの基礎知識(AWSのEC2,lAMとは? Etc..) ◼注意事項 ⚫ インフラ設計・テストの進め方の一例を示すものであり、実際の進め方はプロジェクトによって異なる点はご了承 ください ⚫ エンタープライズシステムのITインフラを設計する上で必要な考慮点・設計ポイントが網羅されている訳では無い 点ご了承ください 話すこと・話さないこと・注意事項
  10. 9 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    前提となるインフラ構成/呼称ルール ➢ パブリッククラウド上でシステム構築を行う ➢ パブリッククラウドはAWSを用いる ➢ コンテナオーケストレーションは、どのパブリッククラウドやオンプレミスでも利用が可能なKubernetesを用いる ➢ AWSのマネージドKubernetesサービスであるAmazon Elastic Kubernetes Service(EKS)を用いる 前提となるインフラ構成 ➢ サーバ、コンテナ、その上で稼働するソフトウェア、NW機器ルータ、およびパブリッククラウドのマネージサービス 等のシステムの構成要素を「コンポーネント」と総称する ➢ クラスタ構成のコンポーネントを「クラスタ」と呼ぶ 呼称ルール
  11. 10 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 10 1. インフラ基本設計
  12. 11 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラの基本設計とは? 1. インフラ基本設計 ◼要件定義(概要設計)とパラメータ設計の間にある工程 ◼要件定義で構成図はできているけど、これからいきなりパラメータは設計できないですよね、、、? 要件定義 インフラ 基本設計 パラメータ 設計 ・機能要件の定義 ・非機能要件の定義 ・インフラ構成検討 ・各コンポーネントが持つ パラメータ値の検討 ALBのターゲットには 何を設定する? PodやALBの ヘルスチェック間隔は? 他にもたくさんの パラメータを設計する必要あり
  13. 12 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラの基本設計とは? 1. インフラ基本設計 ◼要件定義(概要設計)とパラメータ設計の間にある工程 ◼要件定義で構成図はできているけど、これからいきなりパラメータは設計できないですよね、、、? ALBのターゲットには 何を設定する? PodやALBの ヘルスチェック間隔は? 要件定義 インフラ 基本設計 パラメータ 設計 ・機能要件の定義 ・非機能要件の定義 ・インフラ構成検討 ・各コンポーネントが持つ パラメータ値の検討 他にもたくさんの パラメータを設計する必要あり 具体的なパラメータ値を決めるためには、 コンポーネントのどれとどれが接続するのか、 障害時の臨ましい動作は何なのか、等の整理が必要!
  14. 13 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラの基本設計とは? 1. インフラ基本設計 ◼インフラ基本設計では、コンポーネント間がどの様に繋がり、どの様な協調動作を行うのかを詳 細に整理する。これがパラメータ設計のインプットになる。 サーバorコンテナor etc リソース ソフトウェア パラメータファイル 〜〜〜: 〜〜 〜〜〜:〜〜〜 サーバorコンテナor etc リソース ソフトウェア パラメータファイル 〜〜〜: 〜〜 〜〜〜:〜〜〜 サーバorコンテナor etc リソース ソフトウェア パラメータファイル 〜〜〜: 〜〜 〜〜〜:〜〜〜
  15. 14 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラの基本設計とは? 1. インフラ基本設計 ◼インフラ基本設計では様々な場面を想定し、その際の期待動作を整理する。 システムが正常稼動している場面 システム内のあるコンポーネントに障害が発生した場面 問合せが急増して、リソース増強が必要になった場面 システムがセキュリティ攻撃を受けた場面 大規模災害が発生した場面 などなど クラウドの機能を最大限利用しつつ、 コストも抑えるためには、 インフラ基本設計に組み込む必要あり!
  16. 15 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラ基本設計の分類 1. インフラ基本設計 ◼インフラ基本設計は場面に沿って分類される ◼分類分けはシステムやプロジェクトによって異なる インフラ基本設計 接続設計 可用性設計(耐障害性設計) 性能設計 拡張性設計 運用設計 セキュリティ設計 災害復旧設計 本日の説明範囲
  17. 16 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 16 1ー①. 接続設計
  18. 17 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 進め方 1. インフラ基本設計 ◼システムを構成するどのコンポーネントが、どれとどの様に接続するのかを詳細に整理する ◼要件定義工程で作成された構成図をブレイクダウンするイメージ 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する
  19. 18 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 1.システムで用意すべき接続パターンを整理する 1. インフラ基本設計 ◼システム内のコンポーネント間の接続を「接続パターン」として整理する ◼整理の観点は以下 アプリケーションの特性や要件 ・情報取得のために、ある外部システムに問合せを行う必要がある ・静的コンテンツのキャッシュのためにCDNを利用したい 具体例 用いるソフトウェア/サービスの仕様 ・AWS ALBは転送先のプロトコルに、HTTP/1.1、HTTP/2、gRPCが設定可能 ・NGINX はgRPCでも待ち受け可能 具体例 既存システム等で実績のある接続パターンか ・非同期処理でAmazon SQSを利用するパターンは、既存システムで実績がある ・今回のシステムと似た用途でCloudFrontを用いた実績がある 具体例 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  20. 19 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 1.システムで用意すべき接続パターンを整理する 1. インフラ基本設計 ◼システム内のコンポーネント間の接続を「接続パターン」として整理する ◼整理の観点は以下 アプリケーションの特性や要件 用いるソフトウェア/マネージドサービスの仕様 既存システム等で実績のある接続パターンか ・情報取得のために、ある外部システムに問合せを行う必要がある ・静的コンテンツのキャッシュのためにCDNを利用したい 具体例 ・AWS ALBは転送先のプロトコルに、HTTP/1.1、HTTP/2、gRPCが設定可能 ・NGINX はgRPCでも待ち受け可能 具体例 ・非同期処理でAmazon SQSを利用するパターンは、既存システムで実績がある ・今回のシステムと似た用途でCloudFrontを用いた実績がある 具体例 アプリチームとの十分な擦り合せが大事! 技術的な引き出しを多く持っておく事が大事! 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  21. 20 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 1.システムで用意すべき接続パターンを整理する 1. インフラ基本設計 ◼接続パターンの整理の例 No. 接続パターン ① エンドユーザはインターネットを経由して、CloudFrontディストリビューションに接 続する ② CloudFrontディストリビューションは、ALBに接続する ③ ALBは、AWSのEKSクラスタ上で稼動するNGINX Podに接続する ④ NGINX Podは、同じEKSクラスタ上で稼働するアプリケーションPodに接続する ⑤ アプリケーションPodは、自システムが持つAurora PostgreSQLのクラスタに接 続し、データの参照、更新を行う ⑥ アプリケーションPodは、非同期処理を行うために自システムが持つSQSキュー に接続し、メッセージの取得、配置を行う ⑦ アプリケーションPodは、外部システムがS3のバケットに接続し、ファイルを取得 する ⑧ アプリケーションPodは、インターネットを経由して外部システムに接続し、更新 処理を行う ⑨ アプリケーションPodは、アプリケーションLambda関数を実行する 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  22. 21 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 2.接続パターン内のコンポーネントを詳細化する 1. インフラ基本設計 ◼接続パターン毎に含まれるコンポーネントの詳細化する ◼接続パターンを成立させるために必要な、サーバやコンテナ、ソフトウェア、パブリッククラウド各種 サービスなどを可能な限り詳細に洗い出す ◼どのコンポーネントがパラメータ設計のポイントとなるのかが浮び上がる 洗い出したコンポーネントが具体的にどういった原理、 仕組みで接続するのか、 腹に落ちるまで理解する事が重要! 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  23. 22 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 2.接続パターン内のコンポーネントを詳細化する 1. インフラ基本設計 ◼個別にIPアドレスを持たないクラウド/K8sのリソースには直接接続できない。APIを介して間接的 に接続する必要がある ◼SDKやCLIを用いてAPIを実行する事が判る様に接続パターンを整理する必要がある コンポーネント (サーバorコンテナor etc) パブリッククラウド/Kubernetes コントロールプレーン IPアドレスを持たない マネージドサービス・リソース API IPアドレスを持たないパブリッククラウド/Kubernetesのマネージドサービス・リソースには直接接続できない パブリッククラウド/Kubernetesのコントロールプレーンに対してAPIを実行する事で、関節的にマネージドサービス・リソースに接続する パブリッククラウド /Kubernetes SDK or CLI 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  24. 23 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 2.接続パターン内のコンポーネントを詳細化する 1. インフラ基本設計 ◼アプリケーションPodがAurora PostgreSQLクラスタに接続するパターン No. 詳細接続内容 ① アプリケーションPod内のコンテナは、JDBC Driverのデータベースに接続するメソッドを呼び出す ② アプリケーションコンテナは、CoreDNS Serviceに対して、プライマリインスタンスのホスト名の名前 解決の問合せを行う ③ CoreDNS ServiceはCoreDNS Podに問合せ通信を振り分ける。 ④ CoreDNSコンテナは、Amazon Route 53 Resolverに対して、プライマリインスタンスのホスト名の 名前解決の問合せを行う。 ⑤ Route 53 Resolverは、AWSの権威DNSサーバに対して、プライマリインスタンスのホスト名の名 前解決の問合せを行う。 ⑥ AWSの権威DNSサーバは、プライマリインスタンスのプライベートIPアドレスを返却する。 ⑦ AWSの権威DNSサーバは、プライベートIPアドレスを返却する。 ⑧ CoreDNSコンテナは、プライベートIPアドレスを返却する。 ⑨ JDBC Driverは、プライベートIPアドレスを使用して、プライマリインスタンスに接続処理を行う ⑩ プライマリインスタンスはJDBC Driverからの接続リクエストを検証する。 ⑪ 接続リクエストの検証に成功すると、プライマリインスタンスはその事を通知する。 ⑫ JDBC Driverのメソッドは接続処理が正常に行えた事をアプリケーションコンテナに通知する。 アプリケーションPod Aurora PostgreSQLクラスタ 詳細化 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  25. 24 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 2.接続パターン内のコンポーネントを詳細化する 1. インフラ基本設計 ◼アプリケーションPodがSQSキューにメッセージを送信するパターン No. 詳細接続内容 ① アプリケーションコンテナは、内部でAWS SDKが提供するSQSキューへメッセージを送信するための メソッドを呼び出す。 ② AWS SDKは、アプリケーションPodと同じEKSワーカーノード(EC2)上で稼動するAmazon EKS Pod Identity Agent Podに対して、AWS IAMの一時的な認証情報の問合せを行う ③ Pod Identity Agentコンテナは、EKS Auth APIに対して一時的な認証情報の問合せを行う ④ EKS Auth APIは予めアプリケーションPodに付与されているServiceAccountと紐付け設定されて いるIAMロールを検証する ⑤ EKS Auth APIはIAMロールの検証に成功すると、一時認証情報をPod Identity Agentコンテ ナに返却する ⑥ Pod Identity Agentは一時認証情報をAWS SDKに返却する ⑦ AWS SDKのメソッドは、一時認証情報を使用して、AWS SQS APIに対してSQSキューへのメッ セージの送信を問合せる ⑧ AWS SQS APIはSQSキューにメッセージを格納する ⑨ AWS SQS APIはAWS SDKのメソッドに対して、メッセージ格納が正常に終了した事をAPIのレス ポンスとして返却する ⑩ SDKのメソッドはSQSキューへのメッセージ送信が正常に行えた事をアプリケーションに送付する アプリケーションPod 詳細化 SQSキュー 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  26. 25 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 3.接続パターンの通信プロトコルを明確化する 1. インフラ基本設計 ◼コンポーネント間で通信を行う際の通信プロトコルを明確化する ◼プロトコルを明確化する事で、通信に必要なコンポーネントや考慮ポイントに気付ける Application Load Balancer HTTPS NGINX Pod NGINXコンテナ TLS証明書 NGINX PodがHTTPSで待ち受けるためにはTLS証明書が必要 この証明書はどうやって発行する? 公的証明書? orプライベートPKI? or etc 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  27. 26 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 4.接続パターンの認証/認可方法を明確化する 1. インフラ基本設計 ◼セキュリティ要件等から求められる認証/認可を、コンポーネントで行う事ができるかを確認する ◼行えない様であれば、コンポーネントの追加を検討する EKSクラスタ アプリケーション Pod AWS IAMで認可制御を行うためにAmazon API Gatewayを追加 AWS Cloud アプリケーション Lambda関数 認証/認可処理 実装していない IAMlロール Amazon API Gateway 追加 IAMで認可制御:有効 アプリケーションPodからlambda関数に接続するパターン 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  28. 27 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 4.接続パターンの認証/認可方法を明確化する 1. インフラ基本設計 ◼認証/認可方法を明確化する事で、必要な設計ポイントに気付ける 種類 説明 接続元 メリット デメリット 証明書による認証 X.509証明書を利用して接続元を認証 アプリ開発者 インフラ管理者 Kubernetesの機能のみで認 証を行う事ができる 証明書や、それに関連する Kubernetesリソースを個別に管理 する必要がある 外部IDプロバイダ による認証 OpenID Connectを使用して外部IDプ ロバイダ(例えばGoogleやSalesforce など)と連携し、認証を行う アプリ開発者 インフラ管理者 既存の認証基盤を活用でき る 設定が複雑になる。外部IDプロバ イダへの依存性が増える。 パブリッククラウドの 認証基盤による認証 パブリッククラウドの認証基盤(AWSだと IAM)の機能を用いて認証 アプリ開発者 インフラ管理者 認証情報をパブリッククラウド と一元管理できる 設定が複雑になる。パブリッククラウ ドへの依存性が増える。 Service Account による認証 Service AccountというKubernetesリ ソースを用いて認証を行う。Pod等の Kubernetesリソースに関連付けて使用 Kubernetesリソース (Pod等) クラスタ内からAPIへのアクセ スを自然に扱える RBACとの統合が容易 トークンをSecretとして管理する事 による漏洩リスク Kubernetes API経由でリソースに接続・操作する際の認証方法(一部) 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  29. 28 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 5.接続パターンで使用する文字コードを明確化する 1. インフラ基本設計 ◼コンポーネント間で異なる文字コード、符号化方式を用いる場合、変換処理を行う必要がある ◼変換処理をどのコンポーネントで行うのかを明確化する事で、処理パターンの妥当性を確認 データベース (文字符号化方式:EUC-JP) DBサーバ Javaアプリケーション (内部の文字符号化方式: UTF-16 ) JDBC Driver テーブル群 インデックス群 UTF-16 JDBC DriverでUTF-16⇔EUC-JPの変換を行う EUC-JP アプリケーションPod アプリケーションコンテナ (内部の文字符号化方 式: UTF-16 ) 外部システム (文字符号化方式:シフトJIS) 接続ライブラリ UTF-16 シフトJIS 接続ライブラリでUTF-16⇔シフトJISの変換を行う 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  30. 29 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 6.接続パターンのタイムアウト制御方法を明確化する 1. インフラ基本設計 ◼リソースの涸渇やユーザ体験を考慮し、タイムアウト制御は必須 ◼コンポーネント間の処理の整合性を保つために、接続先の応答タイムアウト値より接続元の応 答タイムアウト値が大きい関係が保たれる必要あり コンポーネント コンポーネント 応答 タイムアウト値 処理実施 待機 処理実施 問合せ コンポーネント 応答 タイムアウト値 処理実施 待機 処理実施 問合せ 応答 接続先のコンポーネントの応答タイムアウト値より 接続元の応答タイムアウト値が大きい関係が保たれる必要がある 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  31. 30 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 6.接続パターンのタイムアウト制御方法を明確化する 1. インフラ基本設計 ◼タイムアウトを制御するコンポーネント、設定項目とその値を明確化する NGINX Pod NGINX コンテナ アプリケーションPod アプリケーションコンテナ 静的コンテンツ (画像、CSS等) アプリケーション ClusterIP Service 静的コンテンツへ の問合せ 応答 APIへの問合せ 応答 Aurora PostgreSQL クラスタ クエリ問合せ 応答 クエリ処理 API処理 PostgreSQL JDBC Driver 応答タイムアウト setQueryTimeout メソッド リバースプロキシ設定 応答タイムアウト proxy_read_timeout APIへの問合せ 応答 APIへの問合せ 応答 NGINX Pod→アプリケーションPod→ Aurora PostgreSQLクラスタの順で接続するパターンの例 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  32. 31 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 6.接続パターンのタイムアウト制御方法を明確化する 1. インフラ基本設計 ◼応答タイムアウト値は大小関係を保って設定する アプリケーション ClusterIP Service NGINX Pod NGINXコンテナ アプリケーションPod アプリケーションコンテナ PostgreSQL JDBC Driver Aurora PostgreSQL クラスタ クエリ処理時間 アプリ処理時間 setQueryTimeout メソッド proxy_read_timeout アプリ処理時間 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  33. 32 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① 接続設計 6.接続パターンのタイムアウト制御方法を明確化する 1. インフラ基本設計 ◼一方、外部システムとの連携やコンポーネントの複雑化により、実際には全てのコンポーネント間 でタイムアウト値の大小関係を保つ事が難しいケースも少なくない ◼その様なケースでは、必要に応じて自動リトライ処理を行う、などを検討する ◼自動リトライ処理は、リトライ回数の制御、冪等性の確保、タイムアウト設計との整合性などに 十分注意する必要あり 1. システムで用意すべき接続パターンを整理する 2. 接続パターン内のコンポーネントを詳細化する 3. 接続パターンの通信プロトコルを明確化する 4. 接続パターンの認証/認可方法を明確化する 5. 接続パターンで使用する文字コードを明確化する 6. 接続パターンのタイムアウト制御方法を明確化する 接続設計 耐障害性設計 性能設計 拡張性設計
  34. 33 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 33 1ー②. 耐障害性設計
  35. 34 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 1. インフラ基本設計 ◼システム内の様々なコンポーネントに障害が発生した場面を想定し、その際のクラスタ構成の望 ましい復旧動作を整理する 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  36. 35 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 1.システムの単一障害点をクラスタ化する 1. インフラ基本設計 ◼システムを構成するコンポーネントのうち単一障害点(SPOF: Single Point of Failure)となりうる ものが無いか確認する ◼SPOFとなりうるものはクラスタ構成を取る事で冗長化させる ◼接続設計で抽出されたコンポーネントもSPOFになるものはクラスタ化を検討 ロードバランサ アプリケーションサーバ ロードバランサ アプリケーションサーバ アプリケーションサーバ DBサーバ SPOF 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  37. 36 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 2.クラスタの障害発生ポイントを洗い出す 1. インフラ基本設計 ◼クラスタを構成するコンポーネントのうち、単体で障害が発生する可能性があるものを障害発生 ポイントとして洗い出す コンポーネントの実体を理解する事が重要! 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  38. 37 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 2.クラスタの障害発生ポイントを洗い出す 1. インフラ基本設計 ◼アプリPodの並列クラスタの障害発生ポイントの洗い出しの例 アプリケーションPod → Kubernetesの論理的なリソース アプリケーションコンテナ →実体はプロセス サイドカーコンテナ →実体はプロセス 障害発生 ポイント 障害発生 ポイント 障害発生 ポイントではない アプリケーションClusterIP Service → Kubernetesの論理的なリソース 障害発生 ポイントではない コンテナの実体は ワーカーノード上で稼動するプロセス 単体で障害が発生する可能性がある アプリPodの並列クラスタ アプリケーションPod アプリケーションコンテナ サイドカーコンテナ ClusterIP ServiceやPodはKubernetesの仮想的なリソース 単体で障害が発生するものではない アプリケーションPod アプリケーションコンテナ サイドカーコンテナ 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  39. 38 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 2.クラスタの障害発生ポイントを洗い出す 1. インフラ基本設計 ◼EKSクラスタの障害発生ポイントの洗い出しの例 EKSワーカーノード(EC2) 障害発生ポイント kube-proxy →実体はコンテナ 障害発生 ポイント kubelet →実体はプロセス 障害発生 ポイント その他EKSクラスタに必要なコンテ ナ、プロセス 障害発生 ポイント EKSクラスタ EKS コントロール プレーン 障害発生 ポイント EKSワーカーノード(EC2) 障害発生ポイント kube-proxy →実体はコンテナ 障害発生 ポイント kubelet →実体はプロセス 障害発生 ポイント その他EKSクラスタに必要なコンテ ナ、プロセス 障害発生 ポイント 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  40. 39 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 3.クラスタの実行環境の障害発生ポイントを洗い出す 1. インフラ基本設計 ◼コンポーネントの稼働に影響を与える可能性がある、クラスタの実行環境の障害発生ポイントの 洗い出しを行う ◼前述のクラスタの障害発生ポイントの洗い出しは、クラスタを構成するコンポーネントに着目したミ クロな視点で行うもの ◼それに対して、 クラスタの実行環境の障害発生ポイントの洗い出しは、 検討の範囲を広げたマクロな視点で行う必要あり! 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  41. 40 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 3.クラスタの実行環境の障害発生ポイントを洗い出す 1. インフラ基本設計 ◼アプリPodの並列クラスタから見たEKSクラスタ障害の例 EKSワーカーノード(EC2) EKSワーカーノード(EC2) アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ アプリケーション ClusterIP Service アプリPodの並列クラスタ 障害発生 ポイント kube-proxy 障害発生 ポイント kubelet 障害発生 ポイント その他EKSクラスタに必要なコンテ ナ、プロセス 障害発生 ポイント EKS コントロール プレーン 障害発生 ポイント EKSクラスタ アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ EKSクラスタの障害発生ポイントを アプリPodの実行環境の障害発生ポイントとして考慮する 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  42. 41 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 3.クラスタの実行環境の障害発生ポイントを洗い出す 1. インフラ基本設計 ◼アプリPodの並列クラスタから見たAWS障害の例 EKS ワーカーノード EKS ワーカーノード 東京リージョン 障害発生ポイント アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ アプリケーション ClusterIP Service アプリPodの並列クラスタ アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ アプリケーション Pod アプリケーションコンテナ サイドカーコンテナ Availability Zone1 Availability Zone2 障害発生ポイント 障害発生 ポイント 障害時にアプリPodクラスタに影響を与える可能性があるため、 リージョン、AZも障害発生ポイントに含める 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  43. 42 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 4.障害発生ポイント毎のクラスタの復旧動作を整理する 1. インフラ基本設計 ◼障害発生から復旧までの流れを、障害発生ポイント毎に詳細に整理する ◼どのコンポーネント・パラメータが復旧動作のポイントなのかが浮び上がる ◼完全にダウンするケースもあれば、コンポーネントは起動しているがハングで正常に処理を行えない ケースも。考えられる障害内容それぞれに対して復旧動作を整理する どういった原理、仕組みで 復旧動作が行われるのか、 腹に落ちるまで理解する事が重要! 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  44. 43 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 4.障害発生ポイント毎のクラスタの復旧動作を整理する 1. インフラ基本設計 ◼アプリケーションPodの並列クラスタ内のコンテナハングの例 No. 復旧動作内容 ① アプリケーションPod内コンテナにハング発生 ② Readiness Probeのヘルスチェック処理が失敗 ③ Readiness Probe のヘルスチェック処理失敗を受けて、 kubeletは問合せ振り分け対象から当該アプリケー ションPodを除外 ④ 接続元のコンポーネントが問合せを行うと、クラスタ内 の障害が発生したPod以外のPodに振り分けられる ⑤ Liveness Probeのヘルスチェック処理が失敗 ⑥ Liveness Probe のヘルスチェック処理失敗を受けて、 kubeletはコンテナの再起動を行う ⑦ コンテナ再起動によりReadiness Probeのヘルスチェッ ク処理が成功 ⑧ Readiness Probe のヘルスチェック処理成功を受けて、 kubeletは振り分け対象にアプリケーションPodを組込 む ⑨ 接続元のコンポーネントが再度問合せを行うと、クラス タ内の障害が発生したPodにも振り分けられる 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  45. 44 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 5.クラスタのヘルスチェック設計を行う 1. インフラ基本設計 ◼復旧動作を行うための重要な設計ポイントの1つにヘルスチェックが挙げられる ◼復旧動作を自動発動するために必要となる、ヘルスチェックの設計項目を詳細に検討 ◼もし、復旧動作を自動で行いたいにも拘わらず、どこからヘルスチェックが行われるのか不明瞭で あれば、前述の復旧動作の流れの整理が不十分と言える 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  46. 45 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 5.クラスタのヘルスチェック設計を行う 1. インフラ基本設計 ◼Kubernetes上でPodを稼動させるためには、Kubernetesのヘルスチェック機能である、 Liveness Probe, Readiness Probeを適切に設定する必要あり パラメータ 説明 tcpSocket/httpGet.scheme ヘルスチェックのプロトコル httpGet.path ヘルスチェックのパス periodSeconds ヘルスチェックを行う間隔 failureThreshold ヘルスチェックが何回NGであればコンテナに障害が発生したとみなすか timeoutSeconds ヘルスチェックのタイムアウト Liveness Probe, Readiness Probeのパラメータの一部 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  47. 46 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 5.クラスタのヘルスチェック設計を行う 1. インフラ基本設計 ◼ プロトコルは原則業務通信と同一 ◼ パスはコンテナの正常稼動を確認できるもの ヘルスチェック𝑵𝑮の回数 − 𝟏 × ヘルスチェックの間隔 + ヘルスチェックのタイムアウト + 障害コンテナの復旧動作に掛る時間 コンテナ障害発生から 復旧動作完了までの最大時間 ◼ 障害復旧の目標時間に収まる様に、 ヘルスチェックの間隔、ヘルスチェックNGの回数、 ヘルスチェックのタイムアウト値を検討 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  48. 47 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 6.クラスタの分散配置設計を行う 1. インフラ基本設計 ◼コンポーネントが偏って配置されると、実行環境で障害が発生した場合に、多数のコンポーネント に影響が出てしまい、想定した復旧動作を行えない恐れがある ◼それを避けるために、実行環境の障害発生ポイントを複数跨がる様にコンポーネントを分散配 置する 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  49. 48 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 6.クラスタの分散配置設計を行う 1. インフラ基本設計 ◼アプリPodの並列クラスタの分散配置の例 アプリケーション ClusterIP Service アプリPodの並列クラスタ アプリケーションPod アプリケーションコンテナ サイドカーコンテナ Availability Zone1 Availability Zone2 アプリケーションPod topologySpreadConstraints - AZ - ワーカーノード EKSワーカーノード(EC2) 障害発生 ポイント EKSワーカーノード(EC2) EKSワーカーノード(EC2) topologySpreadConstraintsを用いて AZ,ワーカーノード間で分散して アプリケーションPodを起動させる 障害発生ポイント 障害発生ポイント 障害発生ポイント アプリケーションPod アプリケーションコンテナ サイドカーコンテナ アプリケーションコンテナ サイドカーコンテナ 障害発生ポイント 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  50. 49 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 7.クラスタ接続元コンポーネントの設計ポイントを検討する 1. インフラ基本設計 ◼自動リトライ ⚫ 自動リトライを行うか、関連パラメータをどの様に設定するかが設計ポイント ⚫ 更新系問合せを自動リトライするためには、冪等性の考慮が必要 接続元コンポーネント コンポーネント (サーバorコンテナor etc) クラスタ コンポーネント (サーバorコンテナor etc) コンポーネント (サーバorコンテナor etc) ・ ・ ・ 自動リトライ 機能 更新系問合せ 応答 更新系問合せ 応答 更新系問合せ 応答 自動リトライ 自動リトライ 障害発生 データストア データ挿入 データ挿入 接続元コンポーネントの自動リトライにより、 データの二重登録が行なわれてしまう 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  51. 50 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② 耐障害性設計 7.クラスタ接続元コンポーネントの設計ポイントを検討する 1. インフラ基本設計 ◼サーキットブレーカー ⚫ 障害を検知した際に問合せを自動で遮断し、スレッド涸渇を回避する 接続元コンポーネント サーキットブレーカー機能 問合せ アプリケーション サーキットブレーカー:無効 サーキットブレーカー発動 サーキットブレーカー:有効 スレッド 処理実施 問合せ 即時エラー応答 問合せ 応答 スレッド 処理実施 待機 問合せ 問合せ サーキットブレーカー導入で スレッド枯渇を回避する スレッド 処理実施 問合せ 即時エラー応答 問合せ 応答 コンポーネント (サーバorコンテナor etc) コンポーネント (サーバorコンテナor etc) ・ ・ ・ 障害発生 コンポーネント (サーバorコンテナor etc) クラスタ 接続設計 耐障害性設計 性能設計 拡張性設計 1. システムの単一障害点をクラスタ化する 2. クラスタの障害発生ポイントを洗い出す 3. クラスタの実行環境の障害発生ポイントを洗い出す 4. 障害発生ポイント毎のクラスタの復旧動作を整理する 5. クラスタのヘルスチェック設計を行う 6. クラスタの分散配置設計を行う 7. クラスタ接続元コンポーネントの設計ポイントを検討する
  52. 51 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 51 1ー③. 性能設計
  53. 52 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 1. インフラ基本設計 ◼性能要件を満たすために必要となる、各コンポーネントのCPU/メモリ等のスペックや台数を検討 する。これらの検討は一般的にサイジングと呼ばれる 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  54. 53 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 1. インフラ基本設計 ◼性能要件を満たすために必要となる、各コンポーネントに割り当てるCPU数やメモリ容量等のス ペックやコンポーネントの台数を検討する 1. 1台のサーバ/コンテナのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する サイジングが不十分だと 余計にクラウド利用料を払っている事に 気付けない恐れあり!
  55. 54 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 1.サーバ/コンテナ1台あたりのスペックを検討する 1. インフラ基本設計 ◼考慮ポイントは以下 ①更改前・類似システムのスペックを参考にする ②ソフトウェアの推奨スペックを確認する ・実績あるスペックを参考にする事で、リソース不足に起因する障害発生のリスクを抑えられる ・既存システムの稼働統計情報や性能テストの結果などから、何処にボトルネックがあるのかの確認も重要 ・コンテナのスペックがソフトウェアの推奨を満たせているか公式ドキュメントやサポート窓口経由でチェック 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  56. 55 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 2.サーバ/コンテナ1台あたりのスループットを算出する 1. インフラ基本設計 ◼1台あたりのスペックが確定したら、それがどれだけのスループットを出せるのかを算出する ⚫ 秒間あたりトランザクション数、API応答数 など ◼更改前システム/類似システム/プロトタイプの情報を元に算出 更改前システム/類似システム/プロトタイプ コンテナ スペック ・仮想CPU数: 200m ・メモリ容量: 1Gi コンテナ スペック ・仮想CPU数: 400m ・メモリ容量: 1.5Gi ・最大スループット ・最大スループット出力時のCPU使用率 稼動統計情報/性能テスト結果 スペック差異 出力可能な スループット 稼動統計情報とスペック差異から、出力可能なスループットを算出する 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  57. 56 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 3.性能要件を満たすためにサーバ/コンテナが何台必要か算出する 1. インフラ基本設計 ◼システムの性能要件を満たすためには、どれだけの台数用意する必要があるのかを算出 ◼性能要件として定められたスループットを、算出した1台あたりのスループットで割る ◼Deploymentのspec.replicasの値として設定 ◼場合によっては性能要件を越えるリクエスト発生や障害発生時を考慮して、追加の台数を起 動させる事も検討 apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment spec: replicas: 4 Deploymentマニフェストファイル 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  58. 57 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 4.オーバーコミットの許容範囲を検討する 1. インフラ基本設計 ◼Kubernetesのスペック設定のパラメータは2段階ある ⚫ Requests: 起動時からコンテナに確保されるリソースの最低保証値 ⚫ Limits: コンテナに割り当て可能なリソースの上限値 Pod アプリケーションコンテナ 仮想CPU数 メモリ容量 Limit 1,000m Request 200m Limit 800Mi Request 600Mi Requestsでコンテナに確保される 最低限のリソースを指定する Limitsでコンテナに割り当てる リソースの上限を指定する 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  59. 58 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 4.オーバーコミットの許容範囲を検討する 1. インフラ基本設計 ◼コンテナ稼動に必要なワーカーノードの台数やスペックは、Requests値の積み上げに依存 ◼Requestsを小さく設定する事で、ワーカーノードの総リソースを抑えられる ◼所謂オーバーコミットが可能 ◼オーバーコミットで、クラウド利用料を抑える事ができる ワーカーノードの総リソース 仮想CPU数:XX メモリ容量:XX 仮想CPU数:XX メモリ容量:XX 仮想CPU数:XX メモリ容量:XX 仮想CPU数:XX メモリ容量:XX 仮想CPU数:XX メモリ容量:XX Requestsで指定したコンテナの総リソース 仮想CPU数:YYメモリ容量:YY 仮想CPU数:YYメモリ容量:YY 仮想CPU数:YYメモリ容量:YY 仮想CPU数:YYメモリ容量:YY 仮想CPU数:YYメモリ容量:YY 仮想CPU数:ZZ メモリ容量:ZZ サイジングしたコンテナの総リソース 仮想CPU数:ZZ メモリ容量:ZZ 仮想CPU数:ZZ メモリ容量:ZZ サイジングしたコンテナの総リソースより、ワーカーノードの総リソースが小さい → オーバーコミット 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  60. 59 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ③ 性能設計 4.オーバーコミットの許容範囲を検討する 1. インフラ基本設計 ◼許容範囲は、クラウド利用料とリソース枯渇のリスクを考慮して決める必要あり ⚫ 開発環境のオーバーコミットの度合いを本番環境よりも高める ⚫ コンテナの重要度で度合いを変化させる事で、信頼性とクラウド利用料のバランスを取る Requestsで 指定した コンテナの総リソース ワーカーノードの 総リソース サイジングした コンテナの 総リソース Requestsで 指定した コンテナの総リソース ワーカーノードの 総リソース サイジングした コンテナの 総リソース 開発環境 本番環境 開発環境のRequestsを本番環境より小さくする。 その結果必要なワーカーノードが本番環境より少なくなる。 システムの機能提供に 重要なコンテナ 仮想CPU数 メモリ容量 Limit Request Limit Request RequestsとLimitsの差を小さくする事で、 リソースが確保できないリスクを極小化する システムの機能提供に 重要でないコンテナ 仮想CPU数 メモリ容量 Limit Request Limit Request RequestsとLimitsの差を大きくする事で、 オーバーコミットの度合いを大きくする 接続設計 耐障害性設計 性能設計 拡張性設計 1. サーバ/コンテナ1台あたりのスペックを検討する 2. サーバ/コンテナ1台あたりのスループットを算出する 3. 性能要件を満たすために サーバ/コンテナが何台必要か算出する 4. オーバーコミットの許容範囲を検討する
  61. 60 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 60 1ー④. 拡張性設計
  62. 61 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 1. インフラ基本設計 ◼拡張性設計では、迅速なリソース拡張のための仕組みや手順を整理する ◼クラウド利用料の最適化には、クラウドやKubernetesの機能を活用し、システムの処理量に自 動でリソースを追従させる事が効果的 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する 時間 システムの 処理量 拡 張 縮 小 リソース 拡 張 拡 張 拡 張 縮 小 縮 小
  63. 62 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 1. インフラ基本設計 ◼拡張性設計では、迅速なリソース拡張のための仕組みや手順を整理する ◼クラウド利用料の最適化には、クラウドやKubernetesの機能を活用し、システムの処理量に自 動でリソースを追従させる事が効果的 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する 時間 システムの 処理量 拡 張 縮 小 リソース 拡 張 拡 張 拡 張 縮 小 縮 小 クラウドが持つリソース確保の迅速性、 容易性を最大限享受するには 緻密な拡張性設計が重要!
  64. 63 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コンポーネント (サーバorコンテナor etc) リソース CPU数:2 メモリ: 4GiB OS ソフトウェア アプリケーション ④ 拡張性設計 1.リソース拡張の基本方針を検討する 1. インフラ基本設計 ◼スケールアップとスケールアウトのどちらでリソース拡張を行うのかをクラスタ単位で検討 ◼今後システムの需要が大きく拡大し、大きなリソース拡張を実施する可能性がある場合には、ス ケールアウトを基本路線とすべき(スケールアップはOS・ソフトウェアの制約に抵触する可能性あり) コンポーネント (サーバorコンテナor etc) リソース クラスタ コンポーネント CPU数:2 メモリ:4GiB スケール アップ CPU数:4 OS ソフトウェア アプリケーション 選択できるスペックには上限 がある 制約に抵触し、リソースを増 強してもそのリソースを十分に 使い切れない NEW 自動スケールアウト機能 スケールアウト 自動スケールアウト機能を活用して自動化が行いやすい コンポーネント コンポーネント (サーバorコンテナor etc) リソース CPU数:2 メモリ: 4GiB OS ソフトウェア アプリケーション クラスタ コンポーネント (サーバorコンテナor etc) リソース CPU数:2 メモリ: 4GiB OS ソフトウェア アプリケーション コンポーネント (サーバorコンテナor etc) リソース CPU数:2 メモリ: 4GiB OS ソフトウェア アプリケーション スペックは変更無いためOS・ソフトウェアの制約に抵触しない スケールアップ スケールアウト 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  65. 64 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 1.リソース拡張の基本方針を検討する 1. インフラ基本設計 ◼ロードバランサと複数サーバ/コンテナによる並列クラスタ構成はスケールアウトが比較的容易 ◼以下の点が迅速なスケールアウトを妨げる要因となるため注意が必要 ロードバランサ サーバ/コンテナ サーバ/コンテナ NEW IPアドレス リソース OS ソフトウェア アプリケーション 監視 ソフトウェア サーバ/コンテナ IPアドレスが自動で設定されない 使われていないIPアドレスの選定と サーバ/コンテナへの設定を手動で行う必要がある 監視設定を手動で行う必要がある OSやソフトウェアのライセンス体系が台数や仮想CPUコア数等に基づく 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  66. 65 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 2.リソース拡張を行う契機を整理する 1. インフラ基本設計 ◼契機を明確化しておく事で、躊躇せず迅速にリソース拡張を行える ◼システムの特性/処理の内容から、クラスタ毎にリソース拡張の契機を検討する カテゴリ 指標の例 説明 CPU CPU使用率 CPUが枯渇すると応答時間の劣化等に繋がる可能性がある メモリ メモリ使用率 メモリ逼迫はOOM(Out of Memory)を招く恐れがある ネットワーク ネットワークI/O・送受信量 ネットワークがボトルネックなると、応答時間の劣化や処理エラーに繋がる可能性がある ディスク ディスクI/O・読み書き量 ストレージへのアクセス集中時にボトルネックとなる可能性がある 問合せの数 秒間あたりのAPI問合せ数 主にオンライン処理で、秒間の問合せ数をリソース拡張の指標にする レイテンシ 問合せに対する応答時間 問題となる応答時間を閾値に設定する(例:500ms以上など) エラー率 HTTP 5xxエラー率 サービスが正常に処理できなくなる兆候を判断できる 同時接続数 DB同時接続数 DBサーバに設定した最大同時接続数を上回る数のDB接続は失敗する 日時 処理量がピークになる時間帯 処理量がピークになる時間帯が固定されているシステムに対し、その時間帯に先立ちリ ソース拡張を行う事が有効な場合がある リソース拡張の契機となる指標の例 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  67. 66 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 2.リソース拡張を行う契機を整理する 1. インフラ基本設計 ◼リソース拡張には一時的なものと恒久的なものがある ◼一時的なリソース拡張は、リクエストが上昇した場合や、リソースを大きく消費した場合、それら が見込まれる日時に先立って行われる事が一般的 ◼一時的なリソース拡張に対して、リソース縮小を行う契機も合せて整理 クラスタ内に含まれる全てのコンテナのCPU使用率を平均したものが、 90%を越えたら 毎月25日の9時には問合せ量が大きく上昇するので、 その30分前である8時30分に コンテナ1台が処理した単位時間あたりの問合せ数が、 300を越えたら クラスタ内に含まれる全てのコンテナのCPU使用率を平均したものが、 50%を下回ったら 毎月25日の11時にはリクエスト量が落ち着くので、 その30分後である11時30分に コンテナ1台が処理した単位時間あたりの問合せ数が、 50を下回ったら 一時的なリソース拡張の契機の例 リソース縮小の契機の例 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  68. 67 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 2.リソース拡張を行う契機を整理する 1. インフラ基本設計 ◼恒久的なリソース拡張は、維持運用フェーズのインフラキャパシティ管理として実施 時間 CPU使用率 80% 2ヶ月後 1ヶ月後 現在 2ヶ月後にCPU使用率が80%を上回る事が予測されるため恒久的なリソース拡張を計画する 最大CPU使用率の 近似直線 需要予測 これまでの使用実績データを元に、サーバ1台あたりの最大CPU使用率の近似直線を作成する。 近似直線に需要予測を加味したものが2ヶ月後にCPU使用率80%を越える事が予想される場合にリソース拡張を実施 恒久的なリソース拡張の契機の例 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  69. 68 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 3.リソース拡張/縮小に必要な作業を洗い出す 1. インフラ基本設計 ◼拡張/縮小のための具体的な作業を詳細に洗い出す ◼自動化のインプットとしても、拡張/縮小作業の洗い出しは非常に重要 CICDパイプライン アプリケーションPod アプリケーション ClusterIP Service アプリケーションPod アプリケーションPod アプリDeployment apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment spec: replicas: 3 → 4 Deploymentマニフェストファイル ① ② 変更を適用 アプリケーションPod NEW ③ No. スケールアウト作業内容 ① 該当アプリケーションのDeploymentマニフェスト ファイル内のspec.replicasの値を、スケールアウト 後のアプリケーションPodの数に書き換える ② CICDパイプラインを用いて、修正したDeployment マニフェストファイルの変更を適用する ③ k8sクラスタは、Deploymentマニフェストファイルの 変更内容に従い、アプリPodを追加する。 アプリケーションPodのスケールアウトの例 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  70. 69 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 3.リソース拡張/縮小に必要な作業を洗い出す 1. インフラ基本設計 ◼接続元のコンポーネントの作業も確認する事で、実際のリソース拡張/縮小作業時に、考慮漏 れによる問題を避ける事ができる Aurora PostgreSQLクラスタのスケールアップ作業の例 No. スケールアップ作業内容 ① AWSマネジメントコンソールから2号機インスタンス のインスタンスタイプを上位のものに変更する ② Aurora PostgreSQLクラスタのフェイルオーバを行 う。これにより、1号機インスタンスをプライマリインス タンスからレプリカインスタンスに降格させる ③ 1号機インスタンスのインスタンスタイプを上位のも のに変更する ④ 再度Aurora PostgreSQLクラスタのフェイルオーバ を行う。これにより、1号機インスタンスを再度プライ マリインスタンスに昇格させる ⑤ 管理サーバからアプリケーションPodの再起動を行 う。これによりAurora PostgreSQLクラスタとのDB コネクションの再確立を行う 接続元であるアプリPodの作業 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  71. 70 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 4.拡張/縮小作業がシステムの機能提供へ及ぼす影響を確認する 1. インフラ基本設計 ◼一時的なリソース拡張/縮小作業は、システムの機能提供中に求められる事が多い ◼その場合でも、機能提供に影響を与えない様に作業を行う必要がある 時間 システムの 処理量 リソース 拡 張 縮 小 一時的なリソース拡張/縮小作業はシステムの機能提供中に求めらえる事が多い → システムの機能提供に影響を与えずに作業を行う必要がある 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  72. 71 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 4.拡張/縮小作業がシステムの機能提供へ及ぼす影響を確認する 1. インフラ基本設計 ◼並列クラスタのスケールインを行う場合、実行中の処理がエラーになる恐れがあり ◼対策の1つとして、実行中の処理が完了するまでの猶予時間を待ってからスケールインを行う ◼KubernetesではPreStopフックを使ったアプリケーションPod停止の猶予時間設定が有効 ロードバランサ サーバ/コンテナ サーバ/コンテナ リソース OS ソフトウェア アプリケーション サーバ/コンテナ 実行中 処理 実行中 処理 エラー エラー 並列クラスタの スケールインを行う場合、 実行中の処理が エラーになる恐れがあり スケールイン のため停止 アプリケーション ClusterIP Service アプリケーションPod アプリケーションPod アプリケーションPod コンテナ ソフトウェア アプリケーション 実行中 処理 実行中 処理 PreStopフック: 60秒sleep 完了 完了 PreStopフックにより、 Podの停止処理が開始されてから 60秒たった後で実際にコンテナが停止する 60秒sleepが実行されている間に、 アプリケーションの処理は完了する スケールイン のため停止 K8s では 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  73. 72 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 5.リソース拡張/縮小の”作業”の自動化を検討する 1. インフラ基本設計 ◼作業を自動化する事で工数・手間、作業時間、作業ミスの確率を極小化できる ◼工数と時間を減らせる分、一時的なリソース拡張が行い易くなる ◼Kubernetesの機能のHorizontal Pod Autoscaler(HPA)を用いる事で、Podの自動スケールア ウト、スケールインが可能 アプリケーションPod アプリケーション Horizontal Pod Autoscaler アプリDeployment アプリケーションPod アプリケーションPod スケールアウト/ インを指示 スケールアウト/イン作業を自動化 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  74. 73 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ④ 拡張性設計 6.リソース拡張/縮小の”発動”の自動化を検討する 1. インフラ基本設計 ◼前のステップで整理した、契機(CPU使用率やリクエスト数等)を自動発動の設定に落とし込む ◼発動を自動化する事で、より処理量に追従したリソース拡張・縮小を行える Pod Horizontal Pod Autoscaler Deployment 閾値 メトリクス 対象Deployment 等 設定 設定 Prometheus Adapter for Kubernetes Metrics APIs Kubernetes カスタムメトリクス 変換 Prometheus メトリクス Prometheusメトリクスを契機としてHPAを設定するイメージ ①Prometheus Adapter for Kubernetes Metrics APIs を導入し、Prometheusメトリクスを、 HPAが連携可能なKubernetesのカスタムメトリクスに変換する。 Pod Pod ②カスタムメトリクスをHPAのマニフェストに設定する 閾値は、予め整理したリソース拡張/縮小の契機のものを使用する 接続設計 耐障害性設計 性能設計 拡張性設計 1. リソース拡張の基本方針を検討する 2. リソース拡張を行う契機を整理する 3. リソース拡張/縮小に必要な作業を洗い出す 4.拡張/縮小作業が システムの機能提供へ及ぼす影響を確認する 5. リソース拡張/縮小の”作業“の自動化を検討する 6. リソース拡張/縮小の”発動”の自動化を検討する
  75. 74 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 74 2. インフラテスト
  76. 75 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラ設計・テストのV字モデル 2. インフラテスト ◼インフラ設計工程とテスト工程はV字で表現できる ◼設計工程とマッチしたテストを実施 時間経過 インフラ 単体 テスト インフラ 連結 テスト 総合 テスト インフラ 構築 パラメータ 設計 インフラ 基本 設計 要件 定義 インフラ設計工程 インフラテスト工程 詳細 概要 本日の説明範囲
  77. 76 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラ設計・テストのV字モデル 2. インフラテスト ◼インフラ設計工程とテスト工程はV字の形で表現する事ができる ◼設計工程とマッチしたテストを実施 時間経過 インフラ 単体 テスト インフラ 連結 テスト 総合 テスト インフラ 構築 パラメータ 設計 インフラ 基本 設計 要件 定義 インフラ設計工程 インフラテスト工程 詳細 概要 設計した内容は、その通りに動作して はじめて意味を持ちます!
  78. 77 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    インフラテストの進め方 2. インフラテスト ◼それぞれのテスト工程で、テスト計画から結果評価まで行う ◼品質に問題無い事を確認した後、次のテスト工程を開始する事が基本 ◼確認漏れや手戻り無く、効率的にインフラの品質を確認できる 1.テストを計画する 2.テストの事前準備を行う 3.テストを実施する 4.テスト結果を評価する インフラ 単体テスト 計 画 準 備 実 施 評 価 インフラ 連結テスト 計 画 準 備 実 施 評 価 総合テスト 計 画 準 備 実 施 評 価 テスト結果の評価を行い、 十分品質を確保できている事を確認してから、次のテストを開始する 本日の説明範囲 (テスト分類/テストケース作成の考え方/テストケース例)
  79. 78 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 78 2ー①. インフラ単体テスト
  80. 79 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① インフラ単体テスト 2. インフラテスト ◼システム内の各コンポーネントが設計通りに構築されているか、単体での動作を問題無く行える かを確認 ◼インフラ品質の積み上げの土台として、まずは各コンポーネントの品質を確認する アプリケーション インフラ コンポーネント コンポーネント コンポーネント システム インフラ単体テスト システム内に構築するコンポーネントそれぞれで以下を確認 ・設計通りに構築されているか ・単体での動作を問題無く行う事ができるか インフラ品質の土台として、 まずは各コンポーネントの品質を確認
  81. 80 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① インフラ単体テスト テスト分類 2. インフラテスト ◼パラメータ確認テストで、コンポーネントのパラメータが設計通りに設定されているかを確認 ⚫ IaCでインフラ構築を自動化している場合でも、コードの誤り等が原因で設計通りにインフラが構築されないリス クあり。そのためIaCを用いる場合でもパラメータ確認テストは必要 ◼基本機能確認テストで、コンポーネント単体の期待動作を行えるか確認 コンポーネント (サーバorコンテナor etc) パラメータ パラメータ設計どおりに コンポーネントのパラメータは設定されているか 比較 パラメータ設計書 コンポーネント コンポーネント単体は期待する動作を 問題無く行えるか 通信のルーティング コンポーネント DNSリクエストへの応答 コンポーネント ログ転送 コンポーネント HTTPリクエストへの応答 Etc・・・・・ 確認 確認 確認 確認 パラメータ確認テスト 基本機能確認テスト
  82. 81 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ① インフラ単体テスト テストケースの例 2. インフラテスト ➢ 狙い:NGINX のKubernetesマニフェストがパラメータ設計で整理したものと同一かどうかを確認する。 ➢ 確認手順:テスト環境にデプロイしたNGINX に関連するDeployment等のAPIリソースのマニフェストをkubectlコマン ドで出力する。出力されたマニフェストの設定内容と、パラメータ設計で整理したものとを比較する。 ➢ 期待結果:kubectlコマンドで出力されたマニフェストの設定内容が、パラメータ設計の内容と同一である事。 ➢ エビデンス:kubectlコマンドの出力ログ パラメータ確認テスト: NGINX のKubernetesマニフェスト確認 ➢ 狙い: EKSクラスタ上に構築したNGINX Podが、HTTPS問合せの応答を正常に行う事ができるかを確認する。 ➢ 確認手順:テスト環境のEKSクラスタ上に構築したNGINX Podに対して、テスト用PodからHTTPS問合せを行う。 ➢ 期待結果: NGINX Podからステータスコードが200 OKのHTTPS応答が返却される事。 ➢ エビデンス:テスト用Podの操作ログ、NGINX Podのログ 基本機能確認テスト: NGINX PodによるHTTPS応答
  83. 82 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 82 2ー②. インフラ連結テスト
  84. 83 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 2. インフラテスト ◼インフラ連結テストでは複数コンポーネントが協調動作を行い、期待する動作を問題無く行える かを確認する アプリケーション インフラ コンポーネント コンポーネント コンポーネント システム インフラ連結テスト 複数コンポーネントが協調動作を行い、期待する動作を問 題無く行う事ができるかを確認 ・コンポーネント間で想定通り接続できるか ・コンポーネントに問題が発生した場合に、期待する復旧 動作が行えるか ・クラスタは想定通りに自動で性能拡張/縮小するか Etc..
  85. 84 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト テスト分類 2. インフラテスト ◼インフラ連結テストの分類はインフラ基本設計の分類とリンクする 接続設計 可用性設計(耐障害性設計) 性能設計 拡張性設計 運用設計 セキュリティ設計 災害復旧設計 インフラ基本設計 接続テスト 障害テスト 性能テスト 拡張テスト 運用テスト セキュリティテスト 災害復旧テスト インフラ連結テスト 本日の説明範囲
  86. 85 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト アプリケーションに設定されるインフラ基本設計の内容の確認 2. インフラテスト ◼アプリマニフェストにインフラ基本設計の内容を設定する ◼インフラ連結テストで確認できない場合は、総合テストに申し送る等の対応が必要 アプリケーションPod ・Podの数: 3 ・ワーカーノード間でPodを分散配置する ・起動しておくべき最小Pod数: 2 ・コンテナに対して5秒おきにHTTPヘルスチェック送信 ・・・ ・コンテナあたりの上限CPU: 0.5vCPU ・コンテナあたりの上限メモリ容量: 1GiB ・・・ ・CPU使用率が80%以上になったらPodの台数を増やす ・CPU使用率が50%以下になったらPodの台数を減らす ・コンテナ停止前に60秒Sleepする ・・・ アプリケーションPod関連のマニフェスト(イメージ) 耐障害性設計の パラメータ 性能設計の パラメータ 拡張性設計の パラメータ 適用 アプリケーション コンテナ アプリケーションPodに関連するマニフェストに、 インフラ基本設計で整理した設計観点を設定 する必要がある ・ ・ ・
  87. 86 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト アプリケーションに設定されるインフラ基本設計の内容の確認 2. インフラテスト ◼Kubernetesを用いる場合、アプリマニフェストにインフラ基本設計の内容を設定する必要がある ◼インフラ連結テストで確認できない場合は、総合テストに申し送る等の対応が必要 アプリケーションPod ・Podの数: 3 ・ワーカーノード間でPodを分散配置する ・起動しておくべき最小Pod数: 2 ・コンテナに対して5秒おきにHTTPヘルスチェック送信 ・・・ ・コンテナあたりの上限CPU: 0.5vCPU ・コンテナあたりの上限メモリ容量: 1GiB ・・・ ・CPU使用率が80%以上になったらPodの台数を増やす ・CPU使用率が50%以下になったらPodの台数を減らす ・コンテナ停止前に60秒Sleepする ・・・ アプリケーションPod関連のマニフェスト(イメージ) 耐障害性設計の パラメータ 性能設計の パラメータ 拡張性設計の パラメータ 適用 アプリケーション コンテナ アプリケーションPodに関連するマニフェストに、 インフラ基本設計で整理した設計観点を設定 する必要がある ・ ・ ・ アプリ/基盤チーム間でポテンヒットになりがち! 確認漏れが無い様に歩み寄りが必要!
  88. 87 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 1.接続テスト 2. インフラテスト ◼接続設計でコンポーネント間の接続パターンを詳細に整理している ◼接続パターンをインプットに、整理した通りに接続できるか確認 接続パターン コンポーネント コンポーネント コンポーネント コンポーネント 接続パターン 接続パターン ・ ・ ・ 接続設計通りに各接続パターンの接続が行えるのかを確認する 確 認 確 認 確 認
  89. 88 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 1.接続テスト/テストケース作成の考え方 2. インフラテスト ◼基本的に接続設計で整理した全ての接続パターンをテスト対象にする ◼接続パターン毎に、整理した項目通りに接続できるのか、機能するのかを確認するためのテスト ケースを作成 経由するコンポーネント 通信プロトコル 認証/認可方法 文字コード タイムアウト制御 Etc… 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  90. 89 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 1.接続テスト/テストケースの例 2. インフラテスト ➢ 狙い: ALBからNGINX Podへの接続を接続設計通りに行う事ができるか確認する。 ➢ 確認手順: テスト用サーバからALBに対してHTTPS問合せを行う。 ➢ 期待結果: NGINX Podからステータスコードが200 OKの応答が返却される事。その際、接続設計で整理した項目 通りにALBとNGINX Podとの間で問合せ・応答のやりとりが行われている事。 ➢ エビデンス: テスト用サーバの操作ログ、ALBのログ、NGINX Podのログ ALBからNGINX Podへの接続 ➢ 狙い: NGINX PodからアプリケーションPodに接続するパターンで整理した、NGINX Podのタイムアウトが接続設計 通りに行われる事を確認する。 ➢ 確認手順: 疑似的な処理遅延を発生させる様に設定した接続テスト用アプリケーションPodをテスト環境のEKSク ラスタ上にデプロイする。NGINX Podは問合せをアプリケーションPod(正確にはClusterIP Service)にリバースプロキシ する様に設定する。テスト用PodからNGINX Podに対して問合せを行う。 ➢ 期待結果: NGINX Podからステータスコードが504 Gateway Timeoutの応答が返却される事。接続設計で整理し た値でNGINX Podのタイムアウトが発生している事。 ➢ エビデンス: テスト用Podの操作ログ、NGINX Podのログ NGINX Podのタイムアウト 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  91. 90 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 2.障害テスト 2. インフラテスト ◼耐障害性設計で、障害発生ポイント毎に期待する復旧動作を整理している ◼障害を擬似的に発生させ、想定通り復旧動作を行うかを確認する クラスタ コンポーネント コンポーネント コンポーネント コンポーネント クラスタ ・ ・ ・ 障害発生 ポイント 疑似的な 障害発生 復旧動作 復旧動作 クラスタ 耐障害性設計通りに各クラスタが復旧動作を行えるのかを確認する 確 認 確 認
  92. 91 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 2.障害テスト/テストケース作成の考え方 2. インフラテスト ◼クラスタ毎に整理した障害発生ポイント・復旧動作単位でテストケースを作成する ◼処理中に障害が発生した際の動作を確認するケースも場合によって用意 アプリケーションPod アプリケーションコンテナ Aurora PostgreSQL 1号機インスタンス Aurora PostgreSQL 2号機インスタンス Aurora PostgreSQLクラスタ アプリケーションPod アプリPodの並列クラスタ トランザクション処理 Aテーブル更新クエリ実行 Bテーブル更新クエリ実行 Cテーブル更新クエリ実行 Aテーブル更新 Bテーブル更新 コンテナダウン発生 Aテーブルロールバック Bテーブルロールバック トランザクション処理 ・ ・ ・ 問合せ 応答 問合せ 応答 トランザクション処理中にアプリケーションコンテナダウンが発生した場合、 処理がロールバックされる事を期待する 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  93. 92 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 2.障害テスト/テストケースの例 2. インフラテスト ➢ 狙い: アプリケーションPodの並列クラスタを対象に、1つのPod内のアプリケーションコンテナがダウンした際のクラスタの 復旧動作を確認する。 ➢ 確認手順:テスト用サーバから kubectl execコマンドを用いて対象コンテナへのシェルを獲得する。シェル内でkill -9 1 コマンドを実行し、対象コンテナのメインプロセスを終了させる。 ➢ 期待結果: メインプロセスが終了するため、対象コンテナが異常終了する事。その後 kubelet によって再起動が行わ れ、対象コンテナが自動的に正常稼働の状態に復旧される事。 ➢ エビデンス: テスト用サーバの操作ログ、テスト対象コンテナのログ アプリケーションPodの並列クラスタにおける、アプリケーションコンテナダウン発生時の復旧動作確認 ➢ 狙い: アプリケーションPodとAurora PostgreSQLクラスタとの間で行われるトランザクション処理の復旧動作が設計 通りに行われるのか確認する。 ➢ 確認手順: アプリケーションPod上でAurora PostgreSQLクラスタに対するテーブル更新問合せを含めたトランザク ション処理を実行する。トランザクション処理を実行している最中にアプリケーションPod内のアプリケーションコンテナを ダウンさせる。 ➢ 期待結果: Aurora PostgreSQLクラスタに対するテーブル更新がロールバックされる事を確認する。 ➢ エビデンス: アプリケーションPodのログ、トランザクション処理の更新対象のテーブルの内容が出力されたログ アプリケーションPod-Aurora PostgreSQLクラスタ間で行われるトランザクション処理の復旧動作確認 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  94. 93 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト 2. インフラテスト ◼性能設計ではサイジングを行い、各コンポーネントのスペックと台数を決めている ◼サービス稼働を想定したボリュームの処理を実行し、性能に関連する観点を確認する アプリケーション インフラ コンポーネント ※サイジング通りの スペック/台数 テスト環境 サービス稼働を想定した ボリュームの処理を実行 確認 コンポーネント ※サイジング通りの スペック/台数 コンポーネント ※サイジング通りの スペック/台数 サイジングしたコンポーネントで 性能要件を満せるのか どこまでの性能で 処理を行う事ができるのか 長期間安定した性能で 処理を行えるか
  95. 94 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケース作成の考え方 2. インフラテスト ◼テストケースは、性能テストの種類をベースに作成する ◼オンライン処理性能テスト ⚫ サービス稼働を想定した量の擬似的な問合せを行い、スループットや、レスポンスタイム等のオンライン処理の性 能要件を満たせるか、リソース使用量は想定範囲かなどを確認 インフラ アプリケーション テスト環境 サービス稼働を想定した オンライン処理を実行 負荷テストツール テストシナリオ サービス稼働を 想定した量の問合せ コンポーネント コンポーネント コンポーネント 確認 ・オンライン処理の性能要件を満たす事ができるか (スループット、レスポンスタイム Etc..) ・エラーは発生していないか 確認 ・リソース使用量は想定の範囲に収まっているか ・エラーは発生していないか テストデータ 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  96. 95 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケース作成の考え方 2. インフラテスト ◼バッチ処理性能テスト ⚫ サービス稼働相当の件数・構造・偏りを持ったテストデータを用いてバッチ処理を実行し、所定の時間内に完了 するか、リソース使用量は想定範囲かなどを確認 ⚫ 必要に応じてバッチ処理を並走させるテストを実施 インフラ アプリケーション テスト環境 バッチ 処理A コンポーネント コンポーネント コンポーネント テストデータ バッチ 処理B バッチ 処理C ・・・・ 確認 ・バッチ処理を並走させても全て所定の時間内に完了するか ・エラーは発生していないか 確認 ・リソース使用量は想定の範囲に収まっているか ・エラーは発生していないか 複数のバッチ処理を並走させる 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  97. 96 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケース作成の考え方 2. インフラテスト ◼オンライン/バッチ処理並走テスト ⚫ システムによってはオンライン処理とバッチ処理で共通のコンポーネントを利用する事がある(例:データベース) ⚫ 処理が並走する事で、共通のコンポーネントがボトルネックになるリスクがあるため性能テストで確認 インフラ アプリケーション テスト環境 オンライン 処理 負荷テストツール テストシナリオ データベース コンポーネント テストデータ バッチ 処理 オンライン処理とバッチ処理を並走させる オンライン処理とバッチ処理で共用するコンポーネント(例:データベース)がボトルネックにならないか要注意 確認 ・オンライン処理の性能要件を満たす事ができるか (スループット、レスポンスタイム Etc..) ・バッチ処理は所定の時間内に完了するか ・エラーは発生していないか 確認 ・リソース使用量は想定の範囲に収まっているか ・エラーは発生していないか コンポーネント 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  98. 97 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケース作成の考え方 2. インフラテスト ◼限界性能テスト ⚫ 構築したシステムがどこまでの性能を発揮できるのかを確認する ⚫ 問合せの量を徐々に増やしていき、それに伴うスループットの変化を確認。スループットの伸びが鈍化する箇所を 限界性能と考える 問合せの量 スループット 限界性能の スループット ①あるところまでは、問合せの量に比例する形でスループットも増加する ②あるところからスループットの伸びが鈍化していき、 問合せの量を増やしてもスループットが伸びなくなる。 限界性能 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  99. 98 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケース作成の考え方 2. インフラテスト ◼ロングランテスト ⚫ オンライン処理を長期間継続させ、性能劣化が発生せずに安定して処理を継続できるのかを確認 ⚫ ロングランテストの期間の決め方として、アプリケーションがどれだけ起動し続けるのかを参考にする、が一例 月 火 水 木 金 土 日 月 火 水 木 金 土 日 アプリリリース アプリリリース 月 火 水 アプリリリース アプリケーションコンテナ/プロセスが 起動し続ける期間 ロングランテストの実施期間 ロングランテストの 実施期間 期間圧縮 アプリケーションは毎週リリースを行う コンテナ/プロセスが起動し続ける期間と ロングランテストの実施期間を合せる 問合せ量をそのままに期間を圧縮する事もある アプリケーションコンテナ/プロセスが 起動し続ける期間 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  100. 99 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケースの例 2. インフラテスト ➢ 狙い:サイジングしたコンポーネントを用いてオンライン処理を行い、性能要件を満たす事ができるのか、リソース使用量 は想定の範囲に収まっているか等を確認する。 ➢ 確認手順: 負荷テストツールからテスト環境に対して、実際のサービス稼働を想定した量の擬似的な問合せを実行 する。 ➢ 期待結果: 以下が確認できる事。 ➢ 負荷テストツールのログから、性能要件として規定されたスループットを満たせていること ➢ 負荷テストツールのログを確認し、実施した問合せに対してエラーが返ってきていないこと ➢ システムを構成するコンポーネントのログを確認し、問題が発生していないこと ➢ コンポーネントのリソース使用量が運用設計の監視閾値より下回っていること ➢ エビデンス: 負荷テストツールのログ、システムを構成するコンポーネントのログ、コンポーネントのリソース使用量が出力 されたテキスト・スクリーンショット オンライン処理性能テスト 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  101. 100 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 3.性能テスト/テストケースの例 2. インフラテスト ➢ 狙い: オンライン処理を長期間継続させ、安定して処理を継続できるのか、リソース消費に問題は見られないか等を 確認する。 ➢ 確認手順: オンライン処理性能テストで用いた負荷テストツールおよびテストシナリオを用いて、擬似的な問合せを一 定期間行う。 ➢ 期待結果:ロングランテストを実施した期間全てを対象に以下が確認できる事。 ➢ 負荷テストツールのログから、ロングランテストとして定められたスループットを満たせていること ➢ 負荷テストツールのログを確認し、実施した問合せに対してエラーが返ってきていないこと ➢ システムを構成するコンポーネントのログを確認し、エラーが発生していないこと ➢ コンポーネントのリソース使用量が運用設計の監視閾値より下回っていること ➢ コンポーネントのリソース使用量に上昇傾向が見られないこと ➢ エビデンス:負荷テストツールのログ、システムを構成するコンポーネントのログ、コンポーネントのリソース使用量が出力さ れたテキスト・スクリーンショット ロングランテスト 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  102. 101 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 4.拡張テスト 2. インフラテスト ◼拡張テストでは主に以下を確認 ⚫ 拡張性設計で整理した作業手順でリソース拡張/縮小が行えるか ⚫ 拡張性設計で整理したリソース拡張/縮小の自動化の仕組みが想定通りに動作するのか クラスタ コンポーネント コンポーネント コンポーネント クラスタ ・ ・ クラスタ 拡張性設計通りに各クラスタがリソース拡張/縮小を行えるのかを確認する リソース拡張/縮小の 作業手順 リソース拡張/縮小の 自動化の仕組み コンポーネント リソース 拡張/縮小 確 認 確 認 リソース拡張/縮小の 作業手順 リソース拡張/縮小の 自動化の仕組み
  103. 102 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 4.拡張テスト/テストケース作成の考え方 2. インフラテスト ◼拡張性設計でクラスタ毎にリソース拡張/縮小の実現方法を整理している ◼その整理を網羅する様にテストケースを作成するのが一般的 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  104. 103 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ② インフラ連結テスト 4.拡張テスト/テストケースの例 2. インフラテスト ➢ 狙い: アプリケーションPodのスケールアウトが拡張性設計通りに自動発動する事を確認する ➢ 確認手順: 負荷テストツールを用いてアプリケーションPodの並列クラスタに対して疑似的な負荷を掛ける ➢ 期待結果: アプリケーションPodのリソースの使用量が拡張性設計で整理した閾値を超過したタイミングで、自動で アプリケーションPodが追加される事 ➢ エビデンス: アプリケーションPodのリソース使用量の推移が出力されたテキスト、アプリケーションPod数の推移が出力 されたテキスト アプリケーションPodの並列クラスタにおける、スケールアウト自動発動確認 ➢ 狙い:リードレプリカのスケールアウトが拡張性設計通りに自動発動する事を確認する ➢ 確認手順:負荷テストツールを用いてAurora PostgreSQLクラスタのリーダーエンドポイントに対して疑似的な負荷 を掛ける ➢ 期待結果:Aurora PostgreSQLクラスタのリードレプリカのリソースの使用量が拡張性設計で整理した閾値を超過し たタイミングで、自動でリードレプリカが追加される事 ➢ エビデンス:Aurora PostgreSQLクラスタのリードレプリカのリソース使用量の推移が出力されたテキスト・スクリーン ショット、リードレプリカ数の推移が出力されたテキスト・スクリーンショット Aurora PostgreSQLクラスタにおける、リードレプリカのスケールアウト自動発動確認 接続テスト 障害テスト 性能テスト 拡張テスト テストケースの考え方 テストケース例
  105. 104 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼高品質なITインフラを構築するためには、インフラ基本設計・インフラテストが重要! ◼クラウド・Kubernetesを活用したシステムで行うためには、、、 まとめ 複雑になりがちなコンポーネント間の協調動作の仕組みを 詳細に理解・整理する事が重要! 説明責任を果せるのがインフラエンジニアの差別化要因! インフラ基本設計 インフラ設計の内容を漏れなく確認! アプリ設定にも踏み込む事で確認漏れを無くす! インフラテスト
  106. 105 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    Copyright (C) Nomura Research Institute, Ltd. All rights reserved. 105 SIerでもクラウドネイティブできます!!