跳转至

分布式系统

设计容错系统的一个基本原则是:网络永远是不可靠的,任何一个消息只有收到对方的回复后才可以认为发送成功,系统设计时总是假装网络会出现异常并采取相应的处理措施。

分布式协议

分布式系统涉及的协议很多,例如租约,复制协议,⼀致性协议,其中以两阶段提交协议和 Paxos 协议最具有代表性。两阶段提交协议⽤于保证跨多个节点操作的原⼦性,也就是说,跨多个节点的操作要么在所有节点上全部执⾏成功,要么全部失败。Paxos 协议⽤于确保多个节点对某个投票(例如哪个节点为主节点)达成⼀致。

容错

  1. 操作日志+checkpoint 容错
  2. 写式复制
  3. 复制多个副本方式实现容错,必须所有的副本全部写入成功,才视为成功写入

数据一致性

  1. 对数据计算校验和
  2. LVS Haproxy 负载均衡
  3. p2p 网络
  4. 向量时钟
  5. 数据回传机制
  6. Merkle 哈希树

1.缓存预读 提前加载可能被访问的数据到内存中,以减少后续访问延迟,优化连续读取区块的恢复过程,减少磁盘 I/O 次数。设置固定窗口 N 预读,比如每次一个区块时,预读后续 N 个区块。 该方案可能会遇到以下几个问题:

问题现象 原因分析 解决方案

预读命中率低 访问模式随机性强 改用动态预测算法

内存溢出 预读窗口过大 动态调整窗口+LRU 算法

预读引发 IO 风暴 批量预读随机小 IO 合并预读请求为顺序大 IO

Q&A

1. 对于顺序读取的场景我们如何降低磁盘 IO 压力?

  1. 预读取与顺序优化

    我们可以使用三种方案来解决这个问题:1. 基于历史访问模式的热数据预读;2. 文件访问局部性优化;3. 内存映射文件(mmap)技术。

    指标 传统 read mmap
    内存拷贝次数 1 times/page 0 times
    TLB 命中率 low high
    预读效率 单次系统调用 范围预读

评论