分布式 环境的 sequence 处理方式

    我们都很清楚单机单库中的sequence处理,像oracle就直接提供sequence的支持,在mysql,则有 auto increament 字段的支持,我们很方便的就是先一个自增的不重复的id序列,但在分库分表后,sequence 就遇到了一点麻烦。

    sequence 在多机的情况下,我们可以从唯一性、连续性考虑解决问题。

    如果不考虑连续性,uuid 就是一个能保证唯一性的生成方式,或者根据自己的业务情况使用各种种子(例如,ip,mac,机器名,时间,本机计数器等因素)来生产唯一的id。

    在考虑唯一性和连续性的情况下,我们可以把所有id都集中在一个地方进行管理,即提供一个统一id生成器服务,每台机器都从这里获取id,但是,这个服务会面临几个问题:

    1. 性能问题,每次都需要跟服务打交道,获取id。

    2. 生成器稳定性问题,id生成器服务成为一个关键的集群稳定性因素

    3. 存储问题,底层存储需要的空间比较大,需要根据不同类型进行对应的容灾处理。

 关于存储问题,可以选择同一存储,控制并发,也可以将id生成器的连续id分段,分别分配给各个机器,各个机器上有自己的id生成器(根据分配到的id段生产id),各个机器的id生成器需要跟id生成服务保持心跳,确保id段不够用时,能分配到下一段可用的id段,以适应业务的需求。

转载于:https://my.oschina.net/u/939952/blog/511574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值