1. 程式人生 > 其它 >【277期】面試官:說幾種常用的分散式 ID 解決方案

【277期】面試官:說幾種常用的分散式 ID 解決方案

在複雜的分散式系統中,ID就是大量的資料和訊息的唯一標識。

舉個例子,資料庫的ID欄位在單體的情況下可以使用自增來作為ID,但是對資料分庫分表後一定需要一個唯一的ID來標識一條資料,這個ID就是分散式ID。對於分散式ID而言,也需要具備分散式系統的特點:高併發,高可用,高效能等特點。

分散式ID實現方案

常用方案對比:

目前流行的分散式ID解決方案有兩種:「號段模式」和「雪花演算法」。

「號段模式」依賴於資料庫,但是區別於資料庫主鍵自增的模式。假設100為一個號段100,200,300,每取一次可以獲得100個ID,效能顯著提高。

「雪花演算法」是由符號位+時間戳+工作機器id+序列號組成的,如圖所示:

符號位為0,0表示正數,ID為正數。

時間戳位用來存放時間戳,單位是ms。

工作機器id位用來存放機器的id,通常分為5個區域位+5個伺服器標識位。

序號位是自增。

雪花演算法能存放多少資料?時間範圍:2^41 / (3652460601000) = 69年 工作程序範圍:2^10 = 1024 序列號範圍:2^12 = 4096,表示1ms可以生成4096個ID。

根據這個演算法的邏輯,只需要將這個演算法用Java語言實現出來,封裝為一個工具方法,那麼各個業務應用可以直接使用該工具方法來獲取分散式ID,只需保證每個業務應用有自己的工作機器id即可,而不需要單獨去搭建一個獲取分散式ID的應用。

分散式ID開源元件

如何選擇開源元件

選擇開源元件首先需要看軟體特性是否滿足需求,主要包括相容性和擴充套件性。

其次需要看目前的技術能力,根據目前自己或者團隊的技術棧和技術能力,能否可以平滑的使用。

第三,要看開源元件的社群,主要關注更新是否頻繁、專案是否有人維護、遇到坑的時候可以取得聯絡尋求幫助、是否在業內被廣泛使用等。

美團Leaf

Leaf是美團基礎研發平臺推出的一個分散式ID生成服務。

目前已經廣泛應用於美團金融、美團外賣、美團酒旅等多個部門。

Leaf特性如下:

  • 全域性唯一,絕對不會出現重複的ID,且ID整體趨勢遞增。
  • 高可用,服務完全基於分散式架構,即使MySQL宕機,也能容忍一段時間的資料庫不可用。
  • 高併發低延時,在CentOS 4C8G的虛擬機器上,遠端呼叫QPS可達5W+,TP99在1ms內。
  • 接入簡單,直接通過公司RPC服務或者HTTP呼叫即可接入。

百度UidGenerator