国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

分布式id生成方案概述

Terry_Tai / 2589人閱讀

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

本文主要來聊聊分布式id的生成方案。

目標(biāo)

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

唯一性

時間相關(guān)

粗略有序

可反解

可制造

主要思路

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

UUID

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

時間戳+UUID版本號,分三段占16個字符(60bit+4bit),

Clock Sequence號與保留字段,占4個字符(13bit+3bit),

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

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

mongo object id

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

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

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

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

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

snow flake算法

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

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

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

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

第一位為未使用,接下來的41位為毫秒級時間(41位的長度可以使用69年)

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

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

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

snow flake算法變種 Boundary flake

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

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

最高 64 bits 時間戳;

然后是 48 bits 的 Worker 號 (和 Mac 地址一樣長);

最后是 16 bits 的 Seq Number

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

Simple flake

simpleflake取消 Worker 號, 保留 41 bits 的 Timestamp, 同時把 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ù))

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

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

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

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

百度唯一id

UidGenerator

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

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

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

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

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

doc

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

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

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

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

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

Announcing Snowflake

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

    edgardeng 評論0 收藏0
  • 理解布式id生成算法SnowFlake

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

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

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

    scwang90 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<