谈谈 etcd 架构与设计

etcd 有非常多的用户,全球有上万公司在用。但目前并没有文章在讲 etcd 的架构。一方面,业界中懂 etcd 的人都太忙了;另一方面,学术圈一般不会涉足这种应用。作者身处 CoreOS 虽地位卑微,但好在脸皮厚敢于胡说。这里写写自己对 etcd 架构疏浅的理解。尽己之力为这个领域贡献的同时望批评指教。

Chubby, Paxos Made Live

Google 公布出来的 Paxos 系统就有两套:Chubby [OSDI 06], Paxos Made Live [PODC 07]. 读这两篇 paper 的感觉就像我这村娃第一次进广州看到天上有辆直升机,那叫一个兴奋啊,从来没见过这样的高科技。

为什么要讲 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,现在开源的 Cockroach DB 和 TiKV 都用 RocksDB (LDB 一变种)。而 etcd 则用了 LMDB。这是因为前者的写数据量大,但是会牺牲读 throughput。而 etcd 需要更大的读 throughput,对写要求可以降低。其次,etcd 只需要维护一层的 file,可以假定 key space 不会超过 memory size.

然而即便如此,etcd 的写 performance 还是令人叹为观止:https://coreos.com/blog/performance-of-etcd.html

API

Chubby 的 90% use case 是存小数据 (<1KB) 和做 KeepAlive (lock service)。但是 Chubby API 太过于 file system oriented 了。这是因为 Chubby 是 Google 的 internal system, 一方面要满足应用层的需求,另一方面 fit in Google infra landscape。

etcd 的 API 则更为多样化:

  • Raft (consensus) 层被其他开源项目 TiKV, Cockroach DB, Dgraph 给重用了。
  • KeepAlive 是绑定在 client-agnostic 的 Lease 抽象层上而不是 client-specific 的 Session 上。
  • Watch 可以得到连续性的事件。
  • 类似于 Kafka, 能通过 index 重新得到原来的消息。
  • 提供 Range query。
  • 提供 Transaction API。
  • 默认提供了 causal consistency guarantee。用户可选 serializability guarantee。

可以看出,etcd API 更偏底层。这是因为 etcd 作为开源项目,要满足更广泛的 use cases,所以需要在更底层找到共同的抽象。

其实 API 并没有好坏之分,这里一个重要的经验就是系统设计切忌照猫画虎。Chubby 最牛逼的地方在于他的 consensus 层和 database storage 层。假设不得其精髓,只顾肤浅实现其 API,这就是算法上的只顾每步最优无法全局最优。千万不要走捷径,走崎岖的路是一种沉淀!

值得一提的是 Transaction API。在 Paxos Made Live 里面提到了一个叫 MultiOp primitive。前人深邃的思想,在白纸黑字间,略显枯燥无味。以为就要淹没在历史的河流里,十多年后这个想法却在 etcd 里面用现代的方式重新展现出来,在这个世界被许许多多的用户使用着,受惠于大大小小的项目。我每次想到这个就情不自禁地兴奋起来。这TM才是艺术!我恨不得开间博物馆给保存起来。

写在最后

etcd 目前主要用作:

  • replicated database: causal consistency, serializability
  • message queue
  • health checking

通过分享架构,希望能帮助人们更好的使用 etcd,和开发新的用法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容