マイクロサービスアーキテクチャ
サービスを業務ドメインごとに分割し、独立してデプロイ・スケールさせる構成。_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)。
設計上の注意
- 業務分担を横割りから縦割り(ドメイン単位)に。ドメイン理解が最重要。
- 偶発的プログラミングを戒める。ビジネス定数はデータと処理の分離・変更容易性の観点から設定ファイルへ。