分布式唯一ID生成服務

2021-09-08 09:53:05 字數 1831 閱讀 3650

snservice是一款基於分布式的唯一id生成服務,主要用於提供大數量業務資料建立唯一id的需要;服務提供最低10k/s的唯一id請求處理.如果你部署服務的cpu資源達到4核的情況下那該服務最低可以提供100k/s的請求處理能力.服務支援部署到linux mono 3.2.3和windows .net4.0

服務生成的id是64位無符號長整型,其中48位是現有時間和2023年1月1日時間差的毫秒數,另外16位則是針對當前毫秒的遞增值.即每毫秒支援6萬多個唯一id生成,每秒則支援多達6千萬個id生成.這個數量級足可以滿足大部份的需要.

為了保證所有伺服器上的業務資料獲取得全域性唯一id,所以通過服務的方式提供.如果考慮更大的獲取量和服務的可靠性,可以部署兩台id生成服務,分別生成序列為奇和偶數,應用端通過虛擬ip指向即可.

可以通過修改以下配置項來確定遞增值的起始和步增長值

<

snservicesection

xmlns

="urn:ikende.com.snservice"

>

<

sequence

start

="1"

step

="1"

/>

snservicesection

>

如果生成規則不滿足需要,則可以自行修改id生成方式

服務是通過tcp的方式提供訪問,分別提供console和windows service兩種方式來載入服務.可以通過修改以下配置來改動服務監聽的ip和埠,預設情況下是監聽本機所有ip和8088埠.

<

serversection

xmlns

="urn:beetle.express"

>

<

listens

>

<

add

name

="sn_server"

type

="tcp"

port

="8088"

handler

="ikende.com.snservice.snserver,ikende.com.snservice"

syncsend

="true"

usereceivequeue

="false"

usesendqueue

="false"

/>

listens

>

serversection

>

服務的執**況可以通過程式或服務目錄下的log目錄檢視日誌.

[注意:由於id是通過時間截來處理,所以在部署前需要同步一下網路時間,保證以後即使服務重啟也不會導致id生成上出現問題.]

服務通過tcp方式提供,所以只需要tcp接入到相關服務並傳送getsn指令,服務即可響應byte[8]ulong的資料.如果是使用.net訪問那可以引用ikende.com.snservice.dll.,通過以下**來獲取唯一id.

private

static ikende.com.snservice.api.snclient client=new api.snclient("

127.0.0.1

", 8088

);ulong value = client.getvalue();

分布式ID生成服務

在幾乎所有的分布式系統或者採用了分庫 分表設計的系統中,幾乎都會需要生成資料的唯一標識id的需求,常規做法,是使用資料庫中的自動增長列來做系統主鍵,但是這樣的做法無法保證id全域性唯一.那麼乙個分布式id生成器應該滿足那些需求呢 本文將基於snowflake的演算法來進行以下的討論,當然,分布式id...

php 生成分布式唯一ID

生成唯一id,主要針對的是分布式服務 md5 伺服器mac位址 時間戳 程序id 自增id 當應用於api時,由於 nginx 程序id一直在變化,所以自增id可以使用隨機數,同時避免檔案鎖影響api能力 ip位址 function getipaddr return preg replace ipa...

分布式唯一ID生成器

在應用程式中,經常需要全域性唯一的id作為資料庫主鍵。如何生成全域性唯一id?首先,需要確定全域性唯一id是整型還是字串?如果是字串,那麼現有的uuid就完全滿足需求,不需要額外的工作。缺點是字串作為id占用空間大,索引效率比整型低。如果採用整型作為id,那麼首先排除掉32位int型別,因為範圍太小...