正文
为什么要讲 Google 的系统呢?一方面,因为他们的设计直接影响了 etcd 的设计,paper 里的大家自读即可,不再累述;另一方面,通过对比,etcd 某些设计上的权衡会更显然。
storage layer
Chubby 的 storage layer 是典型的 database 架构:on-disk data + in-mem table + index files。因为大家想要做的是 replicated database。事实上这么做能利用起 database storage layer 的知识框架,这套理论历经千锤百炼,能够处理大规模的数据,还在不断发展。
Chubby 底层用的是 BDB,古董就不讨论了。后来出现的 Spanner 用了 LevelDB,现在开源的 CockroachDB 和 TiKV 都用 RocksDB(LDB 一变种)。而 etcd 则用了 LMDB。这是因为前者的写数据量大,但是会牺牲读 throughput。而 etcd 需要更大的读 throughput,对写要求可以降低。其次,etcd 只需要维护一层的 file,可以假定 key space 不会超过 memory size。
然而即便如此,etcd 的写 performance 还是令人叹为观止:https://coreos.com/blog/performance-of-etcd.html。