分散式環境下全域性唯一ID的生成方案
方案1:UUID
優點:能夠非常簡便地保證分散式環境中的唯一性;
缺點:
- 長度過長,包含32個字元和4個短線;
- 沒有業務含義,不便於問題排查;
原理: 機器標識(MAC地址、IP地址)+系統時間+其它(隨機數、計數等)
方案2:資料庫主鍵
單庫:主鍵id
優點: id連續、唯一,且id大小反映先後順序;
缺點:分散式應用需要共享該單表,且單表的儲存量有上限;
分庫分表:sequence
優點: id連續、唯一;
缺點: id大小不能反映先後順序;
方案3:ZK順序節點
優點: id連續、唯一,且id大小反映先後順序,具有業務含義;
缺點: 效能是瓶頸;
相關推薦
分散式環境下全域性唯一ID的生成方案
方案1:UUID 優點:能夠非常簡便地保證分散式環境中的唯一性; 缺點: 長度過長,包含32個字元和4個短線; 沒有業務含義,不便於問題排查; 原理: 機器標識(MAC地址、IP地址)+系統
全域性唯一ID生成方案對比 • cenalulu's Tech Blog
彙總了各大公司的全域性唯一ID生成方案,並做了一個簡單的優劣比較 背景:在實現大型分散式程式時,通常會有全域性唯一ID(也成GUID)生成的需求,用來對每一個物件標識一個代號。本文就列舉了博主收集的各種全域性唯一ID生成的方案,做一個簡單的類比和備忘。 GUID的基本需求 一
Java叢集環境下全域性唯一流水ID生成方法之一
package com.pfq.deal.risk.util; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat; im
分散式全域性唯一ID生成策略
為什麼分散式系統需要用到ID生成系統 在複雜分散式系統中,往往需要對大量的資料和訊息進行唯一標識。如在美團點評的金融、支付、餐飲、酒店、貓眼電影等產品的系統中,資料日漸增長,對資料庫的分庫分表後需要有一個唯一ID來標識一條資料或訊息,資料庫的自增ID顯然不能滿足需求;特別一點的如訂單、騎
分散式系統唯一ID生成方案彙總
系統唯一ID是我們在設計一個系統的時候常常會遇見的問題,也常常為這個問題而糾結。生成ID的方法有很多,適應不同的場景、需求以及效能要求。所以有些比較複雜的系統會有多個ID生成的策略。下面就介紹一些常見的ID生成策略。 1. 資料庫自增長序列或欄位 最常見的方式。利用資
常見分散式全域性唯一ID生成策略及演算法的對比
全域性唯一的 ID 幾乎是所有系統都會遇到的剛需。這個 id 在搜尋, 儲存資料, 加快檢索速度 等等很多方面都有著重要的意義。工業上有多種策略來獲取這個全域性唯一的id,針對常見的幾種場景,我在這裡進行簡單的總結和對比。 簡單分析一下需求 [1] 所謂全域性唯一的
分散式全域性唯一ID生成策略
一、背景 分散式系統中我們會對一些資料量大的業務進行分拆,如:使用者表,訂單表。因為資料量巨大一張表無法承接,就會對其進行分庫分表。 但一旦涉及到分庫分表,就會引申出分散式系統中唯一主鍵ID的生成問題。 1.1 唯一ID的特性 整個系統ID唯一; ID是數字型別,而且是趨勢遞增; ID簡短,查詢效率快。
【系統設計】分散式唯一ID生成方案總結
目錄 分散式系統中唯一ID生成方案 1. 唯一ID簡介 2. 全域性ID常見生成方案 2.1 UUID生成 2.2 資料庫生成 2.3 Redis生成 2.4
分布式系統唯一ID生成方案匯總
gen 傳輸數據 lee sleep gui 有效 很難 sha 調整 系統唯一ID是我們在設計一個系統的時候常常會遇見的問題,也常常為這個問題而糾結。生成ID的方法有很多,適應不同的場景、需求以及性能要求。所以有些比較復雜的系統會有多個ID生成的策略。下面就介紹一些常見的
【JAVA】系統唯一ID生成方案討論
這種文章,網上應該很多了,不過自己不寫一遍,總是不會印象太深刻,所以今天為了再度加深印象,自己也寫一遍。 現在的網際網路專案,使用者數越來越多,系統基本都是分散式部署,所以基於資料庫的自增id這裡就不說了。 1、UUID 這個東西是JAVA原生API提供的,它的確能保證唯一
讀書筆記-zookeeper全域性唯一id生成
public class ZKLock { //提前建立好鎖物件的結點"/lock" CreateMode.PERSISTENT public static final String LOCK_ZNODE = "/lock"; //分散式鎖實現分散式seq生成 public static cl
MySQL分庫分表環境下全域性ID生成方案
摘要 介紹來自flicker和twitter的兩種解決分散式環境下全域性ID生成方案。 在大型網際網路應用中,隨著使用者數的增加,為了提高應用的效能,我們經常需要對資料庫進行分庫分表操作。在單表時代,我們可以完全依賴於資料庫的自增ID來唯一標識一個使用者或資料物件。但是
高併發分散式環境中獲取全域性唯一ID[分散式資料庫全域性唯一主鍵生成]
需求說明 在過去單機系統中,生成唯一ID比較簡單,可以使用mysql的自增主鍵或者oracle中的sequence, 在現在的大型高併發分散式系統中,以上策略就會有問題了,因為不同的資料庫會部署到不同的機器上,一般都是多主例項,而且再加上高併發的話,就會有重複
分散式儲存中,生成全域性唯一ID的幾種方案
1.自定義生成規則 eg: 3位伺服器編碼+15位年月日時分秒毫秒+3位表編碼+4位隨機碼 (這樣就完全單機完成編碼任務)---共25位 3位伺服器編碼+15位年月日時分秒毫秒+3位表編碼+4流水碼 (這樣流水碼就需要結合資料庫和快
go分散式生成全域性唯一ID
因為snowFlake目的是解決分散式下生成唯一id 所以ID中是包含叢集和節點編號在內的 const ( numberBits uint8 = 12 // 表示每個叢集下的每個節點,1毫秒內可生成的id序號的二進位制位 對應上圖中的最後一段 workerBits uint8 = 10
分散式情況下如何獲取全域性唯一ID
系統唯一ID是我們在設計一個系統的時候常常會遇見的問題,也常常為這個問題而糾結。生成ID的方法有很多,適應不同的場景、需求以及效能要求。所以有些比較複雜的系統會有多個ID生成的策略。下面就介紹一些常見的ID生成策略。1. 資料庫自增長序列或欄位最常見的方式。利用資料庫,全資料
如何在高併發分散式系統中生成全域性唯一Id
又一個多月沒冒泡了,其實最近學了些東西,但是沒有安排時間整理成博文,後續再奉上。最近還寫了一個發郵件的元件以及效能測試請看 《NET開發郵件傳送功能的全面教程(含郵件元件原始碼)》 ,還弄了個MSSQL引數化語法生成器,會在9月整理出來,有興趣的園友可以關注下我的部落格。 分享原由,最近公司用到,並
分散式系統應用中生成全域性唯一ID的演算法(snowflake)----java 實現,單例模式
概述 在分散式系統中,有很多的地方需要生成全域性id的場景,比方說,訂單模組,使用者id等。這種情況下大多數的做法是通過UUID來做處理。首先,UUID是36位的一個字串,相對來說是比較長的,一般我們採用的資料庫會是MySQL,因為大多數的情況下,我們都希望我們的資料是可以
分散式全域性ID生成方案
傳統的單體架構的時候,我們基本是單庫然後業務單表的結構。每個業務表的ID一般我們都是從1增,通過AUTO_INCREMENT=1設定自增起始值,但是在分散式服務架構模式下分庫分表的設計,使得多個庫或多個表儲存相同的業務資料。這種情況根據資料庫的自增ID就會產生相同ID的情況,不能保證主鍵的唯一性。 如上圖
分散式全域性唯一ID--SnowFlake演算法
說到全域性唯一ID,之前做的一個專案,有遇到類似的需求,會有多併發,但是,又需要類似於id的這麼個存在。當時是直接採用的UUID(這個方案實施起來效率最高),當時為了趕進度,就匆匆忙忙的上線了。現在正好來總結一下。 一般情況,實現全域性唯一