マイクロサービスアーキテクチャ

サービスを業務ドメインごとに分割し、独立してデプロイ・スケールさせる構成。_moc-web-infra

サービス間通信

  • grpc によるRPC、redis Streams 等のメッセージング。
  • Message Queuing(MQ): 非同期にタスクを渡す。PostgreSQL を MQ として使う(sqlxmq, job queue 管理テーブル)実装もある(postgresql)。
  • リトライは exponential backoff(失敗のたび待ち時間を倍に)。

分散トランザクション: Saga Pattern

複数サービスにまたがる処理を、各サービスのローカルtxと補償処理の連鎖で実現する。例: ウォレットサービス(残高)→チケットサービス(発行)をイベントキュー(Redis Stream)+ gRPC で繋ぐ。強整合性を諦め結果整合性に倒す。

段階的移行: ストラングラーパターン

ストラングラーファサード(API Gateway で振り分け)を作り、レガシーを徐々にモダンへ置き換える。モノリスからの移行の定石(クックパッドの Rails 100万行のマイクロサービス化など)。

インフラ用語

  • LB(ロードバランサ): L4 LB はトランスポート層(IP/ポート)で振り分け軽量、L7 LB はアプリ層(ヘッダ/Cookie)を見て柔軟に振り分け。
  • スティッキーセッション: 同一ユーザーを同一サーバへ。スケール時に分散できないので、セッションを Redis に外出ししてステートレス化する。
  • サービスメッシュ(Istio)、ネットワークプロキシ(Envoy = L4/L7 フィルタ・ルーティング・LB)。
  • CNCF: Prometheus(監視)/Grafana(可視化)/kubernetes/Helm/Terraform(IaC)。

設計上の注意

  • 業務分担を横割りから縦割り(ドメイン単位)に。ドメイン理解が最重要。
  • 偶発的プログラミングを戒める。ビジネス定数はデータと処理の分離・変更容易性の観点から設定ファイルへ。

関連