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