MEGAZONE

MEGAZONEブログ

SaaS deep dive:Inside a scalable, efficient multi-tenant architecture
Architecture re:Invent 2023

SaaS deep dive:Inside a scalable, efficient multi-tenant architecture

Pulisher : Managed & Support Center キム・ソンド
Description : マルチテナントの消費パターンを解決できる戦略や政策、構築モデルについて紹介したセッション

マルチテナント消費パターンを解決できる戦略、ポリシー、構築モデルを確認できるセッションです。

マルチテナントの拡張、復元力、パフォーマンスの問題について、効率的なSaaS環境構築に使用される技術を知りたいと思い、セッションを申し込みました。

誰もがシステムがダウンすることを望みませんが、インターネット環境で高可用性システムを作るのは難しいことです。

大規模企業のアプリケーションが中断された場合、莫大な損害を見ることができます。

様々な構築モデルをサポートするクラス環境を構築することは困難です。

SaaSはビジネスに拡張性と回復力を提供することができます。

スケーリング戦略には大きく3つ+1つに整理することができます。

1.クラシック水平スケーリング (Classic Horizontal Scaling)
  a.マイクロサービスとEC2をデプロイの単位として使用し、AWSの弾力性、水平スケーリングを使用します。
  b.マルチテナント環境で急激な負荷に対応することは難しく、過剰なリソースをあらかじめ割り当てる必要があります。

2.Lambda Scaling
  a.Lambdaをマルチテナントに適用する場合、管理型サービスに移動し、個別関数がスケーリングの単位になります。
  b.マイクロサービスレベルではなく、関数レベルでスケーリングが行われ、効率的なコスト管理ができます。

3.コンテナスケーリング (Container Scaling)
  a.EKSを配布モデルとし、様々なツールと機能を提供します。
  b.EKSはネームスペースごとのオプションとノード識別など、新しい展開モデルを考慮することができます。
  c.AWS Fargateの場合は、クラスターの下で実行されたノードについて全く考慮する必要がないメリットがあります。

4.全体的なスケーリング戦略の選択 (Overall Scaling Strategy)
  a.スケーリング戦略を選択する時、全ての環境で絶対的に正しいものはありません。
   これは作業負荷とビジネス要件を考慮する必要があります。
  b.それぞれの環境でどのようにスケーリングモデルを選択するかについてのガイドとして、個々のネットワークの負荷と特性を考慮する必要があります。

マルチテナント展開の拡張性と効率を高めるために、以下のような考慮事項を確認する必要があります。

1.スケールに合わせて様々な展開モデルに対する設定と構成を自動化する必要があります。
2.Standard TierやAdvanced Tierなど、それぞれのサービスやティアに対するデプロイを効率的に行う必要があります。
3.デプロイメントに失敗したり、成功した場合、システムがこれをどのように検知して対処するかについての内容を考慮する必要があります。

システムの堅牢性及び隔離戦略は下記の通りです。

1.依存関係
  a.外部サービスとの非同期及び外部依存性に対する失敗対応戦略を策定します。

2.隔離戦略
  a.テナント及びサービス間の相互作用制御を通じた隔離戦略を策定しなければなりません。
  b.VPC、サービス、リソース間の隔離方法を考慮しなければなりません。

3.コードとポリシーの分離による堅牢性の強化
  a.コードとポリシーを分離し、ビルダーではなくアーキテクチャを作る人が隔離ポリシーを柔軟に管理する必要があります。

4.テストによる堅牢性、スケーリングの検証
  a.多様なプロファイル及びワークロードを活用したテストを実施しなければなりません。
  b.性能及び堅牢性に対するシステムの反応を確認して改善しなければなりません。

このセッションを聞いて、様々なデプロイメントモデルや環境でスケーリングをどのようにすべきか、堅牢性はどのように守るべきかについて学びました。

拡張性のあるServerlessサービスであるAPI Gateway、Lambdaを積極的に活用してアーキテクチャ構築を進めることがいかに重要かを確認することができました。

ブログ一覧

この記事の読者はこんな記事も読んでいます