扩展策略¶
KanjiIQ的设计支持从当前的单节点部署扩展到多节点、多区域架构,以应对流量增长。
当前状态¶
| 指标 | 值 |
|---|---|
| 集群节点数 | 1(Hetzner专用服务器) |
| 应用副本数 | 2 |
| 数据库 | 单PostgreSQL实例 |
| 流量处理 | 每IP约100请求/分钟(速率限制) |
这足以从容应对当前流量。以下各节概述了需求增长时的扩展路径。
水平Pod自动扩缩容 (HPA)¶
第一步扩展是添加HPA,根据负载自动调整副本数量:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: jlpt-kanji-hpa
namespace: jlpt-kanji
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: jlpt-kanji
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
前提条件:需要安装Metrics Server(k3s默认包含)。
效果:应用根据CPU/内存压力在2-10个副本之间自动扩缩容,无需代码更改。
多节点集群¶
当单节点达到资源上限时,向k3s集群添加工作节点:
# On the new worker node
curl -sfL https://get.k3s.io | K3S_URL=https://master:6443 \
K3S_TOKEN=<node-token> sh -
Kubernetes自动将Pod调度到所有可用节点上。应用无需任何更改——它已经是无状态的。
节点亲和性(可选)¶
控制Pod放置:
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: jlpt-kanji
topologyKey: kubernetes.io/hostname
这将副本分散到不同节点上,提高容错能力。
数据库扩展¶
连接池¶
添加PgBouncer作为Sidecar容器来池化数据库连接:
containers:
- name: pgbouncer
image: edoburu/pgbouncer
ports:
- containerPort: 6432
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: jlpt-kanji-secrets
key: database-url
后端连接到PgBouncer的:6432端口而非直接连接PostgreSQL,减少连接开销。
只读副本¶
对于读密集型工作负载(闪卡查询),添加PostgreSQL流复制:
- 主实例处理写操作(学习会话、测验结果)
- 只读副本处理读操作(汉字/词汇查询)
- 后端根据操作类型路由查询
托管数据库¶
最简单的数据库扩展路径是迁移到托管服务:
- AWS RDS:多可用区、自动备份、只读副本
- GCP Cloud SQL:高可用配置、自动故障转移
- Hetzner托管PostgreSQL:推出后可用
详见可移植性了解迁移详情。
CDN层¶
静态前端资源可通过CDN提供全球性能优化:
graph LR
U[User] --> CF[Cloudflare CDN]
CF -->|Cache HIT| U
CF -->|Cache MISS| N[Nginx Frontend]
N --> CF
由于Flutter Web前端生成静态文件(JS、CSS、图片),这些是理想的CDN候选资源:
- 缓存策略:哈希资源缓存1年,
index.html不缓存 - 全球PoP:从最近的边缘节点提供内容
- DDoS防护:CDN吸收流量型攻击
Cloudflare DNS已就位——启用代理模式即可激活CDN层。
扩展路线图¶
| 流量级别 | 基础设施 | 关键更改 |
|---|---|---|
| 当前(低) | 1节点,2副本,单PG | 无需更改 |
| 增长期(中等) | 1节点,HPA(2-10副本) | 添加HPA清单 |
| 高流量 | 2-3节点,HPA,PgBouncer | 添加工作节点 + 连接池 |
| 超高流量 | 多节点,托管数据库,CDN | 迁移数据库到RDS/Cloud SQL,启用CDN |
| 全球化 | 多区域集群,只读副本 | 重大架构演进 |
每一步都是渐进式的——无需重写。应用代码在所有扩展级别上保持不变。