架构设计五大维度 学习笔记(第 2 部分)
7.2 第二阶段:垂直扩展
plaintext
中期架构(日活 10,000)
用户服务
│
┌───────────┼───────────┐
│ │ │
订单服务 支付服务 内容服务
│ │ │
└───────┼───────┘
│
┌───────┼───────┐
│ │ │
用户DB 订单DB 支付DB7.3 第三阶段:水平扩展 + 垂直扩展
plaintext
后期架构(日活 100,000+)
API 网关
│
┌───────────┼───────────┐
│ │ │
用户服务(3实例) 订单服务(10实例) 支付服务(2实例)
│ │ │
└───────────────┼───────────────┘
│
┌───────┼───────┐
│ │ │
用户DB 订单DB 支付DB
│ │ │
└───────┼───────┘
│
Redis 集群(会话、缓存)八、常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 水平扩展后数据不一致 | 缓存未同步 | Redis 集中缓存 + 分布式锁 |
| 垂直拆分后服务调用复杂 | 服务依赖增加 | 服务治理 + 监控追踪 |
| 扩容速度慢 | 手动操作 | 自动化扩容(K8s HPA) |
| 缩容导致服务中断 | 连接未平滑迁移 | 优雅停机 + 连接池管理 |
| 异地容灾切换慢 | DNS 缓存 | 使用 GSLB + 健康检查 |
| 多活数据冲突 | 并发写入 | 分布式事务 + 数据分片 |
九、学习要点总结
核心要点
-
五大维度核心:
- 扩展性:应对业务增长
- 高性能:提升处理能力
- 高可用:保障服务稳定
- 高安全:保护系统和数据
- 伸缩性:动态调整资源
-
水平扩展 vs 垂直扩展:
- 水平:复制实例,适合无状态服务
- 垂直:拆分服务,适合复杂业务
- 组合:先拆分,再扩展
-
高可用三方案:
- 本地高可用:主备切换
- 异地容灾:数据备份
- 多活:同时服务
-
架构演进路径:
plaintext单体 → 垂直拆分 → 水平扩展 → 云原生 -
最佳实践:
- 先满足需求,再优化架构
- 渐进式演进,避免过度设计
- 监控先行,数据驱动决策
十、延伸学习资源
推荐书籍
- 《软件架构:架构模式》 - 微服务设计经典
- 《高可用架构》 - 李智慧
- 《性能之巅》 - Brendan Gregg
- 《大规模分布式存储系统》 - 杨传辉
在线资源
- Kubernetes 官方文档:https://kubernetes.io/
- AWS 架构最佳实践:https://aws.amazon.com/architecture/
- 阿里云架构设计:https://www.aliyun.com/solution/architecture
- Google SRE 书籍:https://sre.google/books/
实战练习
- 搭建高可用集群:使用 Kubernetes 搭建多节点集群
- 实现弹性伸缩:配置 HPA 实现自动扩缩容
- 设计异地容灾:搭建主备数据中心
- 性能压测:使用 JMeter 进行压力测试
附录:架构设计决策树
javascript
// 架构设计决策树
function decideArchitecture(requirements) {
const { traffic, consistency, budget, team } = requirements
// 决策1:是否需要扩展?
if (traffic < 1000) {
return '单体架构'
}
// 决策2:选择扩展方式
if (consistency === 'high') {
// 数据一致性要求高 → 垂直扩展
return {
strategy: '垂直扩展',
reason: '保障数据一致性'
}
} else {
// 无状态服务 → 水平扩展
return {
strategy: '水平扩展',
reason: '快速弹性扩容'
}
}
// 决策3:高可用方案
if (budget === 'high' && traffic > 10000) {
return {
availability: '异地多活',
reason: '高可用 + 高性能'
}
} else {
return {
availability: '本地主备',
reason: '成本可控'
}
}
}
// 使用示例
const decision = decideArchitecture({
traffic: 50000,
consistency: 'high',
budget: 'medium',
team: 'advanced'
})
console.log(decision)笔记整理完成!
这份笔记详细讲解了架构设计的五大维度,重点深入了扩展性架构(水平和垂直扩展),并结合实际案例和代码示例,帮助理解架构设计的核心思想。建议结合实际项目进行实践,逐步掌握架构设计能力。