1. 程式人生 > >讀書筆記-zookeeper全域性唯一id生成

讀書筆記-zookeeper全域性唯一id生成

public class ZKLock {
	
	
	//提前建立好鎖物件的結點"/lock" CreateMode.PERSISTENT
	public static final String LOCK_ZNODE = "/lock";
	//分散式鎖實現分散式seq生成
	public static class Task2 implements Runnable, IZkChildListener {
	 
	    private final String taskName;
	 
	    private final ZkClient zkClient;
	 
	    private final String lockPrefix = "/loc";
	 
	    private final String selfZnode;
	 
	    public Task2(String taskName) {
	        this.taskName = taskName;
	        zkClient = new ZkClient("192.168.190.36:2181", 30000, 50000);
	        selfZnode = zkClient.createEphemeralSequential(LOCK_ZNODE + lockPrefix, new byte[0]);
	    }
	 
	    @Override
	    public void run() {

	    	  createSeq();
	    }	 
	 
	    private void createSeq() {
	        Stat stat = new Stat();
	        byte[] oldData = zkClient.readData(LOCK_ZNODE, stat);
	        byte[] newData = update(oldData);
	        zkClient.writeData(LOCK_ZNODE, newData);
	        System.out.println(taskName + selfZnode + " obtain seq=" + new String(newData));
	    }
	 
	    private byte[] update(byte[] currentData) {
	        String s = new String(currentData);
	        int d = Integer.parseInt(s);
	        d = d + 1;
	        s = String.valueOf(d);
	        return s.getBytes();
	    }

		@Override
		public void handleChildChange(String parentPath,
				List<String> currentChildren) throws Exception {
			// TODO Auto-generated method stub
			
		}	 
	   
	}
	

	public static void main(String[] args) {
	
				final ExecutorService service = Executors.newFixedThreadPool(20);
				 
				for (int i = 0; i < 10; i++) {
				    service.execute(new Task2("[Concurrent-" + i + "]"));
				}
				service.shutdown();
	}

}


相關推薦

讀書筆記-zookeeper全域性唯一id生成

public class ZKLock { //提前建立好鎖物件的結點"/lock" CreateMode.PERSISTENT public static final String LOCK_ZNODE = "/lock"; //分散式鎖實現分散式seq生成 public static cl

分散式全域性唯一ID生成策略

為什麼分散式系統需要用到ID生成系統 在複雜分散式系統中,往往需要對大量的資料和訊息進行唯一標識。如在美團點評的金融、支付、餐飲、酒店、貓眼電影等產品的系統中,資料日漸增長,對資料庫的分庫分表後需要有一個唯一ID來標識一條資料或訊息,資料庫的自增ID顯然不能滿足需求;特別一點的如訂單、騎

全域性唯一ID生成方案對比 • cenalulu's Tech Blog

彙總了各大公司的全域性唯一ID生成方案,並做了一個簡單的優劣比較 背景:在實現大型分散式程式時,通常會有全域性唯一ID(也成GUID)生成的需求,用來對每一個物件標識一個代號。本文就列舉了博主收集的各種全域性唯一ID生成的方案,做一個簡單的類比和備忘。 GUID的基本需求 一

常見分散式全域性唯一ID生成策略及演算法的對比

全域性唯一的 ID 幾乎是所有系統都會遇到的剛需。這個 id 在搜尋, 儲存資料, 加快檢索速度 等等很多方面都有著重要的意義。工業上有多種策略來獲取這個全域性唯一的id,針對常見的幾種場景,我在這裡進行簡單的總結和對比。 簡單分析一下需求 [1] 所謂全域性唯一的

分散式全域性唯一ID生成策略​

一、背景 分散式系統中我們會對一些資料量大的業務進行分拆,如:使用者表,訂單表。因為資料量巨大一張表無法承接,就會對其進行分庫分表。 但一旦涉及到分庫分表,就會引申出分散式系統中唯一主鍵ID的生成問題。 1.1 唯一ID的特性 整個系統ID唯一; ID是數字型別,而且是趨勢遞增; ID簡短,查詢效率快。

go分散式生成全域性唯一ID

因為snowFlake目的是解決分散式下生成唯一id 所以ID中是包含叢集和節點編號在內的 const ( numberBits uint8 = 12 // 表示每個叢集下的每個節點,1毫秒內可生成的id序號的二進位制位 對應上圖中的最後一段 workerBits uint8 = 10

Spring Boot教你一種方法生成全域性唯一ID

一、概述 流水號生成器(全域性唯一 ID生成器)是服務化系統的基礎設施,其在保障系統的正確執行和高可用方面發揮著重要作用。而關於流水號生成演算法首屈一指的當屬 Snowflake雪花演算法,然而 Snowflake本身很難在現實專案中直接使用,因此實際應用時需要一種可落地的方案。 UidGe

如何在高併發分散式系統中生成全域性唯一Id

又一個多月沒冒泡了,其實最近學了些東西,但是沒有安排時間整理成博文,後續再奉上。最近還寫了一個發郵件的元件以及效能測試請看 《NET開發郵件傳送功能的全面教程(含郵件元件原始碼)》 ,還弄了個MSSQL引數化語法生成器,會在9月整理出來,有興趣的園友可以關注下我的部落格。 分享原由,最近公司用到,並

生成全域性唯一ID的3個思路

標識(ID / Identifier)是無處不在的,生成標識的主體是人,那麼它就是一個命名過程,如果是計算機,那麼它就是一個生成過程。如何保證分散式系統下,並行生成標識的唯一與標識的名稱空間有著密不可分的關係。在世界裡,「潛意識下的名稱空間裡,相對的唯一標識」是普遍存在的

高併發分散式環境中獲取全域性唯一ID[分散式資料庫全域性唯一主鍵生成]

需求說明 在過去單機系統中,生成唯一ID比較簡單,可以使用mysql的自增主鍵或者oracle中的sequence, 在現在的大型高併發分散式系統中,以上策略就會有問題了,因為不同的資料庫會部署到不同的機器上,一般都是多主例項,而且再加上高併發的話,就會有重複

生成全域性唯一ID的3個思路,來自一個資深架構師的總結

標識(ID / Identifier)是無處不在的,生成標識的主體是人,那麼它就是一個命名過程,如果是計算機,那麼它就是一個生成過程。如何保證分散式系統下,並行生成標識的唯一與標識的名稱空間有著密不可分的關係。在世界裡,「潛意識下的名稱空間裡,相對的唯一標識」是

分散式環境下全域性唯一ID生成方案

方案1:UUID 優點:能夠非常簡便地保證分散式環境中的唯一性; 缺點: 長度過長,包含32個字元和4個短線; 沒有業務含義,不便於問題排查; 原理: 機器標識(MAC地址、IP地址)+系統

分散式系統應用中生成全域性唯一ID的演算法(snowflake)----java 實現,單例模式

概述 在分散式系統中,有很多的地方需要生成全域性id的場景,比方說,訂單模組,使用者id等。這種情況下大多數的做法是通過UUID來做處理。首先,UUID是36位的一個字串,相對來說是比較長的,一般我們採用的資料庫會是MySQL,因為大多數的情況下,我們都希望我們的資料是可以

分散式儲存中,生成全域性唯一ID的幾種方案

1.自定義生成規則 eg: 3位伺服器編碼+15位年月日時分秒毫秒+3位表編碼+4位隨機碼 (這樣就完全單機完成編碼任務)---共25位 3位伺服器編碼+15位年月日時分秒毫秒+3位表編碼+4流水碼 (這樣流水碼就需要結合資料庫和快

golang 實現Twitter snowFlake演算法 高效生成全域性唯一ID

最近在著手準備一個H5遊戲  因為這是我第一次接觸遊戲這個類目  即使量不大也想好好的做它一番  在設計表結構的時候想到了表全域性唯一id這個問題  既然是遊戲  那麼一定是多人線上點點點(運營理想狀態 哈哈哈)  一開始想使用mongoDB的objectId來作為全域性唯一

Snowflake生成全域性唯一ID的改進

開發十年,就只剩下這套架構體系了! >>>   

分布式系統唯一ID生成方案匯總

gen 傳輸數據 lee sleep gui 有效 很難 sha 調整 系統唯一ID是我們在設計一個系統的時候常常會遇見的問題,也常常為這個問題而糾結。生成ID的方法有很多,適應不同的場景、需求以及性能要求。所以有些比較復雜的系統會有多個ID生成的策略。下面就介紹一些常見的

常見分布式全局唯一ID生成策略

keepal 需要 還需 一致性 ons bsp 原子操作 單機 物理 全局唯一的 ID 幾乎是所有系統都會遇到的剛需。這個 id 在搜索, 存儲數據, 加快檢索速度 等等很多方面都有著重要的意義。工業上有多種策略來獲取這個全局唯一的id,針對常見的幾種場景,我在這裏進行簡

分散式全域性唯一ID--SnowFlake演算法

    說到全域性唯一ID,之前做的一個專案,有遇到類似的需求,會有多併發,但是,又需要類似於id的這麼個存在。當時是直接採用的UUID(這個方案實施起來效率最高),當時為了趕進度,就匆匆忙忙的上線了。現在正好來總結一下。    一般情況,實現全域性唯一

Spring Boot 工程整合全域性唯一ID生成器 Vesta

本文內容腦圖如下: 文章共 760字,閱讀大約需要 2分鐘 ! 概 述 在前一篇文章 《Spring Boot工程整合全域性唯一ID生成器 UidGenerator》 中給大家推薦了一款由百度開發的基於 Snowflake演算法實現的全域性唯一ID生成器 Uid