分布式-ID生成方式
UUID
优:
- 本地生成没有了网络之类的消耗,效率非常高
缺:
- 不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用。
- 信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。
snowflake
这种方案把64-bit分别划分成多段(机器、时间)
优:
- 毫秒数在高位,自增序列在低位,整个ID都是趋势递增的
- 本地生成没有了网络之类的消耗,效率非常高
- 可以根据自身业务特性分配bit位,非常灵活。
缺:
- 强依赖机器时钟,如果机器上时钟回拨,会导致发号重复或者服务会处于不可用状态
数据库
可以利用 MySQL 中的自增属性 auto_increment 来生成全局唯一 ID,也能保证趋势递增。 但这种方式太依赖 DB,如果数据库挂了那就非常容易出问题。
优:
- 非常简单,利用现有数据库系统的功能实现,成本小,有DBA专业维护。
- ID号单调自增,可以实现一些对ID有特殊要求的业务。
缺:
- 强依赖DB,当DB异常时整个系统不可用,属于致命问题。配置主从复制可以尽可能的增加可用性,但是数据一致性在特殊情况下难以保证。主从切换时的不一致可能会导致重复发号。
- ID发号性能瓶颈限制在单台MySQL的读写性能。
参考:
https://tech.meituan.com/MT_Leaf.html
https://github.com/crossoverJie/Java-Interview/blob/master/MD/ID-generator.md
评论:
技术文章推送
手机、电脑实用软件分享
微信公众号:AndrewYG的算法世界