引:最近業務開發過程中需要涉及到全局唯一ID生成。之前零零總總的收集過一些相關資料,特此整理以便后用
唯一ID生成的主要目的是:為一個分布式系統的數據object產生一個唯一的標識。
一般對於唯一ID生成的要求主要這么幾點:
- 毫秒級的快速響應
- 可用性強
- prefix有連續性方便DB順序存儲
- 體積小,8字節為佳
目前看到過的唯一ID生成方法主要有以下幾種:
四種方案各有優劣,下面簡要描述以下:
UUID:
優:java自帶,好用。
劣:占用空間大
Snowflake: timestamp + work number + seq number
優:可用性強,速度快
劣:需要引入zookeeper 和獨立的snowflake專用服務器
Flikr:基於int/bigint的自增
優:開發成本低
劣:如果需要高性能,需要專門一套MySQL集群只用於生成自增ID。可用性也不強
Instagram:41b ts + 13b shard id + 10b increment seq
優: 開發成本低
劣: 基於postgreSQL的存儲過程,較為偏門