关于 arch-microservices
arch-microservices 是用于设计和实现微服务架构的技能,适合拆分单体应用或规划分布式系统的团队。内容涵盖网关、服务网格和韧性模式,并提供配置指导。
主要功能
- 01按限界上下文拆分单体
- 02配置 Kong 和 Traefik 网关
- 03Istio 服务网格指导
- 04断路器与故障回退模式
- 05Saga 与 Outbox 事务模式
适用场景
- 01将应用拆分为独立服务
- 02路由 API 并设置速率限制
- 03减少服务间故障级联
- 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 控制平面中的
istiodPod 使用 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 等环境变量通知外部系统。
具体使用示例
-
分解并部署微服务应用:对于博客平台,将其拆分为 “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 作为服务网格,并使用 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 设置的指标)