マイクロサービス用の Azure コンピューティング オプションの選択
"コンピューティング" という用語は、アプリケーションがそこで実行されるコンピューティング リソースのホスティング モデルを指します。 この記事では、マイクロサービス用のコンピューティング プラットフォームを選択するのに役立つ規範的なガイダンスを提供します。 マイクロサービス コンピューティング プラットフォームの選択は、より微妙な要件に依存する場合があります。
マイクロサービス アーキテクチャでは、次の方法が一般的です。
- マイクロサービス オーケストレーターを使用して、通常は専用のコンピューティング プラットフォームにマイクロサービスをデプロイします。
- サーバーレス プラットフォームにマイクロサービスをデプロイします。
これらのオプションは唯一の選択肢ではありませんが、どちらもマイクロサービスを構築するための実証済みのアプローチです。 1 つのアプリケーションに両方のアプローチが含まれることもあります。
このアーキテクチャの Visio ファイルをダウンロードします。
サーバーレス プラットフォームを使用する
サーバーレス プラットフォームを使用して、Azure Container Apps または Azure Functions にマイクロサービスをデプロイできます。 Container Apps と Functions には、コンピューティング消費量ではなく、要求の量に基づいて課金されるサーバーレス コンピューティング オプションが用意されています。 どちらのプラットフォームでも、専用の容量でワークロードをホストするオプションも提供されます。
コードベースのマイクロサービスをデプロイする
マイクロサービスをコンテナー化するのではなく、コードとしてデプロイする場合は、Azure Functions を使用できます。 詳細については、Functions でサポートされているプログラミング言語とスクリプト言語の 一覧を参照してください。 他の言語で開発するマイクロサービスの場合は、Functions でカスタム ハンドラーを実装したり、アプリケーションのコンテナー化を検討したりできます。
GPU モデルを使用する
たとえば、機械学習タスクを実行するためにマイクロサービスに GPU 容量が必要な場合は、プラットフォームに対して Container Apps または Azure Kubernetes Service (AKS) を選択することを検討してください。 AKS は Azure で任意の GPU モデル 使用できます、Container Apps には、選択できる GPU モデルの subset が用意されています。
サービス オーケストレーターを使用する
オーケストレーターは、一連のサービスのデプロイと管理に関連するタスクを処理します。 ノードへのサービスの配置、サービスの正常性の監視、サービス インスタンス間へのネットワーク トラフィックの負荷分散、サービスの検出、サービスのインスタンスの数のスケーリング、構成の更新の適用などのタスクがあります。 一般的なオーケストレーターには、Kubernetes、Azure Service Fabric、DC/OS、Docker Swarm などがあります。
Azure プラットフォームでは、以下のオプションを検討してください。
Azure Kubernetes Service (AKS) は、マネージド Kubernetes サービスです。 AKS は Kubernetes をプロビジョニングし、Kubernetes API エンドポイントを公開し、Kubernetes コントロール プレーンをホストおよび管理し、自動アップグレード、自動修正、自動スケーリング、およびその他の管理タスクを実行します。 AKS では、Kubernetes API に直接アクセスできます。
Container Apps は、コンテナー オーケストレーションやその他の管理タスクの複雑さを抽象化する Kubernetes 上に構築されたマネージド サービスです。 Container Apps は、Kubernetes の機能を提供しながら、サーバーレス環境内のコンテナ化されたアプリケーションやマイクロサービスのデプロイと管理を単純化します。 Container Apps は、Kubernetes API への直接アクセスが必要ないシナリオに最適です。
Service Fabric は、マイクロサービスのパッケージ化、デプロイ、管理を行うための分散システム プラットフォームです。 マイクロサービスは、コンテナー、バイナリ実行可能ファイル、または 実行可能サービスとして Service Fabric にデプロイ。 Reliable Services プログラミング モデルを使用すると、サービスは Service Fabric プログラミング API を直接使用して、システムのクエリ、正常性の報告、構成とコードの変更に関する通知の受信、その他のサービスの検出を行うことができます。
Azure Red Hat OpenShift を使用して、フル マネージドの OpenShift クラスターをデプロイします。 Azure Red Hat OpenShift は Kubernetes を拡張します。 Azure Red Hat OpenShift は、Red Hat と Microsoft が共同で設計、運用、サポートしています。
Docker Enterprise Edition などの他のオプションは、Azure 上のクラウド コンピューティング環境で実行できます。 Azure Marketplace でデプロイ テンプレートを見つけることができます。
Kubernetes API の使用
Kubernetes API へのアクセスは、多くの場合、コンピューティング オプションを選択する際の決定要因となります。 AKS では Kubernetes API に直接アクセスできますが、Container Apps ではアクセスできません。 Container Apps では、Kubernetes の複雑さが隠され、コンテナーのデプロイ エクスペリエンスが簡略化されます。 Kubernetes API と直接対話するようにマイクロサービスデプロイを設計する場合は、AKS が適切な選択肢である可能性があります。
その他の決定要因
マイクロサービス コンピューティング プラットフォームの選択に影響するその他の要因が存在する可能性があります。 これらの要因には、サービス メッシュ オプション、プラットフォームのスケーラビリティ、組織内で使用できるスキル セットが含まれます。
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
[信頼性]
信頼性により、顧客に確約したことをアプリケーションで確実に満たせるようにします。 詳細については、「信頼性の設計レビュー チェックリスト」を参照してください。
信頼性の重要な柱の 1 つは回復性です。 回復性の目標は、障害が発生した後、ワークロードを完全に機能する状態に戻することです。
マイクロサービス コンピューティング プラットフォームとして Azure Functions を選択する場合は、ゾーン冗長構成で Functions Premium プランまたは Azure アプリ サービス プランをデプロイすることを検討してください。 詳細については、「関数の 責任」を参照してください。
マイクロサービス コンピューティング プラットフォームとして AKS を選択した場合は、可用性ゾーンを使用する AKS クラスターをデプロイしAzure Kubernetes クラスターの Standard レベルまたは Premium レベル を使用し、ポッドとノードの最小数を増やすことで、マイクロサービスの信頼性を向上させることができます。 詳細については、「 AKS のデプロイとクラスターの信頼性のベスト プラクティスを参照してください。
マイクロサービス コンピューティング プラットフォームとして Container Apps を選択した場合は、可用性ゾーンを使用して信頼性を高めることができます。 詳細については、「 Container Apps での責任」を参照してください。
セキュリティ
セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの設計レビュー チェックリスト」を参照してください。
マイクロサービスをデプロイするコンピューティング プラットフォームとして Azure Functions を選択した場合、セキュリティで保護 Azure Functions の原則 マイクロサービスにも適用されます。
マイクロサービスをデプロイするコンピューティング プラットフォームとして AKS を選択した場合、 AKS セキュリティ ベースライン アーキテクチャ では、コンピューティング プラットフォームをセキュリティで保護するためのガイダンスが提供されます。 AKS でのマイクロサービス セキュリティのベスト プラクティスについては、 Advanced AKS マイクロサービス アーキテクチャを参照してください。
マイクロサービスをデプロイするコンピューティング プラットフォームとして Container Apps を選択した場合、セキュリティのベスト プラクティスについては、Container Apps の セキュリティ ベースライン を参照してください。
コストの最適化
コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳細については、「コスト最適化の設計レビュー チェックリスト」を参照してください。
オーケストレーターを使用すると、クラスターで実行される仮想マシンの料金が発生します。 サーバーレス アプリケーションを使用する場合は、使用した実際のコンピューティング リソースに対してのみ料金が発生します。 どちらの場合も、ストレージ、データベース、メッセージング サービスなどの追加サービスのコストを考慮する必要があります。
Azure Functions、Container Apps、および AKS には、自動スケール オプションが用意されています。 Container Apps と Functions は、コストが消費に基づいてゼロになる可能性があるサーバーレス プラットフォームを提供します。 AKS では、専用のコンピューティング オプションのみが提供されます。
マイクロサービスをデプロイするコンピューティング プラットフォームとして AKS を選択した場合は、コスト最適化のベスト プラクティスを理解する必要があります。 詳細については、「 Azure Kubernetes Service でのコストの最適化」を参照してください。
マイクロサービス コンピューティング プラットフォームとして Container Apps を選択した場合は、さまざまな課金モデルを理解し、ワークロードの要件に基づいてマイクロサービスのデプロイ モデルを決定する必要があります。 詳細については、「 Container Apps でのビリング」を参照してください。
マイクロサービス コンピューティング プラットフォームとして Azure Functions を選択する場合は、さまざまな課金モデルを理解し、ワークロードの要件に基づいて Functions プランを決定する必要があります。 詳細については、「消費ベースのコストを確認するAzure Functions プランの詳細を参照してください。
オペレーショナル エクセレンス
オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「オペレーショナル エクセレンスのデザイン レビュー チェック一覧」を参照してください。
Terraform、Bicep、およびその他のスクリプト言語を使用して、この記事で説明するすべてのマイクロサービス コンピューティングの選択肢を自動化された方法でデプロイできます。 Application Insights、Azure Monitor、その他の監視ソリューションを使用して、これらのコンピューティング プラットフォームとマイクロサービスを監視できます。
オーケストレーター アプローチとサーバーレス アプローチのいずれかを選択する場合は、次の要因を考慮してください。
柔軟性と制御: オーケストレーターを使用すると、サービスとクラスターの構成と管理を制御できます。 トレードオフはより複雑です。 サーバーレス アーキテクチャでは、詳細が抽象化されているため、ユーザーが制御できない部分があります。
移植性: Kubernetes、DC/OS、Docker Swarm、Service Fabric など、この記事に記載されているすべてのオーケストレーターは、オンプレミスまたは複数のパブリック クラウドで実行できます。
アプリケーション統合: 多数の小規模で独立した関数を調整、デプロイ、管理する必要があるため、サーバーレス アーキテクチャを使用する複雑なアプリケーションを構築するのは困難な場合があります。 Azure の 1 つのオプションは、 Azure Logic Apps を使用して一連の Azure 関数を調整することです。 このアプローチの例については、「 Logic Apps と統合する関数を作成する」を参照してください。