mcpField
A
arch-scalability

arch-scalability

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

关于 arch-scalability

arch-scalability 是供 OpenClaw 使用的系统架构技能,帮助设计和实施可扩展方案。它涵盖扩缩容、负载均衡、缓存、数据库副本与队列解耦等常见手段。

主要功能

  1. 01水平与垂直扩缩容
  2. 02负载均衡
  3. 03Redis 与 CDN 缓存
  4. 04数据库只读副本
  5. 05队列解耦
  6. 06扩缩容监控与错误处理

适用场景

  1. 01应对电商促销流量峰值
  2. 02扩展实时数据处理应用
  3. 03分散微服务工作负载
  4. 04将单体应用迁移至云原生架构

安装

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

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

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

详细介绍

arch-scalability

用途

此技能使 OpenClaw 能够设计和实现可扩展的系统架构,重点是通过水平扩展和垂直扩展、负载均衡、缓存策略(例如 Redis 或 CDN)、数据库副本以及基于队列的解耦来应对负载增长,确保应用在发展过程中依然保持高性能和可靠性。

适用场景

当应用遇到流量高峰、需要弹性分配资源,或需要分配工作负载以避免瓶颈时,请使用此技能,例如促销期间的电子商务网站、实时数据处理应用,或需要处理可变用户负载的微服务。对于云原生设计或单体应用迁移,应在开发早期应用此技能。

核心功能

  • 水平扩展:添加相同的实例(例如,通过 AWS Auto Scaling)以分配负载;使用 Kubernetes 等工具扩展 Pod。
  • 垂直扩展:升级现有资源(例如,增加 EC2 实例的 CPU/RAM)以满足即时容量需求,但要监控限制,避免停机。
  • 负载均衡:使用 NGINX 或 AWS ELB 在服务器之间分配流量;支持轮询或最少连接算法。
  • 缓存:使用 Redis 实现内存缓存,或使用 CDN(例如 Cloudflare)缓存静态资源,以降低延迟并减少数据库访问。
  • 数据库副本:在 MySQL 或 PostgreSQL 中设置只读副本,以处理读密集型查询,避免主数据库过载。
  • 队列解耦:使用 RabbitMQ 或 Kafka 分流任务,防止高吞吐量系统出现同步瓶颈。

使用模式

要进行水平扩展,请在 AWS 中配置自动扩展组;要进行垂直扩展,请以编程方式调整实例类型。对于缓存,请使用 Redis 实现缓存旁路等模式,缓存频繁访问的数据。对于负载均衡,请将 NGINX 集成为反向代理。将任务路由到队列以解耦服务,确保异步处理。始终监控指标(例如,通过 Prometheus),并在 CPU > 80% 时触发扩展事件。模式示例:在 Node.js 应用中,处理任务前检查队列长度,并动态扩展工作进程。

常用命令/API

执行可扩展性任务时使用以下确切命令。设置用于身份验证的环境变量,例如,连接 Redis 时使用 export REDIS_API_KEY=$SERVICE_API_KEY。

  • 水平扩展(AWS CLI):创建自动扩展组:
    aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-group --launch-configuration-name my-config --min-size 1 --max-size 5 --vpc-zone-identifier subnet-123456

  • 垂直扩展(AWS EC2):修改实例类型:
    aws ec2 modify-instance-attribute --instance-id i-12345678 --instance-type "{\"Value": "t3.medium"}"

  • 负载均衡(NGINX 配置):编辑 /etc/nginx/nginx.conf 并添加:
    upstream backend { server 192.168.1.1:80; server 192.168.1.2:80; } server { listen 80; location / { proxy_pass http://backend; } }

  • 缓存(Redis CLI):设置和获取缓存值:
    redis-cli -h redis-host SET user:1 "John Doe" EX 3600
    redis-cli -h redis-host GET user:1

  • 数据库副本(MySQL):创建副本:
    mysql -u root -p -e "CALL mysql.rds_create_replication_group('my-group', 'my-replica');"(适用于 AWS RDS)

  • 队列解耦(RabbitMQ):发布消息:
    rabbitmqadmin publish exchange=logs routingKey=info payload="{'message': 'High load detected'}

OpenClaw 集成的 API 端点:使用 POST 请求 /api/scalability/scale-group,并在 JSON 请求体中提供 { "group": "my-group", "action": "scale-out", "instances": 2 },同时包含身份验证标头 Authorization: Bearer $SERVICE_API_KEY。

集成说明

在代码中封装可扩展性逻辑来进行集成;例如,使用 Python 中的 AWS SDK 检查指标并触发扩容:导入 boto3,然后执行 autoscaling = boto3.client('autoscaling')。对于 Redis,通过 redis-py 库进行连接:import redis; r = redis.Redis(host='redis-host', password=os.environ['REDIS_API_KEY'])。使用 YAML 等配置文件设置参数:

scaling:
  min_instances: 1
  max_instances: 5
  threshold: 80  # CPU percent

确保服务位于同一 VPC 中,以实现低延迟通信。对于 CDN,通过 API 配置 Cloudflare:curl -X PUT "https://api.cloudflare.com/client/v4/zones/zone-id/settings/development_mode" -H "Authorization: Bearer $CLOUDFLARE_API_KEY" -d '{"value":"on"}'。先在预发布环境中测试集成。

错误处理

主动处理错误:对于 Redis 连接,使用 try-except 块捕获 ConnectionError,并通过指数退避机制重试(例如,等待 2^x 秒)。在负载均衡中,监控 502 错误,并在服务器运行状况检查失败时扩容。对于数据库副本,使用 MySQL 中的 SHOW SLAVE STATUS 检查复制延迟;如果延迟超过 5 秒,则回退到主库。队列错误(例如,RabbitMQ 连接失败)应通过 Sentry 等工具触发告警;代码片段:

import pika
try:
    connection = pika.BlockingConnection(pika.URLParameters(os.environ['RABBITMQ_URL']))
except pika.exceptions.AMQPConnectionError as e:
    print(f"Queue error: {e}. Retrying in 5 seconds...")
    time.sleep(5)
    # Retry logic here

记录所有错误及其时间戳和指标,以便进行事后事件分析。

具体使用示例

  1. 示例:使用 NGINX 负载均衡器扩展 Web 应用
    对于处理用户请求的 Node.js Web 服务器,首先设置 NGINX:按上述说明编辑配置,然后运行 nginx -s reload。在代码中使用 AWS SDK 自动扩容:

    const AWS = require('aws-sdk'); const autoscaling = new AWS.AutoScaling(); autoscaling.setDesiredCapacity({ AutoScalingGroupName: 'my-group', DesiredCapacity: 3 }).promise();
    

    当流量超过阈值时,这会扩展到 3 个实例,并通过 NGINX 分配负载。

  2. 示例:为数据库查询实现 Redis 缓存
    在 Python Flask 应用中缓存用户数据,以减少数据库访问次数:首先,按上述说明连接 Redis。然后:

    import redis r = redis.Redis(host='redis-host', password=os.environ['REDIS_API_KEY']) def get_user(id): value = r.get(f'user:{id}') if value: return value.decode() else: user = query_db(id)  # Fetch from DB r.set(f'user:{id}', user, ex=3600) return user
    

    这会将结果缓存 1 小时,在高负载期间提升响应速度。

图关系

  • 相关集群:se-architecture
  • 相关标签:scalability、load-balancing、caching、architecture
  • 关联技能:arch-load-balancing(用于深入了解负载策略)、data-caching(用于高级 Redis 模式)

评论

支持 Markdown