rfc-generator について
技術提案を RFC としてまとめるスキルです。課題、アーキテクチャ、代替案、トレードオフ、リスク、展開計画、レビュー手順を整理します。
主な機能
- 01RFC の構成とテンプレート
- 02アーキテクチャと詳細設計の記録
- 03代替案とトレードオフの比較
- 04リスクと軽減策の整理
- 05起草・レビュー・承認段階の定義
- 06実装と成功基準の提示
活用シーン
- 01システムアーキテクチャの変更提案
- 02実装前の選択肢の比較
- 03技術レビューと承認の調整
- 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: パフォーマンスの向上によって収益成長が可能になり、分析によって製品に関するインサイトが得られます。
未解決の質問
- 分析に許容できるレプリケーションの遅延はどの程度ですか?(提案:5秒未満)
- レプリカの障害にはどのように対処しますか?(提案:プライマリにフォールバック)
- 後からレプリカを追加する必要がありますか?(提案:監視し、第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
コメント
Markdown 対応