capacity-planning-helper

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Capacity Planning Helper

容量规划助手

Right-size infrastructure for current and future needs.
为当前和未来需求匹配合适规模的基础设施。

Traffic Forecasting

流量预测

typescript
interface TrafficForecast {
  current: {
    dailyUsers: number;
    peakRPS: number;
    avgRPS: number;
  };
  projected: {
    timeframe: "6m" | "12m" | "24m";
    dailyUsers: number;
    peakRPS: number;
    avgRPS: number;
    growthRate: number;
  };
}

const forecast: TrafficForecast = {
  current: {
    dailyUsers: 100000,
    peakRPS: 500,
    avgRPS: 200,
  },
  projected: {
    timeframe: "12m",
    dailyUsers: 500000, // 5x growth
    peakRPS: 2500,
    avgRPS: 1000,
    growthRate: 4.0, // 400% growth
  },
};
typescript
interface TrafficForecast {
  current: {
    dailyUsers: number;
    peakRPS: number;
    avgRPS: number;
  };
  projected: {
    timeframe: "6m" | "12m" | "24m";
    dailyUsers: number;
    peakRPS: number;
    avgRPS: number;
    growthRate: number;
  };
}

const forecast: TrafficForecast = {
  current: {
    dailyUsers: 100000,
    peakRPS: 500,
    avgRPS: 200,
  },
  projected: {
    timeframe: "12m",
    dailyUsers: 500000, // 5x growth
    peakRPS: 2500,
    avgRPS: 1000,
    growthRate: 4.0, // 400% growth
  },
};

Resource Estimation

资源估算

typescript
interface ResourceNeeds {
  compute: {
    instanceType: string;
    instanceCount: number;
    cpu: number;
    memory: number;
  };
  database: {
    instanceType: string;
    instanceCount: number;
    storage: number;
    iops: number;
  };
  cache: {
    instanceType: string;
    nodes: number;
    memory: number;
  };
}

function estimateResources(forecast: TrafficForecast): ResourceNeeds {
  const { peakRPS } = forecast.projected;

  // Rule of thumb: 100 RPS per instance (with headroom)
  const instanceCount = Math.ceil(peakRPS / 100);

  // Database: 1000 connections per 2vCPU
  const dbInstances = Math.ceil((peakRPS * 2) / 1000);

  return {
    compute: {
      instanceType: "t3.large",
      instanceCount: instanceCount * 1.5, // 50% headroom
      cpu: 2 * instanceCount,
      memory: 8 * instanceCount,
    },
    database: {
      instanceType: "db.r6g.xlarge",
      instanceCount: dbInstances,
      storage: 1000, // GB
      iops: 10000,
    },
    cache: {
      instanceType: "cache.r6g.large",
      nodes: 2, // Primary + replica
      memory: 12, // GB
    },
  };
}
typescript
interface ResourceNeeds {
  compute: {
    instanceType: string;
    instanceCount: number;
    cpu: number;
    memory: number;
  };
  database: {
    instanceType: string;
    instanceCount: number;
    storage: number;
    iops: number;
  };
  cache: {
    instanceType: string;
    nodes: number;
    memory: number;
  };
}

function estimateResources(forecast: TrafficForecast): ResourceNeeds {
  const { peakRPS } = forecast.projected;

  // Rule of thumb: 100 RPS per instance (with headroom)
  const instanceCount = Math.ceil(peakRPS / 100);

  // Database: 1000 connections per 2vCPU
  const dbInstances = Math.ceil((peakRPS * 2) / 1000);

  return {
    compute: {
      instanceType: "t3.large",
      instanceCount: instanceCount * 1.5, // 50% headroom
      cpu: 2 * instanceCount,
      memory: 8 * instanceCount,
    },
    database: {
      instanceType: "db.r6g.xlarge",
      instanceCount: dbInstances,
      storage: 1000, // GB
      iops: 10000,
    },
    cache: {
      instanceType: "cache.r6g.large",
      nodes: 2, // Primary + replica
      memory: 12, // GB
    },
  };
}

Cost Estimation

成本估算

typescript
interface CostEstimate {
  monthly: {
    compute: number;
    database: number;
    cache: number;
    storage: number;
    bandwidth: number;
    total: number;
  };
  annual: number;
}

const pricing = {
  "t3.large": 0.0832, // $/hour
  "db.r6g.xlarge": 0.336,
  "cache.r6g.large": 0.226,
  storage: 0.1, // $/GB/month
  bandwidth: 0.09, // $/GB
};

function estimateCost(
  resources: ResourceNeeds,
  trafficGB: number
): CostEstimate {
  const hoursPerMonth = 730;

  const monthly = {
    compute:
      resources.compute.instanceCount * pricing["t3.large"] * hoursPerMonth,
    database:
      resources.database.instanceCount *
      pricing["db.r6g.xlarge"] *
      hoursPerMonth,
    cache: resources.cache.nodes * pricing["cache.r6g.large"] * hoursPerMonth,
    storage: resources.database.storage * pricing.storage,
    bandwidth: trafficGB * pricing.bandwidth,
    total: 0,
  };

  monthly.total = Object.values(monthly).reduce((sum, cost) => sum + cost, 0);

  return {
    monthly,
    annual: monthly.total * 12,
  };
}
typescript
interface CostEstimate {
  monthly: {
    compute: number;
    database: number;
    cache: number;
    storage: number;
    bandwidth: number;
    total: number;
  };
  annual: number;
}

const pricing = {
  "t3.large": 0.0832, // $/hour
  "db.r6g.xlarge": 0.336,
  "cache.r6g.large": 0.226,
  storage: 0.1, // $/GB/month
  bandwidth: 0.09, // $/GB
};

function estimateCost(
  resources: ResourceNeeds,
  trafficGB: number
): CostEstimate {
  const hoursPerMonth = 730;

  const monthly = {
    compute:
      resources.compute.instanceCount * pricing["t3.large"] * hoursPerMonth,
    database:
      resources.database.instanceCount *
      pricing["db.r6g.xlarge"] *
      hoursPerMonth,
    cache: resources.cache.nodes * pricing["cache.r6g.large"] * hoursPerMonth,
    storage: resources.database.storage * pricing.storage,
    bandwidth: trafficGB * pricing.bandwidth,
    total: 0,
  };

  monthly.total = Object.values(monthly).reduce((sum, cost) => sum + cost, 0);

  return {
    monthly,
    annual: monthly.total * 12,
  };
}

Scale Triggers

扩缩容触发规则

yaml
undefined
yaml
undefined

auto-scaling-config.yml

auto-scaling-config.yml

scaling: triggers: - metric: cpu_utilization threshold: 70% action: scale_up cooldown: 5m
- metric: cpu_utilization
  threshold: 30%
  action: scale_down
  cooldown: 15m

- metric: request_queue_depth
  threshold: 1000
  action: scale_up
  cooldown: 1m
limits: min_instances: 2 max_instances: 20
schedule: # Pre-scale for known traffic patterns - time: "08:00" target_instances: 10 - time: "22:00" target_instances: 4
undefined
scaling: triggers: - metric: cpu_utilization threshold: 70% action: scale_up cooldown: 5m
- metric: cpu_utilization
  threshold: 30%
  action: scale_down
  cooldown: 15m

- metric: request_queue_depth
  threshold: 1000
  action: scale_up
  cooldown: 1m
limits: min_instances: 2 max_instances: 20
schedule: # Pre-scale for known traffic patterns - time: "08:00" target_instances: 10 - time: "22:00" target_instances: 4
undefined

Cost/Performance Tradeoffs

成本/性能权衡

markdown
undefined
markdown
undefined

Infrastructure Options

基础设施选项

Option 1: Cost-Optimized ($2,500/mo)

选项1:成本优化型(每月2500美元)

  • Compute: 4x t3.large
  • Database: 1x db.r6g.large
  • Cache: 1x cache.r6g.medium
  • Pros: Lowest cost
  • Cons: Limited headroom, potential latency issues
  • 计算资源:4台 t3.large
  • 数据库:1台 db.r6g.large
  • 缓存:1台 cache.r6g.medium
  • 优势: 成本最低
  • 劣势: 预留空间有限,可能存在延迟问题

Option 2: Balanced ($5,000/mo)

选项2:均衡型(每月5000美元)

  • Compute: 8x t3.large
  • Database: 2x db.r6g.xlarge
  • Cache: 2x cache.r6g.large
  • Pros: Good headroom, redundancy
  • Cons: Moderate cost
  • 计算资源:8台 t3.large
  • 数据库:2台 db.r6g.xlarge
  • 缓存:2台 cache.r6g.large
  • 优势: 充足的预留空间,具备冗余能力
  • 劣势: 成本适中

Option 3: Performance-Optimized ($10,000/mo)

选项3:性能优化型(每月10000美元)

  • Compute: 12x c6g.xlarge
  • Database: 3x db.r6g.2xlarge
  • Cache: 3x cache.r6g.xlarge
  • Pros: Maximum performance, high availability
  • Cons: Higher cost
  • 计算资源:12台 c6g.xlarge
  • 数据库:3台 db.r6g.2xlarge
  • 缓存:3台 cache.r6g.xlarge
  • 优势: 性能最大化,高可用性
  • 劣势: 成本较高

Recommendation

建议

Start with Option 2, monitor for 1 month, adjust based on:
  • Actual CPU/memory utilization
  • Database query performance
  • Cache hit rates
undefined
从选项2开始,监控1个月后,根据以下数据调整:
  • 实际CPU/内存使用率
  • 数据库查询性能
  • 缓存命中率
undefined

Capacity Planning Spreadsheet

容量规划表格

| Metric              | Current | 6mo Proj | 12mo Proj | Notes                    |
|---------------------|---------|----------|-----------|--------------------------|
| Daily Users         | 100k    | 250k     | 500k      | 5x growth expected       |
| Peak RPS            | 500     | 1250     | 2500      | Linear w/ users          |
| DB Connections      | 100     | 250      | 500       | 2 per instance           |
| Storage (GB)        | 100     | 300      | 1000      | User data + logs         |
| Bandwidth (TB)      | 1       | 3        | 10        | Images + video           |
| Instance Count      | 4       | 10       | 20        | Auto-scaling             |
| Monthly Cost        | $2k     | $5k      | $10k      | AWS estimate             |
| 指标                | 当前值 | 6个月预测 | 12个月预测 | 说明                     |
|---------------------|---------|----------|-----------|--------------------------|
| 日活用户数          | 100k    | 250k     | 500k      | 预计增长5倍              |
| 峰值RPS             | 500     | 1250     | 2500      | 随用户量线性增长         |
| 数据库连接数        | 100     | 250      | 500       | 每个实例2个连接          |
| 存储容量(GB)      | 100     | 300      | 1000      | 用户数据+日志            |
| 带宽(TB)          | 1       | 3        | 10        | 图片+视频                |
| 实例数量            | 4       | 10       | 20        | 自动扩缩容               |
| 月度成本            | $2k     | $5k      | $10k      | AWS估算值                |

Output Checklist

输出检查清单

  • Traffic forecast
  • Resource estimates
  • Cost analysis
  • Scale triggers
  • Performance targets
  • Growth plan ENDFILE
  • 流量预测
  • 资源估算
  • 成本分析
  • 扩缩容触发规则
  • 性能目标
  • 增长规划 ENDFILE