[发号器]分布式发号器实现方案,UUID,数据库,snowfla

2020-01-05  本文已影响0人  Wayne维基

概要

分布式 or 微服务架构中,需要产生唯一的编号的服务叫做发号器

需求:

注意:id不要和token之类的乱序编码混淆,虽然很多场景下他们是一一对应关系,但是id需要可以制造,可以反解,不需要保密性很好,和token的设计初衷是完全相悖

已有方案对比

方案一:UUID

弊端:
没有时间粗略有序
不可反解
不可制造
性能差/长/占用空间
UUID无序,所以数据库存储,导致B+树索引在写的时候过多随机操作

方案二:利用数据库的自增ID

弊端:
数据库移植,扩容,清洗,分库分表都有诸多困难

方案三: twitter开源snowflake

scala语言实现,但是支持和维护较少。

开源项目vesta设计

鉴于前面三个方案都有各自缺陷。本文介绍java的开源项目vesta

位数 63 62 60-61 30-59 10-29 0-9
含义 版本 类型 生成方式 秒级时间 序列号 机器ID

其中:

架构设计:

注意事项

1 ID的生成在内存中(不依赖数据库的方案),所以网络IO是系统性能瓶颈,相对于网络io而言,CPU的计算是性能瓶颈,但是CPU计算采用多线程的方式。

2 时间同步

ntpdate -u 210.72.145.44

-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;
210.72.145.44:中国国家授时中心的官方服务器。
其他可用中心服务器如下: https://www.cnblogs.com/luchuangao/p/7795293.html

上一篇下一篇

猜你喜欢

热点阅读