mcpField
A
arch-microservices

arch-microservices

github.com/alphaonedev开发41 次安装
代码仓库

关于 arch-microservices

arch-microservices 是用于设计和实现微服务架构的技能,适合拆分单体应用或规划分布式系统的团队。内容涵盖网关、服务网格和韧性模式,并提供配置指导。

主要功能

  1. 01按限界上下文拆分单体
  2. 02配置 Kong 和 Traefik 网关
  3. 03Istio 服务网格指导
  4. 04断路器与故障回退模式
  5. 05Saga 与 Outbox 事务模式

适用场景

  1. 01将应用拆分为独立服务
  2. 02路由 API 并设置速率限制
  3. 03减少服务间故障级联
  4. 04处理多步骤支付事务

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/arch-microservices确认已加载。

详细介绍

arch-microservices

用途

此技能可帮助 AI 使用 Kong/Traefik 等特定工具作为 API 网关,使用 Istio 构建服务网格,并采用断路器和 Saga 等模式来实现弹性,从而设计、拆分和实现微服务架构。重点是将单体应用拆分为独立服务,同时确保可扩展性和容错能力。

适用场景

当应用需要扩展到单体架构之外时,可使用此技能,例如流量较高的电商平台,或需要隔离的分布式系统(例如将支付处理与用户管理分开)。新项目需要 API 管理时,或需要改造旧版应用以采用微服务、提升弹性和部署速度时,也可使用此技能。

核心能力

  • 拆分单体应用:识别限界上下文并将其拆分为服务,例如使用领域驱动设计将用户服务与订单服务分开。
  • API 网关:配置 Kong 以进行路由和速率限制,或配置 Traefik 以实现动态服务发现。
  • 服务网格:部署 Istio 以处理服务间通信,包括 mTLS 和流量切换。
  • 断路器:使用 Istio 的 Envoy 代理实现断路器,在错误率较高时触发熔断,防止故障级联。
  • 分布式事务:对长时间运行的流程使用 Saga 模式,或使用 Outbox 实现事件驱动的一致性,确保跨服务的原子性。

使用模式

要拆分单体应用,请分析依赖关系并创建独立服务:首先将模块映射到微服务,然后定义 API。要使用 API 网关,请通过定义服务和路由,让请求经由 Kong 路由。在服务网格中,将 Istio sidecar 注入 Pod,以实现自动流量管理。要使用断路器,请配置 Istio 策略以检测故障并进行回退。使用 Saga 时,通过协调器服务编排事务。示例模式:将服务调用封装在 Saga 中,以处理多步骤操作,并根据结果提交或补偿。

常用命令/API

Kong API 网关:

  • 创建服务: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 服务网格:

  • 安装 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 端点:通过 Istio 控制平面中的 istiod Pod 使用 API,例如使用 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 模式:在服务中将事件记录到数据库表,并通过单独的工作进程处理;配置:SQL 表,例如 CREATE TABLE outbox (id UUID, payload JSONB);

身份验证要求:设置 $KONG_API_KEY 等环境变量,以用于经过身份验证的 API 调用,例如 curl -H "apikey: $KONG_API_KEY" http://localhost:8001/services。

集成说明

将 Kong 作为 Istio 入口网关运行,以便将 Kong 与 Istio 集成:通过 Kubernetes 注解 sidecar.istio.io/inject: "true" 部署带有 Istio sidecar 注入的 Kong Pod。对于 Traefik,可使用 ConfigMap 将其配置为 Kubernetes ingress 控制器:执行 kubectl apply -f traefik-config.yaml,并使用类似 api: {} entryPoints: web: address: ":80" 的内容。与其他技能(例如 se-deployment)结合使用时,请确保服务使用兼容的标签进行部署,例如 app: my-microservice,并在多命名空间部署中使用 $ISTIO_NAMESPACE 环境变量。对于 Saga 模式,可通过发布事件与 Kafka 等消息队列集成:kafka-producer.send("topic", eventPayload)。

错误处理

在 Istio 中配置 VirtualServices 回退,以处理断路器错误:为模拟故障设置 route: fault: abort: percentage: 100 httpStatus: 503,然后使用 kubectl logs istiod-xyz | grep error 进行监控。对于 Saga,在失败时实施补偿操作,例如订单失败时调用回滚方法:代码片段:

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 作为服务网格,并使用 Saga 处理事务。配置断路器:使用 kubectl apply -f circuitbreaker.yaml,文件内容为 apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule spec: trafficPolicy: connectionPool: tcp: maxConnections: 100 outlierDetection: consecutiveErrors: 5 interval: 10m。对于 Saga,编排支付流程:代码片段:

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

图关系

  • 相关:se-deployment(用于部署和扩展使用此技能构建的微服务)
  • 关联:se-scaling(用于将自动扩展与 Istio 的流量管理集成)
  • 所属集群:se-architecture(共享 “architecture” 等标签,用于更广泛的系统设计)
  • 链接至:se-monitoring(用于观测 Kong 和 Istio 设置的指标)

评论

支持 Markdown