mcpField
A
arch-microservices

arch-microservices

github.com/alphaonedev開発41 回インストール
リポジトリ

arch-microservices について

arch-microservicesは、マイクロサービスの設計と実装を支援するスキルです。モノリスの分割や分散システムの設計に向け、ゲートウェイ、サービスメッシュ、耐障害性パターンの設定を案内します。

主な機能

  1. 01境界づけられたコンテキストによる分割
  2. 02KongとTraefikのゲートウェイ設定
  3. 03Istioサービスメッシュの指針
  4. 04サーキットブレーカーとフォールバック
  5. 05SagaとOutboxのトランザクションパターン

活用シーン

  1. 01アプリケーションを独立したサービスに分割
  2. 02APIのルーティングとレート制限
  3. 03サービス間の障害連鎖を抑制
  4. 04複数段階の決済処理

インストール

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

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill arch-microservices

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

詳細

arch-microservices

目的

このスキルを使うと、Kong/Traefik などの API ゲートウェイ、Istio などのサービスメッシュ、サーキットブレーカーや Saga などの回復性パターンといった具体的なツールを活用して、AI がマイクロサービスアーキテクチャを設計、分解、実装できます。スケーラビリティとフォールトトレランスを確保しながら、モノリスを独立したサービスに分割することに重点を置いています。

使用するタイミング

モノリスを超えてアプリケーションをスケールさせる場合(トラフィックの多い e コマースプラットフォームなど)や、分離が必要な分散システム(決済処理とユーザー管理を分離する場合など)でこのスキルを適用します。API 管理が必要な新規プロジェクトや、回復性とデプロイ速度を高めるためにレガシーアプリをマイクロサービス化する場合にも使用します。

主な機能

  • モノリスの分解:境界づけられたコンテキストを特定してサービスに分割します。たとえば、ドメイン駆動設計を使ってユーザーサービスと注文サービスを分離します。
  • API ゲートウェイ:ルーティングとレート制限を行う Kong、または動的なサービスディスカバリーを行う Traefik を設定します。
  • サービスメッシュ:Istio をデプロイして、mTLS やトラフィックシフトなど、サービス間通信を処理します。
  • サーキットブレーカー:Istio の Envoy プロキシを使って実装し、エラー率が高いときにブレーカーを作動させて、障害の連鎖を防ぎます。
  • 分散トランザクション:長時間実行されるプロセスには Saga パターンを、イベント駆動の整合性には Outbox を使用して、サービス間の原子性を確保します。

使用パターン

モノリスを分解するには、依存関係を分析して個別のサービスを作成します。まずモジュールをマイクロサービスに対応付け、次に API を定義します。API ゲートウェイでは、サービスとルートを定義して Kong 経由でリクエストをルーティングします。サービスメッシュでは、Pod に Istio サイドカーを挿入してトラフィック管理を自動化します。サーキットブレーカーでは、障害を検出してフォールバックするよう Istio ポリシーを設定します。Saga では、コーディネーターサービスを介してトランザクションをオーケストレーションします。使用例:複数ステップの操作におけるサービス呼び出しを Saga でラップし、結果に応じてコミットまたは補償します。

主なコマンド/API

Kong API Gateway の場合:

  • サービスを作成:curl -X POST http://localhost:8001/services --data "name=my-service&url=http://myapp.com"
  • ルートを追加:curl -X POST http://localhost:8001/services/my-service/routes --data "paths[]=/api" --data "methods[]=GET"
  • 設定形式:Kong の宣言的設定を YAML で使用します。例:_format_version: "1.1" services: - name: my-service url: http://myapp.com

Istio Service Mesh の場合:

  • Istio をインストール:istioctl install -y --set profile=demo
  • サーキットブレーカー用の VirtualService を適用:kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service spec: hosts: - my-service retries: attempts: 3 EOF
  • API エンドポイント:istiod Pod を通じて Istio のコントロールプレーンを使用します。例:kubectl exec -it istiod-xyz -- curl localhost:15014/stats でメトリクスを照会します。

Saga/Outbox の場合:

  • Saga を実装:Axon Framework などのライブラリを使用します。コード例:
    Saga mySaga = Saga.builder().step(() -> orderService.createOrder()).step(() -> paymentService.process()).build();
    mySaga.execute();
    
  • Outbox パターン:サービス内でイベントをデータベーステーブルに記録し、別のワーカーで処理します。設定例:CREATE TABLE outbox (id UUID, payload JSONB); のような SQL テーブル。

認証要件:認証済み API 呼び出しでは、$KONG_API_KEY などの環境変数を設定します。例:curl -H "apikey: $KONG_API_KEY" http://localhost:8001/services。

統合時の注意事項

Kong を Istio と統合するには、Kong を Istio のイングレスゲートウェイとして実行します。Kubernetes アノテーション sidecar.istio.io/inject: "true" を使って Istio サイドカーの挿入を有効にし、Kong Pod をデプロイします。Traefik の場合は、ConfigMap を使って Kubernetes イングレスコントローラーとして設定します。kubectl apply -f traefik-config.yaml を、api: {} entryPoints: web: address: ":80" のような内容とともに実行します。他のスキル(例:se-deployment)と組み合わせる場合は、app: my-microservice のような互換性のあるラベルを付けてサービスをデプロイし、複数の Namespace を設定する際は $ISTIO_NAMESPACE 環境変数を使用します。Saga パターンでは、kafka-producer.send("topic", eventPayload) を使ってイベントを公開し、Kafka などのメッセージキューと統合します。

エラー処理

Istio のサーキットブレーカーエラーは、VirtualServices でフォールバックを設定して処理します。シミュレートした障害には route: fault: abort: percentage: 100 httpStatus: 503 を設定し、kubectl logs istiod-xyz | grep error で監視します。サガでは、障害発生時に補償アクションを実装します。たとえば、注文に失敗した場合は、ロールバックメソッドを呼び出します。コードスニペット:

try { saga.execute(); } catch (Exception e) { saga.compensate(); log.error("Saga failed: " + e.getMessage()); }

API ゲートウェイでは、エラーレスポンスに Kong のプラグインを使用します。curl -X POST http://localhost:8001/services/my-service/plugins --data "name=request-termination" --data "config.status_code=503" でプラグインを追加します。検証エラーがないか、kong logs または istioctl analyze で必ずログを確認し、外部システムへの通知には $ERROR_WEBHOOK_URL などの環境変数を使用します。

具体的な使用例

  1. マイクロサービスアプリの分解とデプロイ:ブログプラットフォームの場合、「posts」と「comments」のサービスに分割します。個別の Docker イメージを作成して分解し、Kong を設定します。コマンド:docker run -d -p 8000:8000 kong:latest; curl -X POST http://localhost:8000/services -d 'name=posts-service&url=http://posts-app:8080'。Istio との統合には、istioctl create -f posts-virtualservice.yaml を実行してサーキットブレーカーを追加します。

  2. 決済システムのレジリエンスの実装:サービスメッシュには Istio を、トランザクションにはサガを使用します。kubectl apply -f circuitbreaker.yaml を実行し、次の内容でサーキットブレーカーを設定します:apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule spec: trafficPolicy: connectionPool: tcp: maxConnections: 100 outlierDetection: consecutiveErrors: 5 interval: 10m。サガでは、決済フローをオーケストレーションします。コードスニペット:

Saga paymentSaga = Saga.builder().step(() -> reserveFunds()).step(() -> processPayment()).build();
paymentSaga.executeWithCompensation();

グラフの関係

  • 関連:se-deployment(このスキルで構築したマイクロサービスのデプロイとスケーリングに使用)
  • 接続先:se-scaling(Istio のトラフィック管理と自動スケーリングを統合するため)
  • クラスターの一部:se-architecture(より広範なシステム設計に向けて、「architecture」などのタグを共有)
  • リンク先:se-monitoring(Kong と Istio のセットアップからメトリクスを監視するため)

コメント