mcpField
R
rfc-generator

rfc-generator

github.com/patricio0312rev開発63280 回インストール41 週間前に更新
リポジトリ

rfc-generator について

技術提案を RFC としてまとめるスキルです。課題、アーキテクチャ、代替案、トレードオフ、リスク、展開計画、レビュー手順を整理します。

主な機能

  1. 01RFC の構成とテンプレート
  2. 02アーキテクチャと詳細設計の記録
  3. 03代替案とトレードオフの比較
  4. 04リスクと軽減策の整理
  5. 05起草・レビュー・承認段階の定義
  6. 06実装と成功基準の提示

活用シーン

  1. 01システムアーキテクチャの変更提案
  2. 02実装前の選択肢の比較
  3. 03技術レビューと承認の調整
  4. 04RFC の実装状況の追跡

インストール

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

$npx skills add https://github.com/patricio0312rev/skills --skill rfc-generator

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

詳細

RFC ジェネレーター

RFC を使用して、包括的な技術提案を作成します。

RFC テンプレート

# RFC-042: Implement Read Replicas for Analytics

**Status:** Draft | In Review | Accepted | Rejected | Implemented
**Author:** Alice ([email protected])
**Reviewers:** Bob, Charlie, David
**Created:** 2024-01-15
**Updated:** 2024-01-20
**Target Date:** Q1 2024

## Summary

Add PostgreSQL read replicas to separate analytical queries from transactional workload, improving database performance and enabling new analytics features.

## Problem Statement

### Current Situation

Our PostgreSQL database serves both transactional (OLTP) and analytical (OLAP) workloads:

- 1000 writes/min (checkout, orders, inventory)
- 5000 reads/min (user browsing, search)
- 500 analytics queries/min (dashboards, reports)

### Issues

1. **Performance degradation**: Analytics queries slow down transactions
2. **Resource contention**: Complex reports consume CPU/memory
3. **Blocking features**: Can't add more dashboards without impacting users
4. **Peak hour problems**: Analytics scheduled during business hours

### Impact

- Checkout p95 latency: 800ms (target: <300ms)
- Database CPU: 75% average, 95% peak
- Customer complaints about slow pages
- Product team blocked on analytics features

### Success Criteria

- Checkout latency <300ms p95
- Database CPU <50%
- Support 2x more analytics queries
- Zero impact on transactional performance

## Proposed Solution

### High-Level Design

┌─────────────┐ │ Primary │────────────────┐ │ (Write) │ │ └─────────────┘ │ ▼ ┌─────────────┐ │ Replica 1 │ │ (Read) │ └─────────────┘ ▼ ┌─────────────┐ │ Replica 2 │ │ (Analytics)│ └─────────────┘


### Architecture
1. **Primary database**: Handles all writes and critical reads
2. **Read Replica 1**: Serves user-facing read queries
3. **Read Replica 2**: Dedicated to analytics/reporting

### Routing Strategy
```typescript
const db = {
  primary: primaryConnection,
  read: replicaConnection,
  analytics: analyticsConnection,
};

// Write
await db.primary.users.create(data);

// Critical read (always fresh)
await db.primary.users.findById(id);

// Non-critical read (can be slightly stale)
await db.read.products.search(query);

// Analytics
await db.analytics.orders.aggregate(pipeline);
レプリケーション
  • 種類: ストリーミングレプリケーション
  • 遅延: 読み取りレプリカでは 1 秒未満、分析用では 5 秒未満を許容
  • 監視: 遅延が 5 秒を超えた場合にアラートを発報

詳細設計

データベース設定
# Primary
max_connections: 200
shared_buffers: 4GB
work_mem: 16MB

# Read Replica
max_connections: 100
shared_buffers: 8GB
work_mem: 32MB

# Analytics Replica
max_connections: 50
shared_buffers: 16GB
work_mem: 64MB
コネクションプーリング
const pools = {
  primary: new Pool({ max: 20, min: 5 }),
  read: new Pool({ max: 50, min: 10 }),
  analytics: new Pool({ max: 10, min: 2 }),
};
クエリの分類
enum QueryType {
  WRITE = "primary",
  CRITICAL_READ = "primary",
  READ = "read",
  ANALYTICS = "analytics",
}

function route(queryType: QueryType) {
  return pools[queryType];
}

検討した代替案

代替案 1:垂直スケーリング

アプローチ: より大規模なデータベースインスタンスにアップグレードします。

  • 長所: シンプルで、コードの変更が不要
  • 短所: コストが高い($500 → $2000/月)、ワークロードを分離できず、依然として上限に達する
  • 判定: 却下 — 分離の問題を解決できません
代替案 2:分析用データベースの分離

アプローチ: 専用の分析用 DB(例:ClickHouse)にデータをコピーします。

  • 長所: 分析に最適で、プライマリへの影響がありません
  • 短所: ETL パイプラインが複雑で、結果整合性になり、保守コストが高い
  • 判定: 保留 — レプリカが不十分な場合は、将来的に検討します
代替案 3:マテリアライズドビュー

アプローチ: 分析結果を事前に計算します。

  • 長所: クエリが高速で、レプリカが不要
  • 短所: 既知のクエリに限定され、保守の負担がある
  • 判定: レプリカの補完策であり、代替策ではありません

トレードオフ

最適化する項目
  • パフォーマンスの分離
  • コスト効率
  • 迅速な実装
  • 運用のシンプルさ
許容する項目
  • データがわずかに古くなること(分析では許容可能)
  • インフラストラクチャの複雑さの増加
  • 運用コストの増加

リスクと緩和策

リスク 1:レプリケーション遅延

影響: 分析で古いデータが表示されます。 発生確率: 中 緩和策:

  • 遅延を継続的に監視します
  • 5 秒を超えた場合にアラートを発報します
  • 想定される遅延をユーザー向けに文書化します
リスク 2:設定の複雑さ

影響: ルーティングエラーやパフォーマンスの問題が発生します。 発生確率: 低 緩和策:

  • 包括的にテストします
  • 段階的にロールアウトします
  • 簡単にロールバックできる仕組みを用意します
リスク 3:コスト超過

影響: 予算を超過します。 発生確率: 低 緩和策:

  • 分析用には小規模なインスタンスを使用します($300/月)
  • 使用状況を監視します
  • 1 か月後に適正なサイズに調整します

ロールアウト計画

フェーズ 1:セットアップ(第 1~2 週)
  • 読み取りレプリカ 1 をプロビジョニングします
  • 分析用レプリカ 2 をプロビジョニングします
  • レプリケーションを設定します
  • 遅延が 1 秒未満であることを確認します
  • 負荷テストを実施します
フェーズ 2:読み取りレプリカ(第 3 週)
  • ルーティングロジックをデプロイします
  • 検索クエリの 10% をレプリカにルーティングします
  • エラーとレイテンシーを監視します
  • 100% まで段階的に引き上げます
フェーズ 3:分析の移行(第 4~5 週)
  • 分析クエリを特定します
  • ダッシュボードのクエリを分析用レプリカに更新します
  • レポートをテストします
  • すべての分析を移行します
フェーズ 4:検証(第 6 週)
  • チェックアウトのレイテンシー改善を測定します
  • CPU 使用率の低下を確認します
  • ユーザー受け入れテストを実施します
  • 完了としてマークします

成功指標

主な目標
  • ✅ チェックアウトのレイテンシーが p95 で 300ms 未満(現在は 800ms)
  • ✅ プライマリ DB の CPU 使用率が 50% 未満(現在は 75%)
  • ✅ レプリケーション遅延によるエラーがゼロ
副次的な目標
  • 分析クエリを 2 倍サポートする
  • 新しいダッシュボード機能を利用可能にする
  • チーム満足度調査で 8/10 超を達成する

コスト分析

コンポーネント現在提案差分
プライマリ DB$500/mo$500/mo$0
読み取りレプリカ-$500/mo+$500
分析用レプリカ-$300/mo+$300
合計$500/mo$1,300/mo+$800/mo

ROI: パフォーマンスの向上によって収益成長が可能になり、分析によって製品に関するインサイトが得られます。

未解決の質問

  1. 分析に許容できるレプリケーションの遅延はどの程度ですか?(提案:5秒未満)
  2. レプリカの障害にはどのように対処しますか?(提案:プライマリにフォールバック)
  3. 後からレプリカを追加する必要がありますか?(提案:監視し、第2四半期に判断)

スケジュール

  • 第1~2週:プロビジョニングとセットアップ
  • 第3週:読み取りレプリカへの移行
  • 第4~5週:分析の移行
  • 第6週:検証
  • 合計:6週間

付録

参考資料
レビュー履歴
  • 2024-01-15:初稿(Alice)
  • 2024-01-17:コスト分析を追加(Bob)
  • 2024-01-20:レビューコメントに対応

## RFC Process

### 1. Draft (1 week)
- Author writes RFC
- Include problem, solution, alternatives
- Share with team for early feedback

### 2. Review (1-2 weeks)
- Distribute to reviewers
- Collect comments
- Address feedback
- Iterate on design

### 3. Approval (1 week)
- Present to architecture review
- Resolve remaining concerns
- Vote: Accept/Reject
- Update status

### 4. Implementation
- Track progress
- Update RFC with learnings
- Mark as implemented

## Best Practices

1. **Clear problem**: Start with why
2. **Concrete solution**: Be specific
3. **Consider alternatives**: Show you explored options
4. **Honest tradeoffs**: Every choice has costs
5. **Measurable success**: Define done
6. **Risk mitigation**: Plan for failure
7. **Iterative**: Update based on feedback

## Output Checklist

- [ ] Problem statement
- [ ] Proposed solution with architecture
- [ ] 2+ alternatives considered
- [ ] Tradeoffs documented
- [ ] Risks with mitigations
- [ ] Rollout plan with phases
- [ ] Success metrics defined
- [ ] Cost analysis
- [ ] Timeline estimated
- [ ] Reviewers assigned

コメント