分布式ID方案选择

UUID

  • UUID是通用唯一识别码(Universally Unique Identifier)的缩写,开放软件基金会(OSF)规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素。利用这些元素来生成UUID
  • UUID是由128位二进制组成,一般转换成十六进制,然后用String表示。
550e8400-e29b-41d4-a716-446655440000
UUID的优点
  • 通过本地生成,没有经过网络I/O性能较快
  • 无序,无法预测他的生成顺序。(当然这个也是他的缺点之一)
UUID的缺点
  • 128位二进制一般转换成36位的16进制,太长了只能用String存储,空间占用较多
  • 不能生成递增有序的数字

数据库主键自增

  • 大家单一唯一标识最容易想到的就是主键自增,这个也是我们最常用的方法。例如我们有个订单服务,那么把订单id设置位主键自增即可。
  • 单独数据库记录主键;
  • 业务数据库分别设置成不同的自增起始值和固定步长,如:
第一台 start 1  step 9 
第二台 start 2  step 9 
第三台 start 3  step 9
优点
  • 简单方便,有序递增,方便排序和分页;
缺点
  • 分库分表会带来问题,需要进行改造;
  • 并发性不高,容易受限于数据库的性能;
  • 简单递增容易被其他人猜测利用,比如:你有一个用户服务用的递增,那么其他人可以根据分析注册的用户ID来得到当天你的服务有多少人注册,从而就能猜测出你这个服务当前的一个大概状况。
  • 数据库宕机服务不可用。