arch-microservices について
arch-microservicesは、マイクロサービスの設計と実装を支援するスキルです。モノリスの分割や分散システムの設計に向け、ゲートウェイ、サービスメッシュ、耐障害性パターンの設定を案内します。
主な機能
- 01境界づけられたコンテキストによる分割
- 02KongとTraefikのゲートウェイ設定
- 03Istioサービスメッシュの指針
- 04サーキットブレーカーとフォールバック
- 05SagaとOutboxのトランザクションパターン
活用シーン
- 01アプリケーションを独立したサービスに分割
- 02APIのルーティングとレート制限
- 03サービス間の障害連鎖を抑制
- 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 エンドポイント:
istiodPod を通じて 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 などの環境変数を使用します。
具体的な使用例
-
マイクロサービスアプリの分解とデプロイ:ブログプラットフォームの場合、「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を実行してサーキットブレーカーを追加します。 -
決済システムのレジリエンスの実装:サービスメッシュには 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 のセットアップからメトリクスを監視するため)