架构设计需要着重关注的五个核心维度:
架构设计五大维度
├── 1. 扩展性 (Scalability)
├── 2. 高性能 (High Performance)
├── 3. 高可用 (High Availability)
├── 4. 高安全 (High Security)
└── 5. 伸缩性 (Elasticity)| 维度 | 核心问题 | 学习重点 | 应用场景 |
|---|---|---|---|
| 扩展性 | 业务量增长如何应对? | 水平/垂直扩展 | 业务快速增长阶段 |
| 高性能 | 如何实现高并发? | 性能优化、妥协策略 | 高流量、实时性要求高 |
| 高可用 | 如何避免服务中断? | 本地高可用、异地容灾、多活 | 对稳定性要求极高的系统 |
| 高安全 | 如何保障系统安全? | 安全流程、安全架构 | 涉及敏感数据、金融交易 |
| 伸缩性 | 如何应对流量波动? | 弹性扩容/缩容 | 流量波动大的场景 |
扩展架构分为两大方向:
| 扩展方式 | 定义 | 核心优势 | 适用场景 |
|---|---|---|---|
| 水平扩展 | 复制应用实例 | 弹性扩缩容、实施简单 | 无状态服务、流量突发增长 |
| 垂直拆分 | 拆分业务模块 | 服务独立、资源优化、数据一致性 | 有状态服务、复杂业务系统 |
推荐策略:先垂直拆分,再水平扩展
架构演进路径:
单体架构 → 垂直拆分(微服务)→ 水平扩展(集群部署)
示例:
1. 将单体应用拆分为用户、订单、支付服务(垂直拆分)
2. 订单服务流量大,部署多个实例(水平扩展)
3. 支付服务独立部署,保障数据一致性(垂直拆分优势)详细内容请参考:07-伸缩性架构.md
定义:系统在单位时间内处理更多请求的能力
关键指标:
| 策略 | 说明 | 示例 |
|---|---|---|
| 异步处理 | 快速响应用户,后台处理 | 订单提交后立即返回,后台处理 |
| 缓存策略 | 多级缓存减少数据库压力 | 浏览器缓存、CDN、Redis、数据库缓存 |
| 降级服务 | 高峰期关闭非核心功能 | 双十一关闭推荐功能 |
| 限流熔断 | 保护系统不过载 | 超过阈值返回排队页面 |
| 预加载 | 提前加载可能需要的资源 | 首页预加载详情页数据 |
详细内容请参考:03-高性能架构.md
目标:系统持续提供服务的能力,通常用 SLA(Service Level Agreement)衡量
可用性指标:
SLA 等级:
- 99.9% = 年停机时间 ≤ 8.76 小时
- 99.99% = 年停机时间 ≤ 52.6 分钟
- 99.999% = 年停机时间 ≤ 5.26 分钟| 方案 | 核心思想 | 适用场景 | 成本 |
|---|---|---|---|
| 本地高可用 | 同一机房内主备切换 | 中小型系统 | 低 |
| 异地容灾 | 主备数据中心异地部署 | 对稳定性要求高的系统 | 中 |
| 多活架构 | 多个业务系统同时服务 | 超大规模系统 | 高 |
高可用架构演进:
阶段一:本地高可用
├── 负载均衡器(Keepalived + VIP)
├── Web服务器集群(主备)
└── MySQL主从复制
阶段二:异地容灾
├── 北京数据中心(主)
├── 上海数据中心(备)
└── DNS智能解析
阶段三:多活架构
├── 北京机房
├── 上海机房
├── 广州机房
└── 全局负载均衡 + 数据同步层详细内容请参考:04-高可用架构.md、05-异地容灾与多活架构.md
安全架构体系:
├── 网络安全
│ ├── 防火墙
│ ├── DDoS 防护
│ └── WAF
├── 应用安全
│ ├── 身份认证
│ ├── 权限控制
│ └── 数据加密
├── 数据安全
│ ├── 传输加密
│ ├── 存储加密
│ └── 备份恢复
└── 运维安全
├── 审计日志
├── 漏洞扫描
└── 应急响应| 安全层级 | 防护措施 | 技术方案 |
|---|---|---|
| 网络层 | 防火墙、DDoS防护、WAF | IP白名单/黑名单、流量清洗 |
| 应用层 | 身份认证、权限控制、安全验证 | JWT、RBAC、CSRF Token、XSS过滤 |
| 数据层 | 传输加密、存储加密、备份 | HTTPS、AES加密、异地备份 |
详细内容请参考:06-高安全架构.md
定义:系统根据负载自动调整资源的能力
两大方向:
| 伸缩类型 | 说明 | 技术方案 |
|---|---|---|
| 水平自动伸缩(HPA) | 自动增减应用实例数 | Kubernetes HPA |
| 垂直自动伸缩(VPA) | 自动调整资源配额 | Kubernetes VPA |
| 集群自动伸缩(CA) | 自动增减节点数 | Kubernetes CA |
弹性伸缩流程:
监控指标 → 达到阈值 → 计算所需资源 → 申请资源 → 部署新实例 → 加入负载均衡 → 开始服务详细内容请参考:07-伸缩性架构.md
初期架构(日活 1000)
┌─────────────────┐
│ 单体应用 │
├─────────────────┤
│ 用户、订单、支付 │
│ 内容、消息 │
└─────────────────┘
│
▼
单台 MySQL中期架构(日活 10,000)
用户服务
│
┌───────────┼───────────┐
│ │ │
订单服务 支付服务 内容服务
│ │ │
└───────┼───────┘
│
┌───────┼───────┐
│ │ │
用户DB 订单DB 支付DB后期架构(日活 100,000+)
API 网关
│
┌───────────┼───────────┐
│ │ │
用户服务(3实例) 订单服务(10实例) 支付服务(2实例)
│ │ │
└───────────────┼───────────────┘
│
┌───────┼───────┐
│ │ │
用户DB 订单DB 支付DB
│ │ │
└───────┼───────┘
│
Redis 集群(会话、缓存)| 问题 | 原因 | 解决方案 |
|---|---|---|
| 水平扩展后数据不一致 | 缓存未同步 | Redis 集中缓存 + 分布式锁 |
| 垂直拆分后服务调用复杂 | 服务依赖增加 | 服务治理 + 监控追踪 |
| 扩容速度慢 | 手动操作 | 自动化扩容(K8s HPA) |
| 缩容导致服务中断 | 连接未平滑迁移 | 优雅停机 + 连接池管理 |
| 异地容灾切换慢 | DNS 缓存 | 使用 GSLB + 健康检查 |
| 多活数据冲突 | 并发写入 | 分布式事务 + 数据分片 |
五大维度核心:
水平扩展 vs 垂直拆分:
高可用三方案:
架构演进路径:
单体 → 垂直拆分 → 水平扩展 → 云原生最佳实践:
// 架构设计决策树
function decideArchitecture(requirements) {
const { traffic, consistency, budget, team } = requirements
// 决策1:是否需要扩展?
if (traffic < 1000) {
return '单体架构'
}
// 决策2:选择扩展方式
const scale = consistency === 'high'
? { strategy: '垂直拆分', reason: '保障数据一致性' }
: { strategy: '水平扩展', reason: '快速弹性扩容' }
// 决策3:高可用方案
const availability = budget === 'high' && traffic > 10000
? { availability: '异地多活', reason: '高可用 + 高性能' }
: { availability: '本地主备', reason: '成本可控' }
return { 扩展策略: scale, 高可用方案: availability }
}
// 使用示例
const decision = decideArchitecture({
traffic: 50000,
consistency: 'high',
budget: 'medium',
team: 'advanced'
})
console.log(decision)笔记整理完成!
这份笔记详细讲解了架构设计的五大维度,重点深入了扩展性架构(水平和垂直扩展),并结合实际案例和代码示例,帮助理解架构设计的核心思想。建议结合实际项目进行实践,逐步掌握架构设计能力。