高性能复杂度模型
高性能复杂度分析和设计
单机
集群
任务分配
将任务分配给多个服务器执行
复杂度分析
- 增加“任务分配器”节点,可以是独立的服务器,也可以是SDK
- 任务分配器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如ZooKeeper)
- 任务分配器需要根据不同的需求采用不同的算法分配
任务分配器集群
复杂度分析:任务分配器本身也是集群,需要上一级的分配器
任务分配架构设计关键点
案例
案例1-DNS
架构模式
- 独立服务器
- 配置文件
- DNS解析规则
应用场景
机房级别、地理位置级别的“任务分配”
案例2-Nginx
架构模式
- 独立服务器
- 配置文件
- 负载均衡算法
应用场景
服务器级别的“任务分配”
案例3-Memcached
架构模式
- SDK
- 代码配置
- 一致性Hash
应用场景
系统内部的“任务分配”
任务分解
将服务器拆分为不同角色,不同服务器处理不同的业务
复杂度分析
- 增加“任务分解器”节点,可以是独立的服务器,也可以是SDK
- 任务分解器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如Zookeeper)
- 需要设计任务拆分的方式,任务分解器需要记录“任务”和“服务器”的映射关系
- 任务分解器需要根据不同的需求采用不同的算法分配
任务分解架构设计关键点
案例
案例1-微信服务拆分
架构模式
- 按照业务逻辑划分服务器集群
- 独立的接入服务器
案例2-数据库读写分离
架构模式
- 任务拆分为“读”+“写”
- MySQL划分为主从
- 嵌入到java程序
- 配置文件
案例3-Zuul
架构模式
- 按照服务拆分
- 独立服务器
- 配置服务器Eureka
- 负载均衡Ribbon
应用场景
微服务架构,类似的还有OpenResty、Kong