arch-scalability について
arch-scalability は、スケーラブルなシステムの設計と実装を支援する OpenClaw 向けアーキテクチャスキルです。スケーリング、負荷分散、キャッシュ、データベースレプリカ、キューによる分離を扱います。
主な機能
- 01水平・垂直スケーリング
- 02ロードバランシング
- 03Redis と CDN のキャッシュ
- 04データベースの読み取りレプリカ
- 05キューによる処理分離
- 06スケーリングの監視とエラー処理
活用シーン
- 01EC サイトのアクセス急増への対応
- 02リアルタイムデータ処理アプリの拡張
- 03マイクロサービスの負荷分散
- 04モノリスからクラウドネイティブ設計への移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill arch-scalabilityインストール後、Claude Code で/arch-scalabilityを入力して読み込まれたか確認します。
詳細
arch-scalability
目的
このスキルを使うと、OpenClaw がスケーラブルなシステムアーキテクチャを設計・実装できます。水平スケーリングと垂直スケーリング、負荷分散、キャッシュ戦略(Redis や CDN など)、データベースのレプリカ、キューベースの疎結合を通じて、負荷の増加に対応し、成長に伴ってもアプリケーションのパフォーマンスと信頼性を維持します。
使用するタイミング
アプリケーションでトラフィックの急増が発生する場合、リソースの弾力的な割り当てが必要な場合、またはボトルネックを回避するためにワークロードを分散する必要がある場合に、このスキルを使用します。たとえば、セール期間中の EC サイト、リアルタイムデータ処理アプリ、変動するユーザー負荷を処理するマイクロサービスなどが該当します。クラウドネイティブな設計を開発初期に行う場合や、モノリシックアプリを移行する場合にも適用します。
主な機能
- 水平スケーリング:同一のインスタンス(AWS Auto Scaling などを使用)を追加して負荷を分散します。ポッドのスケーリングには Kubernetes などのツールを使用します。
- 垂直スケーリング:既存のリソース(EC2 インスタンスの CPU/RAM など)をアップグレードして、すぐに容量を増やします。ただし、ダウンタイムを避けるため、上限を監視してください。
- 負荷分散:NGINX や AWS ELB を使用してサーバー間でトラフィックを分散します。ラウンドロビンや最小接続数などのアルゴリズムに対応しています。
- キャッシュ:インメモリキャッシュには Redis を、静的アセットには CDN(Cloudflare など)を導入して、レイテンシーとデータベースへのアクセスを削減します。
- DB レプリカ: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 -
DB レプリカ(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 エンドポイント:/api/scalability/scale-group に JSON 本文 { "group": "my-group", "action": "scale-out", "instances": 2 } を付けて POST し、認証ヘッダー 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 エラーを監視し、サーバーのヘルスチェックに失敗した場合はスケールアップします。DB レプリカでは、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
インシデント発生後の分析に備え、すべてのエラーをタイムスタンプとメトリクスとともに記録してください。
具体的な使用例
-
例: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 を介して負荷を分散します。
-
例:データベースクエリに対する Redis キャッシュの実装
Python Flask アプリでは、DB へのアクセスを減らすためにユーザーデータをキャッシュします。まず、前述のとおり 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 パターンについて)