Contents

[Pinned] Reading List

本文为原创文章,转载请严格遵守CC BY-NC-SA协议

碎碎念:在更了很多论文翻译后,发现翻译论文实在太花费精力了,而且英语水平有限,翻译质量也不高;另外,需要看这些论文的小伙伴英语似乎也不差,就不再献丑了。所以之后遇到的比较好的 paper 或者 blog 我会不定期地分类整理在这里。

本文主要列出较为系统的文献,比较碎片的材料后续我会同步到我的 telegram channel What does MrCroxx read? 中。

System

  • Memory Models Plan 9 与 Go 语言的作者 Russ Cox 关于 memory models 的三篇 blog。从硬件、编程语言、Go 语言的视角自底向上地介绍了 memory models。
  • Linux Kernel Development (Third Edition) 《Linux 内核设计与实现》的英文原版。建议在阅读 Linux 源码时作为工具书看。最早看的时候还没有深入接触过 Linux 源码,所以感觉书比较流水账。但是工作需要深入查 fs 和 bio 层源码的时候,很多关键的比较难懂的地方可以在这本书里找到。
  • Practical lock-freedom 一本比较详细介绍无锁编程和无锁数据结构等内容的书,比较硬。

BigData Infra

Consensus

  • The part-time parliament Paxos 开山之作,祖师爷 Leslie Lamport 一个人的成果差不多养活了一个行业,这篇写的比较晦涩,建议拜读一下。
  • Paxos Made Simple 因为 Paxos 最初的 paper 写的太晦涩,Lamport 老爷子亲自下场解释 Paxos 其实很简单,提供了完整、清晰的数学证明(作为工程背景的读起来仍然很难 orz)。
  • Paxos made live: an engineering perspective 从工程的角度介绍了 Paxos 算法在 Chubby 上的的使用,提出了 Multi-Paxos。注:Multi-Paxos 与 Multi-Raft 的 Multi 一般所指的并非为一个问题。Multi-Paxos 的 Multi 指连续的多次 Paxos 算法对连续的 log 达成 linearizability 共识;Multi-Raft 的 Multi 一般指 sharding 系统中每个 shard 通过单独的 Raft Group 维护副本一致性。
  • In Search of an Understandable Consensus Algorithm (Extended Version) Raft 算法的小论文,终于有能让工程背景的容易理解的满足 Linearizability Consistency 的 Consensus 算法了。
  • CONSENSUS: BRIDGING THEORY AND PRACTICE Diego Ongaro 的 Ph.D thesis,详细介绍了 Raft 算法,并提出了很多优化点与形式化证明,其中的大部分优化点至今都在工业界使用。

LSM-Tree

Scylla Userspace I/O Scheduler

Scylla 使用 Seastar 作为 c++ 的异步编程 runtime,Seastar 是一个 thread-per-core 的 runtime,也是在 thread-per-core 的 disk I/O 方面做的比较领先的框架,同时 Scylla 的 blog 写的也很详细。

Deal with fsync() failure

之前在P社实习遇到过写 WAL 时 fsync error 处理的问题,调研了一下相关工作之后发现这坑居然比想的要深,其中做的比较好的是 PostgreSQL 的工作。