基础知识
负载均衡
- 分布式系统不可少的组件
-
有 user 到 web server 之间的负载均衡
-
有 web server 到 app server 之间的负载均衡
-
有 app server 到 db server 之间的负载均衡
- 实现方法
- smart client
- Hardware Load Balancer
- Software Load Balancer
缓存
缓存更好的利用资源,最近访问的数据或者近期访问的数据更有可能被访问。有以下的方法:
- local cache
- distributed cache
- 优点:方便扩容,通过一致性 hash,方便找到缓存的节点。
- 缺点:不做冗余的缓存,缓存节点下线,导致缓存穿透。做缓存的冗余,缓存系统复杂性上升。
- global cache
- 两种回源策略:
- 由缓存负责回源,避免穿透
- app server 去回源,降低 Global Cache 的负载(第二种更常用)
- 两种回源策略:
CDN
主要存储静态资源。具体原理可以参考《自定向下计算机网络》。
-
缓存有效性策略
-
Write-through cache
同时写缓存和持久化。在不考虑写失败的情况下,缓存和持久化层保持一致。缺点是高延迟。
-
Write-around cache
由于上一个策略要写两遍数据,所以延迟可能会比较高,Write-around cache 策略就是只写持久化层。减少一次写入,缺点就是遇到写入后立马读的case延迟会比第一种策略还要高。
-
Write-back cache
写回策略。只写缓存,但是定期写入持久层。这样有数据不一致的风险。
-
-
缓存替换策略
- First In First Out (FIFO)
- Last In First Out (LIFO)
- Least Recently Used (LRU)
- Most Recently Used (MRU)
- Least Frequently Used (LFU)
- Random Replacement (RR)
分片或数据分区
- 分片的方法
- 水平分片
- 垂直分片
- 根据目录分片
- 有一张 table 存储这条记录存在哪里
- 分片的根据
- key 或者 hash 取模分区
- 列表分区:每个分区记录了一个 key 的范围
- Round-robin 分区
- 复合分区:结合上述方法做分区
- 分片中的常见问题
索引
代理
队列
冗余和备份
SQL 和 NoSQL
CAP 理论
一致性 hash
Hash 环主要解决大量迁移的问题。
虚拟节点主要解决 hash 环分配不均的问题。
Long-Polling 和 WebSockets
系统设计步骤
- 需求澄清
- 接口定义
- 粗略估计
- 定义数据库模型
- 高层设计
- 设计细节
- 发现并解决系统瓶颈
网友评论