如何选择合适的分布式主键方案呢

 产生背景:

        在分布式集群的环境下,大量业务需要唯一的id进行校验、存储,如系统登录用户的唯一标识,商品订单号、物流订单号等,都需要在集群环境下全局唯一。

        主键要求必备特性:

        1)唯一性,避免特定范围内冲突

        2)有序性,按照某种规则插入数据库,且有序的排列

        3)可用性,高并发下确保能生成正确的ID

        4)自主性,不依赖其他组件、认证可自行生成

        5)安全性,不暴露业务信息

解决方案:

数据库自增长序列或字段。

     优点:生成比较简单且有序,方便分页

     缺点

                1.只有一个数据库时,需考虑分库分表后容易重复,且性能可能会跟不上

                2.主从数据库时需设置主写从读,防止自增序列被破坏

                3.双主数据库时,需设置两台主节点的生成序列奇偶不同

                4.吞吐量较低

UUID。

        优点:高性能、低延迟

        缺点:数据不规则生成 会导致索引失效

Redis 生成 ID

        通过redis的incr/incrby生成

        优点:相比于数据库,吞吐量更大了

        缺点:宕机后无法找回最新的ID

Twitter 的snowflake 算法

        雪花算法按照:时间(毫秒级)+集群ID+机器ID+序列号生成,每部分生成可自行配置, 集群和机器ID 两部分需依赖数据库记录或者外部参数配置

        优点:高性能、低延迟、按时间有序

        缺点:环境时间回拨时可能出现重复ID

 利用 zookeeper 生成唯一 ID

        优点:本地生成,非常简单,代码方便,API调用方便。生成的id性能非常好,没有网络消耗,基本不会有性能问题。全球唯一。

        缺点:宕机后无法找回最新的ID,且通过节点生成的ID上限是整型的最大值,高并发下需使用分布式锁,uuid无序,存储成本高。信息不安全

 MongoDB 的 ObjectId

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zbqice007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值