目次

読了時間: 約9分 | 文字数: 約3,200字

Netflix が 2009年にモノリスからマイクロサービスへ移行した事例は、業界に大きな影響を与えた。しかし、Netflix がマイクロサービスを必要としたのは、数億人のユーザーに99.99%の可用性を提供するためだ。あなたのプロジェクトが同じ状況にあるとは限らない。

モノリスとマイクロサービス

モノリス

すべての機能が1つのプロセスとして動作する。デバッグが容易、トランザクション管理がシンプル、テストが書きやすい。

マイクロサービス

ビジネスドメインに沿って分割された小さなサービスの集合。各サービスは独立してデプロイ可能で、独自のデータストアを持つ。

設計原則

単一責任の原則

各サービスは1つのビジネス機能を担当する。「このサービスが何をするか」を1文で説明できないなら、分割が不適切だ。

境界づけられたコンテキスト

DDD の概念。各サービスは自身のドメインモデルを持ち、外部とは API で通信する。

データの所有権

各サービスは自身のデータベースを所有する。他のサービスの DB に直接アクセスすることは禁止。

サービス間通信

同期通信(REST / gRPC)

シンプルだが、呼び出し先がダウンすると呼び出し元もブロックされる。サーキットブレーカーの実装が必要。

非同期通信(メッセージキュー)

サービス間の結合度が低い。Kafka や RabbitMQ を介してメッセージをやり取りする。

イベント駆動アーキテクチャ

サービスがイベントを発行し、興味のあるサービスが購読する。新しいサービスの追加が、既存サービスの変更なしにできる。

分散システムの課題

分散トランザクション

複数サービスにまたがる ACID 保証は事実上不可能。Saga パターンで補償トランザクションを使う。

サービスディスカバリ

Consul や Kubernetes の DNS でサービスを動的に発見する。

観測可能性

分散トレーシング、集約ログ、メトリクスの3本柱が必要。

マイクロサービスにすべきか

分割してよい兆候: チーム間の調整コストがデプロイを遅延させている、特定の機能だけスケールしたい。

分割すべきでない兆候: チームが10人以下、ドメインの境界がまだ見えていない、運用基盤が未整備。

So What?——実務への応用

  • モノリスファーストで始める: ドメインを理解してから分割する。早すぎる分割は「分散モノリス」を招く
  • 通信は非同期を基本とする: 障害の伝播を防ぐ。同期通信はサーキットブレーカーで保護
  • Observability を最初から組み込む: 後から追加するのは困難
  • 組織構造とアーキテクチャを合わせる: コンウェイの法則——サービスの境界はチームの境界と一致させる

マイクロサービスは技術的な問題ではなく組織的な問題を解決するアーキテクチャだ。その代償を払う理由があるかどうかが、導入判断の本質だ。

参考リンク

免責事項 — 掲載情報は執筆時点のものです。料金・機能は変更される場合があります。最新情報は各公式サイトをご確認ください。