【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