分布式系统全局id生成策略

当数据发生分片,分库分表时,业务系统首先就要考虑如何生成一张表的全局唯一ID,设计生成全局ID的服务有几点考虑:

1、不能有单点故障;

2、全局ID生成服务不能成为整个系统性能瓶颈;

3、全局ID要和ShardingId有映射关系,根据全局主键ID能算出数据在哪个分片;

4、不能太长,否则,作为主键建立索引查询效率低;

flickr开发团队在2010年撰文介绍了flickr使用的一种主键生成策略,flickr这一方案的整体思想是:建立两台以上的主键ID生成服务器,每个服务器都有一张记录各表当前ID的Sequence表,Sequence表中ID增长的步长是服务器的数量,起始值依次错开,这样相当于把ID的生成散列到了每个服务器节点上。例如:如果我们设置两台数据库ID生成服务器,那么设置一台的Sequence表的ID起始值为1,每次增长步长为2,另一台的Sequence表的ID起始值为2,每次增长步长为2,奇数的ID都将从第一台服务器上生成,偶数的ID都从第二台服务器上生成,这样就将生成ID的压力均匀分散到两台服务器上,同时配合应用程序的控制,当一个服务器失效后,系统能自动切换到另一个服务器上获取ID,从而保证了系统的容错。

你可能感兴趣的:(数据库,中间件,架构设计)