{T}

架构设计五大维度 学习笔记(第 2 部分)

7.2 第二阶段:垂直扩展

plaintext
中期架构(日活 10,000)
 
        用户服务

┌───────────┼───────────┐
│           │           │
订单服务  支付服务  内容服务
    │       │       │
    └───────┼───────┘

    ┌───────┼───────┐
    │       │       │
用户DB  订单DB  支付DB

7.3 第三阶段:水平扩展 + 垂直扩展

plaintext
后期架构(日活 100,000+)
 
            API 网关

    ┌───────────┼───────────┐
    │           │           │
用户服务(3实例)  订单服务(10实例)  支付服务(2实例)
    │               │               │
    └───────────────┼───────────────┘

            ┌───────┼───────┐
            │       │       │
        用户DB  订单DB  支付DB
            │       │       │
            └───────┼───────┘

            Redis 集群(会话、缓存)

八、常见问题与解决方案

问题原因解决方案
水平扩展后数据不一致缓存未同步Redis 集中缓存 + 分布式锁
垂直拆分后服务调用复杂服务依赖增加服务治理 + 监控追踪
扩容速度慢手动操作自动化扩容(K8s HPA)
缩容导致服务中断连接未平滑迁移优雅停机 + 连接池管理
异地容灾切换慢DNS 缓存使用 GSLB + 健康检查
多活数据冲突并发写入分布式事务 + 数据分片

九、学习要点总结

核心要点

  1. 五大维度核心

    • 扩展性:应对业务增长
    • 高性能:提升处理能力
    • 高可用:保障服务稳定
    • 高安全:保护系统和数据
    • 伸缩性:动态调整资源
  2. 水平扩展 vs 垂直扩展

    • 水平:复制实例,适合无状态服务
    • 垂直:拆分服务,适合复杂业务
    • 组合:先拆分,再扩展
  3. 高可用三方案

    • 本地高可用:主备切换
    • 异地容灾:数据备份
    • 多活:同时服务
  4. 架构演进路径

    plaintext
    单体 → 垂直拆分 → 水平扩展 → 云原生
  5. 最佳实践

    • 先满足需求,再优化架构
    • 渐进式演进,避免过度设计
    • 监控先行,数据驱动决策

十、延伸学习资源

推荐书籍

  1. 《软件架构:架构模式》 - 微服务设计经典
  2. 《高可用架构》 - 李智慧
  3. 《性能之巅》 - Brendan Gregg
  4. 《大规模分布式存储系统》 - 杨传辉

在线资源

  1. Kubernetes 官方文档https://kubernetes.io/
  2. AWS 架构最佳实践https://aws.amazon.com/architecture/
  3. 阿里云架构设计https://www.aliyun.com/solution/architecture
  4. Google SRE 书籍https://sre.google/books/

实战练习

  1. 搭建高可用集群:使用 Kubernetes 搭建多节点集群
  2. 实现弹性伸缩:配置 HPA 实现自动扩缩容
  3. 设计异地容灾:搭建主备数据中心
  4. 性能压测:使用 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)

笔记整理完成!

这份笔记详细讲解了架构设计的五大维度,重点深入了扩展性架构(水平和垂直扩展),并结合实际案例和代码示例,帮助理解架构设计的核心思想。建议结合实际项目进行实践,逐步掌握架构设计能力。