雪花 ID 在分散式環境中用於產生無衝突、簡短、唯一的 ID。與依賴資料庫產生 ID 或使用長 128 位元 UUID 等傳統方法不同,Snowflake ID 使用時間和簡單的位元運算。這種巧妙的技術允許每個微服務獨立產生唯一的 ID,而不需要中央系統來避免衝突。
產生雪花 ID 就像用三個關鍵部分建立拼圖一樣。讓我們來分解一下:
取一個n位長的位串:
首先,我們從長度為 n 的位元串開始。這將保存產生唯一 ID 所需的所有資訊。
分為三段:i、j、k:
位元串分為三個部分,使得 i j k = n.
i - 時間組件:
第一部分 i 表示當前時間。選擇一個固定的開始時間(也稱為紀元),i 的位元將透過以奈秒為單位的當前時間減去開始時間來計算。這可確保新的 ID 始終大於舊的 ID。
j - 機器 ID:
第二部分 j 是機器識別碼。當你的微服務啟動時,它會被分配一個唯一的ID(機器ID),它成為j部分。這可以確保不同機器產生的 ID 不會發生衝突,即使它們是在完全相同的時刻創建的。
k - 序號:
最後一部分 k 是序號。它的作用就像一個計數器,只要在同一時間單位內產生多個 ID,該計數器就會增加。這可以保持 ID 的唯一性,即使它們是快速連續生成的。
將雪花 ID 視為繁忙廚房中的特殊菜餚標籤:
查看此 GitHub 儲存庫,以了解 Snowflake ID 產生的 Go 實作
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3