mcpField
C
cloud-native-patterns

cloud-native-patterns

github.com/dralgorhythmクラウド・DevOps12863 回インストール14 週間前に更新
リポジトリ

cloud-native-patterns について

クラウドネイティブアプリケーションを設計する開発者向けのリファレンスです。Twelve-Factorの原則、回復性パターン、通信、ヘルスチェック、コンテナの実践項目を扱います。

主な機能

  1. 01Twelve-Factorの原則
  2. 02サーキットブレーカー、再試行、バルクヘッド
  3. 03同期・非同期通信
  4. 04ヘルス・レディネスチェック
  5. 05コンテナの実践項目

活用シーン

  1. 01クラウドネイティブ設計の見直し
  2. 02サービス呼び出しへの回復性の追加
  3. 03ヘルスエンドポイントとコンテナビルドの計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dralgorhythm/claude-agentic-framework --skill cloud-native-patterns

インストール後、Claude Code で/cloud-native-patternsを入力して読み込まれたか確認します。

詳細

クラウドネイティブのパターン

Twelve-Factor App

  1. コードベース:1つのコードベースで複数のデプロイを行います
  2. 依存関係:明示的に宣言して分離します
  3. 設定:環境変数に保存します
  4. バックエンドサービス:アタッチされたリソースとして扱います
  5. ビルド、リリース、実行:各ステージを厳密に分離します
  6. プロセス:ステートレスなプロセスとして実行します
  7. ポートバインディング:ポートを通じてサービスを公開します
  8. 並行性:プロセスモデルを通じてスケールアウトします
  9. 廃棄可能性:起動を速くし、正常にシャットダウンします
  10. 開発環境と本番環境の一致:環境を類似させます
  11. ログ:イベントストリームとして扱います
  12. 管理プロセス:単発のプロセスとして実行します

レジリエンスパターン

サーキットブレーカー

迅速に失敗させることで、障害の連鎖を防ぎます。

class CircuitBreaker {
  private failures = 0;
  private lastFailure?: Date;

  async call<T>(fn: () => Promise<T>): Promise<T> {
    if (this.isOpen()) {
      throw new Error('Circuit is open');
    }
    try {
      const result = await fn();
      this.reset();
      return result;
    } catch (error) {
      this.recordFailure();
      throw error;
    }
  }
}
バックオフ付きリトライ
async function withRetry<T>(
  fn: () => Promise<T>,
  maxRetries = 3
): Promise<T> {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      await sleep(Math.pow(2, i) * 1000); // Exponential backoff
    }
  }
}
バルクヘッド

障害を分離し、システム全体への影響を防ぎます。

サービス間通信

同期通信
  • REST/HTTP
  • gRPC
非同期通信
  • メッセージキュー(RabbitMQ、SQS)
  • イベントストリーミング(Kafka)

ヘルスチェック

app.get('/health', (req, res) => {
  res.json({ status: 'healthy' });
});

app.get('/ready', async (req, res) => {
  const dbHealthy = await checkDatabase();
  const cacheHealthy = await checkCache();

  if (dbHealthy && cacheHealthy) {
    res.json({ status: 'ready' });
  } else {
    res.status(503).json({ status: 'not ready' });
  }
});

コンテナのベストプラクティス

  • 1つのコンテナにつき1つのプロセス
  • マルチステージビルドを使用します
  • 非 root ユーザーとして実行します
  • ヘルスチェックを使用します
  • イメージを小さく保ちます

コメント