系统设计:序列器


了解设计序列器的基础知识。

动机

在一个大型分布式系统中,每秒可能会有数百万个事件发生。在 Facebook 的帖子上发表评论、分享一条推文以及在 Instagram 上发布一张照片,这些都是这样的事件。我们需要一种机制来将这些事件区分开来。其中一种机制就是为每一个事件分配全局唯一的ID。

为数据库条目分配主键是使用唯一ID的另一个用例。通常情况下,数据库中的自增特性可以满足这个需求。但在分布式数据库中,不同的节点会独立生成标识符,这个特性将无法发挥作用。因此,我们需要一个在分布式设置中充当主键的唯一ID生成器,例如横向分片表。

唯一ID有助于我们识别日志中事件的流动,并有助于调试。一个现实世界的唯一ID使用例子是Facebook的端到端性能跟踪和分析系统 Canopy。Canopy使用 TraceID 来唯一标识一个事件,在执行路径中,可能会经过数百个微服务来完成一次用户请求。

QQ截图20230408190932

我们如何设计序列器?

我们将序列器的全面设计分为以下两个课程:

  1. 唯一ID生成器的设计: 在列举设计要求后,我们讨论了三种生成唯一ID的方法:使用UUID、使用数据库和使用范围处理程序。
  2. 带有因果关系的唯一ID: 在这节课里,我们在生成ID时增加了时间因素,并考虑了因果关系。

唯一ID对于识别分布式系统中的事件和对象非常重要。然而,在分布式系统中设计唯一ID生成器是具有挑战性的。在下一节课中,让我们看一下分布式唯一ID生成系统的要求。