在分布式系統中,通常會用到分布式ID來标注資料的唯一性,而分布式ID的生成方式又多種多樣,今天我們就來讨論一下主流的分布式ID生成政策。
分布式ID基本需求
- 全局唯一
- 趨勢遞增
- 資訊安全
全局唯一
這是基本要求,不必解釋
趨勢遞增
為什麼要趨勢遞增呢?
第一,由于我們的分布式ID,是用來辨別資料唯一性的,是以多數時候會被定義為主鍵或者唯一索引。
第二,并且絕大多數網際網路公司使用的資料庫是:MySQL,存儲引擎為innoDB。
對于
B + Tree
這個資料結構來講,資料以自增順序來寫入的話,b+tree的結構不會時常被打亂重塑,存取效率是最高的。
資訊安全
由于資料是遞增的,是以,惡意使用者的可以根據目前ID推測出下一個,非常危險,是以,我們的分布式ID盡量做到不易被破解。
資料庫主鍵自增(Flicker)
基于資料庫主鍵自增的方案,名為
Flicker
。
主要是利用MySQL的自增主鍵來實作分布式ID。
以下為
Flicker
實作分布式ID的主流做法:
1、需要單獨建立一個資料庫執行個體:flicker
create database `flicker`;