在服务设计中,经常遇到的一个问题就是如何生成一个全局唯一的ID,例如订单号,流水号等。对于ID的要求主要有以下几点:
全局唯一,不会存在冲突;
快速生成,能够满足高并发场景下的需求;
能够满足分布式场景下的业务需求;
ID生成服务能够方便的扩容缩容。
最好基本有序;
能够附加一些业务信息,例如时间,系统标识等;
能够应对测试环境的一些特殊需求,如跳日,日期回拨等。
我们简单分析下常见的实现方式:
UUID
最熟悉的应该是UUID,UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写。按照UUID规范,UUID的实现方式一共有四种:
基于时间戳的UUID。这个UUID是基于时间戳,随机数和当前机器mac地址计算得到的,可以保证全球范围内的唯一性。但是,使用mac地址为带来安全问题。
DCE(Distributed Computing Environment)安全的UUID