关注 distributed storage、distributed transaction 方向和 C++ 语言的发展。 2011 年加入 Twitter,参与 Twitter 自行设计的 key-value store,在这基础上设计并开发了 cross-dc strongly consistent key-value update,解决了 Twitter handle 跨 DC 分配的问题。2015 年加入 Uber,专注 distributed storage system。
冗余是分布式系统的关键,它可以让我们有弹性的应对机器故障和横向扩展。实现冗余的一种方法是引入多个备份,这带来了一个新的挑战,就是如何保持多个备份之间的一致性。
这个问题有多种解决方案,我们需要考虑各种取舍。先来明确我们需要的属性。
这里指的是读和写。底层的宕机产生的干扰很可能会传递到上层并产生更大的干扰。我们要不顾一切的减少这种干扰。
系统还必须一直保持它的读写语义。理想的情况是,即使在有以上的干扰的情况下,强一致的读写的语义还能得到保持。
当集群数量变大,人工来响应各种失败情况是很难扩展的,在这种情况下,我们必须不能依赖人工干预。这样不仅可以很好的扩展系统而且还可以避免人为失误。理想情况是,系统可以自动应对严重性不是很高的失败;而用人工来应对灾难性的失败。
我们的业务需要强一致的处理请求。具体来说我们需要线性化,就是说,如果对一个键的写入是成功的,那么后续的对同样的键的读取必须返回前面写入的值或者更新的写入的值。同时,如果对一个键的读取返回了某个值,那么后续的读取必须返回这个值或者更新的写入的值。
我们最终选取了一个种方法,叫做状态机复制, 我们想共享这一想法。我们并没有构建一个新的存储系统而是应用这个方法在已有的系统中去解决容错性问题,我们认为这种方法可以被推广和应用到其它地方。