bit rot 2022-07-30

dm-integrity 可以用来防止 静默数据损坏, 读取告知 io 错误.

lvm命令可以集成 DM integrity. lvcreate --raidintegrity

dm-integrity 也可以用在 Linux Software RAID 的 RAID1.

  • 其他 Minio 和 Ceph 支持 erasure code, 所以, 可以处理 bit rot.

从故障场景看paxos 2022-05-01

1. 正常场景

图14-3:Paxos算法:正常执行

在提议阶段中,提议者发送一条Prepare(n)消息(其中n是提议编号).

如果接受者之前已经接受了(收到过Accept!(m,vaccepted)消息)任何其他提案,它将回复一条Promise(m,vaccepted)消息,通知提议者它先前已经接受了编号为m的提案。(m不等于n) awakening-fong: 用来处理 有人当选了,然后,发出复制的指令后,领导者挂掉了。 这里,借这个机会通知新的可能的领导者,过去本该写入的值。

关于Accept!(n,v) 其中的v, 1. 有接受方回复Promise(m,vaccepted), 则,v是收到的回复中, 编号最高的提案对应的值。 2. 如果所有回复均不包含旧的、已接受的提案,那么v可以是提议者自己提出的任何值。

2. 故障

2.1 提议者故障,决定旧值

因果倒置 2021-05-15

如果分析进入死胡同, 可能是分析问题时, 因果倒置了. 比如, 滑动窗口太小, 和 接收慢 之间的关系. 可能是因为 接收慢, 导致了滑动窗口小; 而不是因为滑动窗口小, 导致 接收慢.

模式 05: 大规模系统的一些处理方法 2021-03-14

本篇内容 和 模式 03: 用户态的一些性能优化方法 的内容类似.

这里针对大规模系统, 从更宏观的角度进行描述. (本人目前(2021年3月)未实践过大规模系统, 这里仅是纸上的记录)

分而治之

  • 负载均衡: 服务端负载均衡: LVS, DNS; 客户端负载均衡
  • 读写分离, 多从 负责读
  • 分库分表

低成本处理

==== 缓存

  • redis

模式 04: trouble less 的一些模式(待更新) 2020-10-17

多线程

进程间交互通过传递消息, 而不要共享状态.

少用多线程

信号

  • 方式1: 屏蔽一些信号, 然后使用 signalfd 或 sigwaitinfo.
  • 方式2: 信号处理函数中仅仅 设置信号到来的标志, 其他地方检测该标志.
  • 方式3: 信号 handler 中, 往 pipe/eventfd 写入内容, 主程序通过 poll/epoll 来判断有事件到来.