一、高性能复杂度模型
核心思想
- 鸡蛋篮子理论第二法则(叠加法则)
:通过增加资源("篮子")解决性能瓶颈,即"如果一个篮子装不下你的鸡蛋,用多个篮子!" 单机高性能复杂度分析
-
关注单机性能优化,如存储模型(B+ Tree、LSM)、计算优化、I/O调度等。 -
复杂度来源于硬件资源限制(CPU、内存、磁盘、网络)和软件设计(并发模型、算法效率)。
二、集群高性能设计
分为两种核心模式:任务分配和任务分解。
1. 任务分配模式
定义:将任务分发给多个服务器执行,通过横向扩展提升性能。
关键设计点:
- 任务分配器
:核心组件,形态可以是独立服务器(如Nginx)或SDK(如Memcached客户端)。 - 配置管理
:通过配置文件或配置中心(如ZooKeeper)动态管理服务器列表。 - 分配算法
:轮询、一致性Hash、权重分配等。
复杂度分析:
-
增加任务分配器节点,需处理其自身的高可用(如分配器集群)。 -
分配算法需匹配业务场景(如DNS按地域分配、Nginx按服务器负载分配)。
典型案例:
- DNS
:机房/地理级别的任务分配,通过A记录、CNAME解析。 - Nginx/LVS
:服务器级别的负载均衡,支持轮询、加权算法。 - Memcached
:系统内部SDK分配,一致性Hash避免缓存雪崩。
2. 任务分解模式
定义:将系统拆分为不同角色(如读写分离、微服务),通过功能解耦提升性能。
关键设计点:
- 任务分解器
:负责拆分任务并路由到不同服务器(如API网关、数据库中间件)。 - 映射关系
:需记录任务与服务器的映射(如微服务注册中心)。 - 拆分策略
:按业务逻辑(微信服务拆分)、读写分离(MySQL主从)、服务粒度(微服务)等。
复杂度分析:
-
比任务分配更复杂,需解决业务拆分、数据一致性、服务依赖等问题。 -
需设计合理的拆分边界(如微服务的领域划分)。
典型案例:
- 微信服务拆分
:按业务逻辑划分集群(消息、支付、用户),独立接入层。 - 数据库读写分离
:Java程序嵌入中间件,配置文件管理主从节点。 - Zuul/Eureka
:微服务网关按服务路由,结合Ribbon负载均衡。
三、任务分配 vs 任务分解对比
|
|
|
|
| 核心目标 |
|
|
| 复杂度来源
|
|
|
|
|
|
|
四、随堂测验关键点
1. 第一题
问题:单机存储模型的优化主要围绕B+ Tree和LSM等存储结构展开。
答案:正确(单机存储模型以B+ Tree和LSM为主)
2. 第二题
问题:实现集群高性能的核心方法是不断叠加硬件资源(如增加服务器数量)。
答案:错误(集群高性能需结合架构设计,而非单纯加资源)
3. 第三题
问题:任务分解模式的设计需要重点关注运行形态(如独立服务器或SDK)、配置获取方式(如配置文件或注册中心)以及分配算法(如一致性Hash)。
答案:正确(任务分解需关注运行形态、配置获取、分配算法)
4. 第四题
问题:任务分配器必须是独立的服务器组件(如Nginx、LVS),不能是嵌入系统的SDK。
答案:错误(任务分配器可以是SDK,如Memcached)
5. 第五题
问题:微服务网关(如Zuul)既承担任务分解(按服务路由请求)的角色,也涉及任务分配(负载均衡)。
答案:正确(微服务网关同时涉及任务分解和分配)
思考题答案:
- 任务分解的必要性
- 业务复杂性
:单一集群无法处理异构任务(如高并发读+低频写); - 资源利用率
:专用服务器处理特定任务(如数据库读写分离); - 可扩展性
:微服务架构通过拆分实现独立扩展。

