分布式系统
设计容错系统的一个基本原则是:网络永远是不可靠的,任何一个消息只有收到对方的回复后才可以认为发送成功,系统设计时总是假装网络会出现异常并采取相应的处理措施。
分布式协议
分布式系统涉及的协议很多,例如租约,复制协议,⼀致性协议,其中以两阶段提交协议和 Paxos 协议最具有代表性。两阶段提交协议⽤于保证跨多个节点操作的原⼦性,也就是说,跨多个节点的操作要么在所有节点上全部执⾏成功,要么全部失败。Paxos 协议⽤于确保多个节点对某个投票(例如哪个节点为主节点)达成⼀致。
容错
- 操作日志+checkpoint 容错
- 写式复制
- 复制多个副本方式实现容错,必须所有的副本全部写入成功,才视为成功写入
数据一致性
- 对数据计算校验和
- LVS Haproxy 负载均衡
- p2p 网络
- 向量时钟
- 数据回传机制
- Merkle 哈希树
1.缓存预读 提前加载可能被访问的数据到内存中,以减少后续访问延迟,优化连续读取区块的恢复过程,减少磁盘 I/O 次数。设置固定窗口 N 预读,比如每次一个区块时,预读后续 N 个区块。 该方案可能会遇到以下几个问题:
问题现象 原因分析 解决方案
预读命中率低 访问模式随机性强 改用动态预测算法
内存溢出 预读窗口过大 动态调整窗口+LRU 算法
预读引发 IO 风暴 批量预读随机小 IO 合并预读请求为顺序大 IO
Q&A
1. 对于顺序读取的场景我们如何降低磁盘 IO 压力?
-
预读取与顺序优化
我们可以使用三种方案来解决这个问题:1. 基于历史访问模式的热数据预读;2. 文件访问局部性优化;3. 内存映射文件(mmap)技术。
指标 传统 read mmap 内存拷贝次数 1 times/page 0 times TLB 命中率 low high 预读效率 单次系统调用 范围预读