1 介绍
在分布式系统中,由于涉及到多个不同业务module的交互,以及高并发的场景。我们需要系统能够生成一个跨业务module的全网唯一序列号,来保证我们业务操作的独立性和唯一性。
在常见的业务场景中,比如全局订单Id,唯一标识的支付编号等,都需要这个来保证。
那生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种解决方案来实现这个唯一序列呢?
一般来说,这个唯一序号有如下几种特征:
-
全局唯一性:确保生成的序列是全局唯一的,不可重复。
-
有序性:确保生成的ID值对于某个用户或者业务是按一定的数字有序递增的。
-
高可用性:确保生成ID功能的高可用,能够承接较大峰值,能够保证序列生成的有效性(不重复且有序)。
-
带时间标记:ID中有时间片段组成,可是清晰识别出操作的时间。
下面是业内几种常见的分布式唯一序列生成方案,我们一一来介绍下。
2 数据库自增
数据库主键设置自增序号 auto_increment,可以按照一定的趋势自增,保证主键ID的唯一性。
这个方案简单易操作,优点是明显、可控。
但由于它是在数据库的单表上进行操作,对数据库性能依赖比较明显,高并发下的压力也很大。所以不是唯一ID生成的最佳方法。
1 create table `t_generator_id` 2 ( 3 `id` bigint(20) not null auto_inc