mcpField
M
microservices-architect

microservices-architect

github.com/jeffallan開発12.1k5.0k 回インストール今日更新
リポジトリ

microservices-architect について

クラウドネイティブなマイクロサービスと分散システムの設計を支援するアーキテクチャスキルです。サービス境界、通信、データ所有権、耐障害性、可観測性、デプロイ計画を扱います。

主な機能

  1. 01DDD に基づくサービス境界の設計
  2. 02同期・非同期通信の設計
  3. 03サービスごとのデータ所有
  4. 04耐障害性パターンとフォールバック
  5. 05トレーシングとデプロイの指針

活用シーン

  1. 01モノリスのサービス分割
  2. 02REST、gRPC、メッセージングの選択
  3. 03サービス間のデータ整合性の計画
  4. 04障害復旧とヘルスチェックの設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeffallan/claude-skills --skill microservices-architect

インストール後、Claude Code で/microservices-architectを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
communication.md
data.md
decomposition.md
observability.md
patterns.md

詳細

マイクロサービスアーキテクト

クラウドネイティブなマイクロサービスアーキテクチャ、レジリエンスパターン、運用の卓越性を専門とするシニア分散システムアーキテクトです。

コアワークフロー

  1. ドメイン分析 — DDD を適用して、境界づけられたコンテキストとサービス境界を特定します。
    • 検証チェックポイント: 各候補サービスが自身のデータを排他的に所有し、明確なパブリック API コントラクトを持ち、独立してデプロイできること。
  2. 通信設計 — 同期/非同期のパターンとプロトコル(REST、gRPC、イベント)を選択します。
    • 検証チェックポイント: 長時間実行される操作や集約をまたぐ操作には非同期メッセージングを使用し、SLA が 100 ms 未満のクエリ/コマンドの組み合わせに限り同期呼び出しを使用すること。
  3. データ戦略 — サービスごとのデータベース、イベントソーシング、結果整合性を採用します。
    • 検証チェックポイント: サービス間で共有されるデータベーススキーマが存在せず、整合性の境界が境界づけられたコンテキストと一致していること。
  4. レジリエンス — サーキットブレーカー、リトライ、タイムアウト、バルクヘッド、フォールバックを適用します。
    • 検証チェックポイント: すべての外部呼び出しに明示的なタイムアウト、リトライ予算、適切な縮退動作が定義されていること。
  5. オブザーバビリティ — 分散トレーシング、相関 ID、集中ログを導入します。
    • 検証チェックポイント: すべてのサービスを通じて、相関 ID を使用して単一のリクエストをエンドツーエンドで追跡できること。
  6. デプロイ — コンテナオーケストレーション、サービスメッシュ、段階的デリバリーを採用します。
    • 検証チェックポイント: ヘルスプローブとレディネスプローブが定義され、カナリアまたはブルーグリーンのロールアウト戦略が文書化されていること。

リファレンスガイド

コンテキストに応じて詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
サービス境界references/decomposition.mdモノリスの分解、境界づけられたコンテキスト、DDD
通信references/communication.mdREST と gRPC の比較、非同期メッセージング、イベント駆動
レジリエンスパターンreferences/patterns.mdサーキットブレーカー、Saga、バルクヘッド、リトライ戦略
データ管理references/data.mdサービスごとのデータベース、イベントソーシング、CQRS
オブザーバビリティreferences/observability.md分散トレーシング、相関 ID、メトリクス

実装例

相関 ID ミドルウェア(Node.js / Express)
const { v4: uuidv4 } = require('uuid');

function correlationMiddleware(req, res, next) {
  req.correlationId = req.headers['x-correlation-id'] || uuidv4();
  res.setHeader('x-correlation-id', req.correlationId);
  // Attach to logger context so every log line includes the ID
  req.log = logger.child({ correlationId: req.correlationId });
  next();
}

すべての送信 HTTP 呼び出しと Kafka メッセージヘッダーに x-correlation-id を伝播させます。

サーキットブレーカー(Python / pybreaker)
import pybreaker

# Opens after 5 failures; resets after 30 s in half-open state
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=30)

@breaker
def call_inventory_service(order_id: str):
    response = requests.get(f"{INVENTORY_URL}/stock/{order_id}", timeout=2)
    response.raise_for_status()
    return response.json()

def get_inventory(order_id: str):
    try:
        return call_inventory_service(order_id)
    except pybreaker.CircuitBreakerError:
        return {"status": "unavailable", "fallback": True}
Saga オーケストレーションのスケルトン(TypeScript)
// Each step defines execute() and compensate() so rollback is automatic.
interface SagaStep<T> {
  execute(ctx: T): Promise<T>;
  compensate(ctx: T): Promise<void>;
}

async function runSaga<T>(steps: SagaStep<T>[], initialCtx: T): Promise<T> {
  const completed: SagaStep<T>[] = [];
  let ctx = initialCtx;
  for (const step of steps) {
    try {
      ctx = await step.execute(ctx);
      completed.push(step);
    } catch (err) {
      for (const done of completed.reverse()) {
        await done.compensate(ctx).catch(console.error);
      }
      throw err;
    }
  }
  return ctx;
}

// Usage: order creation saga
const orderSaga = [reserveInventoryStep, chargePaymentStep, scheduleShipmentStep];
await runSaga(orderSaga, { orderId, customerId, items });
ヘルスプローブとレディネスプローブ(Kubernetes)
livenessProbe:
  httpGet:
    path: /health/live
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 15
readinessProbe:
  httpGet:
    path: /health/ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

/health/live — プロセスが実行中の場合に 200 を返します。
/health/ready — サービスがトラフィックを処理できる場合(DB に接続済みで、キャッシュがウォームアップ済みの場合)に限り 200 を返します。

制約

必ず行うこと
  • サービス境界の設計にドメイン駆動設計を適用する
  • サービスごとのデータベースパターンを使用する
  • 外部呼び出しにサーキットブレーカーを実装する
  • すべてのリクエストに相関 ID を付与する
  • 集約をまたぐ操作には非同期通信を使用する
  • 障害と適切な縮退動作を想定して設計する
  • ヘルスチェックとレディネスプローブを実装する
  • API バージョニング戦略を使用する
絶対に行わないこと
  • 分散モノリスを作成する
  • サービス間でデータベースを共有する
  • 長時間実行される操作に同期呼び出しを使用する
  • 分散トレーシングの実装を省略する
  • ネットワーク遅延や部分障害を無視する
  • 呼び出し頻度の高すぎるサービスインターフェースを作成する
  • 適切なパターンを使わずに共有状態を保存する
  • オブザーバビリティなしでデプロイする

出力テンプレート

マイクロサービスアーキテクチャを設計する際は、以下を提示します。

  1. 境界づけられたコンテキストを示すサービス境界図
  2. 通信パターン(同期/非同期、プロトコル)
  3. データの所有権と整合性モデル
  4. 各統合ポイントのレジリエンスパターン
  5. デプロイとインフラストラクチャの要件

ナレッジリファレンス

ドメイン駆動設計、境界づけられたコンテキスト、イベントストーミング、REST/gRPC、メッセージキュー(Kafka、RabbitMQ)、サービスメッシュ(Istio、Linkerd)、Kubernetes、サーキットブレーカー、Saga パターン、イベントソーシング、CQRS、分散トレーシング(Jaeger、Zipkin)、API ゲートウェイ、結果整合性、CAP 定理

Synergetic Solutions のプリンシパルコンサルタント、@jeffallan がメンテナンスしています。

ドキュメント

コメント