成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

分布式id生成方案概述

Terry_Tai / 2663人閱讀

摘要:序本文主要來(lái)聊聊分布式的生成方案。分布式的生成,以為代表的,系列算法采用的就是劃分命名空間并行生成的思路。

本文主要來(lái)聊聊分布式id的生成方案。

目標(biāo)

業(yè)務(wù)系統(tǒng)需要什么樣的ID生成器中提出了幾點(diǎn)目標(biāo):

唯一性

時(shí)間相關(guān)

粗略有序

可反解

可制造

主要思路

對(duì)于每個(gè)標(biāo)識(shí),都需要有一個(gè)命名空間(namespace),來(lái)保證其相對(duì)唯一性。
分布式的ID生成,以Twitter Snowflake為代表的, Flake 系列算法采用的就是劃分命名空間并行生成的思路。

UUID

UUID(Universally Unique Identifier)的標(biāo)準(zhǔn)型式包含32個(gè)16進(jìn)制數(shù)字(每個(gè)字符0-F的字符代表4bit,共128bit),以連字號(hào)分為五段,形式為8-4-4-4-12的32+4個(gè)字符。
比如bc96c351-bea3-4e53-b0a8-d9806763dd69。
主要的格式如下:

時(shí)間戳+UUID版本號(hào),分三段占16個(gè)字符(60bit+4bit),

Clock Sequence號(hào)與保留字段,占4個(gè)字符(13bit+3bit),

節(jié)點(diǎn)標(biāo)識(shí)占12個(gè)字符(48bit),

version 4 基于隨機(jī)數(shù)的算法,也是JDK里的算法,不管原來(lái)各個(gè)位的含義了,除了少數(shù)幾個(gè)位必須按規(guī)范填,其余全部用隨機(jī)數(shù)表達(dá)。

mongo object id

通過(guò)“時(shí)間+機(jī)器碼+pid+inc”共12個(gè)字節(jié),通過(guò)4+3+2+3的方式最終標(biāo)識(shí)成一個(gè)24長(zhǎng)度的十六進(jìn)制字符。ObjectId是一個(gè)12字節(jié) BSON 類(lèi)型數(shù)據(jù),有以下格式:

4個(gè)字節(jié)表示的Unix timestamp

3個(gè)字節(jié)表示的機(jī)器的ID

2個(gè)字節(jié)表示的進(jìn)程ID

3個(gè)字節(jié)表示的計(jì)數(shù)器

snow flake算法

個(gè)64 bits的唯一long型的ID,使用其中41bit作為毫秒數(shù),10bit作為機(jī)器編號(hào),12bit作為毫秒內(nèi)序列號(hào)。IdWorker

+---------------+----------------+----------------+
|timestamp(ms)42  | worker id(10) | sequence(12)  |
+---------------+----------------+----------------+

id  = timestamp | workerid | sequence (eg. 1451063443347648410)

默認(rèn)采用上圖字節(jié)分配方式:

第一位為未使用,接下來(lái)的41位為毫秒級(jí)時(shí)間(41位的長(zhǎng)度可以使用69年)

5位datacenterId和5位workerId(10位的長(zhǎng)度最多支持部署1024個(gè)節(jié)點(diǎn))

12位是毫秒內(nèi)的計(jì)數(shù)(12位的計(jì)數(shù)順序號(hào)支持每個(gè)節(jié)點(diǎn)每毫秒產(chǎn)生4096個(gè)ID序號(hào))

snowflake生成的ID整體上按照時(shí)間自增排序,并且整個(gè)分布式系統(tǒng)內(nèi)不會(huì)產(chǎn)生ID碰撞(由datacenter和workerId作區(qū)分),并且效率較高。這個(gè)算法單機(jī)每秒內(nèi)理論上最多可以生成1000*(2^12),也就是400W的ID。

snow flake算法變種 Boundary flake

Boundary flakeID 長(zhǎng)度擴(kuò)展到 128 bits:

+---------------+----------------+----------------+
|timestamp(ms)64  | worker id(48) | sequence(16)  |
+---------------+----------------+----------------+
id  = timestamp | workerid | sequence

最高 64 bits 時(shí)間戳;

然后是 48 bits 的 Worker 號(hào) (和 Mac 地址一樣長(zhǎng));

最后是 16 bits 的 Seq Number

由于它用 48 bits 作為 Worker ID, 和 Mac 地址的長(zhǎng)度一樣, 這樣啟動(dòng)時(shí)不需要和 Zookeeper 通訊獲取 Worker ID. 做到了完全的去中心化
它這樣做的目的是用更多的 bits 實(shí)現(xiàn)更小的沖突概率, 這樣就支持更多的 Worker 同時(shí)工作. 同時(shí), 每毫秒能分配出更多的 ID

Simple flake

simpleflake取消 Worker 號(hào), 保留 41 bits 的 Timestamp, 同時(shí)把 sequence number 擴(kuò)展到 22 bits

+---------------+----------------+
|timestamp(ms)42  | sequence(22) 
+---------------+----------------+
id  = timestamp | sequence

Simpleflake 的特點(diǎn):

sequence number 完全靠隨機(jī)產(chǎn)生 (這樣也導(dǎo)致了生成的 ID 可能出現(xiàn)重復(fù))

沒(méi)有 Worker 號(hào), 也就不需要和 Zookeeper 通訊, 實(shí)現(xiàn)了完全去中心化

Timestamp 保持和 Snowflake 一致, 今后可以無(wú)縫升級(jí)到 Snowflake
缺點(diǎn):

生成的 ID 重復(fù)的可能. 這個(gè)生成 ID 重復(fù)的概率隨著每秒生成的 ID 數(shù)的增長(zhǎng)而增長(zhǎng)。

每秒生成的 ID 不能太多 (最好小于 100次/秒, 如果大于 100次/秒的場(chǎng)景, Simpleflake 就不適用

百度唯一id

UidGenerator

+---------------+----------------+----------------+
|timestamp(ms)29  | worker id(22) | sequence(13)  |
+---------------+----------------+----------------+
id  = sign + delta seconds | workerid | sequence

timestap
sign(1bit)固定1bit符號(hào)標(biāo)識(shí),即生成的UID為正數(shù)。

delta seconds (28 bits)前時(shí)間,相對(duì)于時(shí)間基點(diǎn)"2016-05-20"的增量值,單位:秒,最多可支持約8.7年

worker id (22 bits)
機(jī)器id,最多可支持約420w次機(jī)器啟動(dòng)。內(nèi)置實(shí)現(xiàn)為在啟動(dòng)時(shí)由數(shù)據(jù)庫(kù)分配,默認(rèn)分配策略為用后即棄,后續(xù)可提供復(fù)用策略。

sequence (13 bits)
每秒下的并發(fā)序列,13 bits可支持每秒8192個(gè)并發(fā)。

doc

服務(wù)化框架-分布式Unique ID的生成方法一覽

Leaf——美團(tuán)點(diǎn)評(píng)分布式ID生成系統(tǒng)

分布式系統(tǒng)中唯一 ID 的生成方法

細(xì)聊分布式ID生成方法

生成全局唯一ID的3個(gè)思路,來(lái)自一個(gè)資深架構(gòu)師的總結(jié)

Announcing Snowflake

A distributed, k-sortable unique ID generation system using Redis and Lua

經(jīng)典的雪花算法-springboot

一個(gè)實(shí)現(xiàn) Twitter SnowFlake 算法 的 Go 分布式 UID 生成器

Java實(shí)現(xiàn)的, 基于Snowflake算法的唯一ID生成器

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70301.html

相關(guān)文章

  • 服務(wù)器架構(gòu)

    摘要:我的后端書(shū)架阿里大牛,書(shū)單整合一整合一分布式生成器架構(gòu)師之路這也是本文要討論的核心問(wèn)題如何高效生成趨勢(shì)有序的全局唯一。 輕松搞定 rabbitMQ rabbitMQ 的基本使用。 REST 真的完全適合微服務(wù)架構(gòu)嗎? 作者根據(jù)自己的微服務(wù)經(jīng)驗(yàn),提出 REST 并不是微服務(wù)的唯一通信機(jī)制,從而介紹了微服務(wù)的幾種通信機(jī)制,包括 REST、管道以及基于異步消息傳遞。同時(shí),作者提出了在不同的場(chǎng)...

    nidaye 評(píng)論0 收藏0
  • java學(xué)習(xí)(一) —— java概述

    摘要:編譯完成后,如果沒(méi)有報(bào)錯(cuò),那么通過(guò)命令對(duì)字節(jié)碼文件進(jìn)行解釋運(yùn)行,執(zhí)行時(shí)不需要添加后綴總結(jié)說(shuō)白了,整個(gè)程序?qū)帉?xiě)運(yùn)行有三步編寫(xiě)為后綴對(duì)程序文件通過(guò)程序文件進(jìn)行編譯生成文件文件名解釋運(yùn)行寫(xiě)代碼編譯解釋運(yùn)行 前言 最近開(kāi)始學(xué)習(xí)下java,畢竟web開(kāi)發(fā)還是java比較完善功能也較php更加強(qiáng)大。學(xué)習(xí)資料參考:https://github.com/DuGuQiuBai... 此章主要記錄下...

    edgardeng 評(píng)論0 收藏0
  • 理解布式id生成算法SnowFlake

    摘要:分布式生成算法的有很多種,的就是其中經(jīng)典的一種。負(fù)數(shù)的二進(jìn)制表示在計(jì)算機(jī)中,負(fù)數(shù)的二進(jìn)制是用補(bǔ)碼來(lái)表示的。 分布式id生成算法的有很多種,Twitter的SnowFlake就是其中經(jīng)典的一種。 概述 SnowFlake算法生成id的結(jié)果是一個(gè)64bit大小的整數(shù),它的結(jié)構(gòu)如下圖: showImg(https://segmentfault.com/img/bVVulC?w=1021&h=...

    harriszh 評(píng)論0 收藏0
  • 微服務(wù)與Spring Cloud概述

    摘要:微服務(wù)架構(gòu)概述應(yīng)用架構(gòu)的發(fā)展應(yīng)用是可獨(dú)立運(yùn)行的程序代碼,提供相對(duì)完善的業(yè)務(wù)功能。阿里開(kāi)源的是的典型實(shí)現(xiàn)。它目前由官方開(kāi)發(fā)維護(hù),基于開(kāi)發(fā),提供一套完整的微服務(wù)解決方案。 微服務(wù)與Spring Cloud 隨著互聯(lián)網(wǎng)的快速發(fā)展, 云計(jì)算近十年也得到蓬勃發(fā)展, 企業(yè)的IT環(huán)境和IT架構(gòu)也逐漸在發(fā)生變革,從過(guò)去的單體應(yīng)用架構(gòu)發(fā)展為至今廣泛流行的微服務(wù)架構(gòu)。 微服務(wù)是一種架構(gòu)風(fēng)格, 能給軟件應(yīng)用...

    scwang90 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<