http://tech.meituan.com/MT_Leaf.htmlhtml
在复杂分布式系统中,每每须要对大量的数据和消息进行惟一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增加,对数据分库分表后须要有一个惟一ID来标识一条数据或消息,数据库的自增ID显然不能知足需求;特别一点的如订单、骑手、优惠券也都须要有惟一ID作标识。此时一个可以生成全局惟一ID的系统是很是必要的。归纳下来,那业务系统对ID号的要求有哪些呢?数据库
- 全局惟一性:不能出现重复的ID号,既然是惟一标识,这是最基本的要求。
- 趋势递增:在MySQL InnoDB引擎中使用的是汇集索引,因为多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面咱们应该尽可能使用有序的主键保证写入性能。
- 单调递增:保证下一个ID必定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。
- 信息安全:若是ID是连续的,恶意用户的扒取工做就很是容易作了,直接按照顺序下载指定URL便可;若是是订单号就更危险了,竞对能够直接知道咱们一天的单量。因此在一些应用场景下,会须要ID无规则、不规则。