Cloud Service
Azure Service Fabric
マイクロサービスのデプロイ・配置・自動修復・ローリング更新を担う分散システム基盤。ステートフルサービスや信頼性の高いクラスタ運用を、台数管理を任せつつ実現できる。AWS に直接の相当はなく、ECS/EKS にステートフルな実行モデルを足した位置づけ。
- 1.マイクロサービスを多数のノードへ配置・自動修復・ローリング更新する分散オーケストレーション基盤。
- 2.ステートレスに加え、状態をクラスタ内で複製する「ステートフルサービス」を標準で持つ点が特徴。
- 3.新規は Container Apps/AKS が主流。既存資産の継続運用やステートフル要件で選ばれる。
解決する課題
多数のサービスを多数のサーバーへ安定して配置し、障害時の再配置やローリング更新を自前で書かずに運用できます。
- 多数のマイクロサービスを多数のノードへ配置し、ノード障害時に自動で別ノードへ再配置したい
- アプリの状態(セッション、集計値、キューなど)をクラスタ内で複製し、外部 DB なしでも高可用にしたい
- バージョン更新をローリングで行い、問題時に自動ロールバックしたい
- コンテナと、コンテナを使わない実行ファイル(ゲストプロセス)の両方を同じ基盤で動かしたい
- Kubernetes ではなく、ステートフルな実行モデルを標準で備えたオーケストレーターが欲しい
主要概念と用語
- クラスタ(Cluster): 相互接続されたノード(VM)の集合。アプリはこのクラスタ上に配置される
- ノード(Node): クラスタを構成する 1 台。多くはノードタイプごとの仮想マシンスケールセットに対応する
- ノードタイプ(Node Type): 同一構成のノード群。プライマリノードタイプはシステムサービスを載せる
- アプリケーション/サービス: デプロイ単位。1 つのアプリは複数のサービスを含む
- ステートレスサービス: 状態を内部に持たないサービス。外部ストアに状態を逃がす一般的な形
- ステートフルサービス: 状態をReliable Collections としてクラスタ内に保持・複製するサービス
- パーティション: サービスの状態を分割する単位。スケールアウトの基本単位になる
- レプリカ: パーティションの実体。プライマリ 1 + セカンダリ複数で複製し、可用性を担保する
- プログラミングモデル: Reliable Services、Reliable Actors、ゲスト実行ファイル、コンテナを選べる
- Cluster Resource Manager: サービスをノードへ最適配置し、障害時に再配置する内部スケジューラ
仕様・制限・クォータ
- クラスタは Windows / Linux のどちらでも構成でき、コンテナとゲスト実行ファイルの両方を実行できる
- ノードは通常仮想マシンスケールセットとして構成し、ノードタイプ単位で VM サイズや台数を設計する
- プライマリノードタイプはシステムサービスを載せるため、本番では推奨される最小台数を満たす必要がある
- ステートフルサービスはパーティション × レプリカで構成し、レプリカ数で可用性、パーティション数でスケールを決める
- クラスタの VM 台数やコア数は、サブスクリプション/リージョンのクォータの範囲で、引き上げ申請が可能
- 具体的なクォータ数値や推奨台数は変動するため、計画時は対象リージョンの最新値を確認する
内部の仕組み
Service Fabric は、クラスタ上にシステムサービス(命名、フェイルオーバー管理、Cluster Resource Manager など)を常駐させた分散オーケストレーターです。利用者はアプリケーションとサービスを宣言し、Service Fabric が各サービスのインスタンスやレプリカを空きノードへ配置します。
- Cluster Resource Manager が負荷とノード障害を見ながらサービスを再配置し、特定ノードへの偏りをならす
- ステートフルサービスでは、プライマリレプリカが書き込みを受け、セカンダリレプリカへ複製する。プライマリ障害時はセカンダリが昇格してフェイルオーバーする
- 状態は Reliable Collections(信頼性のあるディクショナリ/キュー)として保持され、複製とトランザクションがフレームワークに組み込まれている
- アップグレードはアップグレードドメイン単位で順に進むローリング更新で行われ、ヘルスチェックに失敗すると自動でロールバックできる
- ノードの健全性はヘルスモデル(ノード・アプリ・サービス・パーティション・レプリカの階層)で集約・評価される
状態を外部の Azure Cache for Redis や Cosmos DB に逃がせる場合、無理にステートフルサービスを使わずステートレス中心にすると、運用とアップグレードがぐっと簡単になります。ステートフルは「状態の局所性が性能や整合性に効く」ケースに絞るのが定石です。
設計パターン / ベストプラクティス
- まずステートレス + 外部ストアを基本形にし、ステートフルは状態の局所性が必要な箇所に限定する
- ステートフルサービスはパーティション設計を先に固める。後からのパーティション数変更は容易でないため、将来のスケールを見込んで決める
- アップグレードはアップグレードドメインごとのローリングとヘルスポリシーを設定し、失敗時の自動ロールバックを効かせる
- アプリとサービスのバージョン管理を徹底し、差分のみを更新する構成にして無停止更新の範囲を広げる
- 新規開発で Kubernetes エコシステムや運用最小化を重視するなら、AKS/Container Apps を併せて評価する
運用・監視
- メトリクスとログは Azure Monitor / Log Analytics に集約し、ノード・サービス・レプリカの健全性とリソース使用率を監視する
- クラスタの状態は Service Fabric Explorer(Web UI)でノード、アプリ、パーティション、レプリカの階層を可視化して調査する
- サービスが配置されない/再配置が頻発する場合は、ノードタイプの容量、配置制約、Cluster Resource Manager のメトリクスを確認する
- アップグレードが止まる場合は、ヘルスポリシーとアップグレードドメインの進行状況、失敗したヘルスイベントを確認する
- デプロイ・運用は az sf CLI や Service Fabric SDK、各種パイプラインから自動化する
コスト
Service Fabric のランタイム自体に追加料金はなく、課金対象はクラスタを構成する VM(スケールセット)・ストレージ・ネットワーク・ロードバランサーなどの基盤リソースです。
| コスト要素 | 内容 | 最適化のヒント |
|---|---|---|
| クラスタの VM | ノード台数 × VM サイズの稼働課金 | ノードタイプごとに適正サイズを選ぶ |
| 常時稼働の前提 | システムサービス維持のため最小台数が常時稼働 | 小規模でも下げ過ぎない設計が必要 |
| ストレージ/LB | OS ディスク、状態の永続化、外部公開 | 不要なディスクや公開点を減らす |
| 割引 | 予約 VM や Savings Plan の対象 VM | 定常分は予約で単価を下げる |
- コントロールプレーン的なシステムサービスを維持するため、常時ゼロ台にはできない点が Container Apps との大きな違い
- 定常的に稼働する VM 分は予約インスタンスや Savings Planで単価を下げられる場合がある(要計測)
セキュリティ
- ノードから他リソースへのアクセスはマネージド IDを用い、接続文字列やキーのハードコードを避ける(AWS の IAM ロール相当)
- 秘密情報は Key Vault で管理し、アプリのパラメータやスクリプトに平文で埋め込まない
- クラスタの管理エンドポイントと Service Fabric Explorer は証明書ベースの認証と Microsoft Entra ID で保護し、公開範囲を絞る
- ネットワークは仮想ネットワークにクラスタを配置し、ネットワークセキュリティグループで管理/アプリのポートを制限する
- ノード間通信とクライアント通信は TLS で暗号化し、証明書のローテーション運用を整える
DB 接続文字列や API キーをアプリのパラメータやイメージに平文で焼き込むのは NG。 マネージド ID + Key Vault を使えば、資格情報をコードや設定に置かずに済み、ローテーションと漏洩リスク低減を両立できます。
関連サービス・比較
新規のコンテナワークロードでは、運用を最小化できる Azure Container Apps や、Kubernetes エコシステムをそのまま使える AKS が主流です。Service Fabric はステートフルな実行モデルを標準で備える点に独自性があり、既存資産の継続運用やその要件で選ばれます。
| 観点 | Service Fabric | Container Apps | AKS |
|---|---|---|---|
| 位置づけ | ステートフル対応の分散基盤 | サーバーレスなコンテナ実行 | マネージド Kubernetes |
| 状態管理 | Reliable Collections を標準提供 | 外部ストアに逃がす前提 | 外部ストアや K8s 機能で実装 |
| スケール単位 | パーティション × レプリカ | レプリカ(KEDA で増減) | Pod / ノードプール |
| ゼロスケール | 不可(システムサービス常時稼働) | 可(0 台まで縮小) | 不可(ノードは常時課金) |
| 新規での主流度 | 既存資産・特定要件向け | 新規の第一候補になりやすい | K8s 必須要件で選択 |
ハンズオン / CLI例
# Service Fabric CLI 拡張とリソースグループを準備
az extension add --name sf --upgrade
az group create --name demo-rg --location japaneast
# テスト用クラスタを作成(証明書はキー コンテナーへ自動生成)
# 本番では台数・VM サイズ・ノードタイプを設計したテンプレートを使う
az sf cluster create \
--resource-group demo-rg \
--location japaneast \
--cluster-name demo-sf \
--cluster-size 3 \
--vm-password "<安全なパスワードを指定>" \
--certificate-output-folder ./certs \
--certificate-password "<証明書パスワード>" \
--certificate-subject-name demo-sf.japaneast.cloudapp.azure.com
# クラスタの状態を確認
az sf cluster show \
--resource-group demo-rg \
--cluster-name demo-sf
# クラスタに接続して(証明書を指定)アプリの状態を確認
sfctl cluster select \
--endpoint https://demo-sf.japaneast.cloudapp.azure.com:19080 \
--pem ./certs/demo-sf.pem --no-verify
sfctl application list
Azure Service
Azure Service Fabricを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンピューティング
比較で見る軸
クラウド: Azure / カテゴリ: コンピューティング / 難易度: intermediate
導入後に効く点
ステートレスに加え、状態をクラスタ内で複製する「ステートフルサービス」を標準で持つ点が特徴。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- コンピューティング
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- reliability / operational / performance / security
判断チェックリスト
- 自社の用途が「コンピューティング / reliability」に近いか確認する。
- 強みである「マイクロサービスを多数のノードへ配置・自動修復・ローリング更新する分散オーケストレーション基盤。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。