導(dǎo)語:宜信于2019年3月29日正式開源nextsystem4(以下簡稱“NS4”)系列模塊。此次開源的NS4系列模塊是圍繞當(dāng)前支付系統(tǒng)笨重、代碼耦合度高、維護(hù)成本高而產(chǎn)生的分布式業(yè)務(wù)系統(tǒng)解決方案。NS4系列框架允許創(chuàng)建復(fù)雜的流程/業(yè)務(wù)流,對于業(yè)務(wù)服務(wù)節(jié)點(diǎn)的實(shí)現(xiàn)可串聯(lián),可分布式。其精簡、輕量,實(shí)現(xiàn)了“脫容器”(不依賴tomcat、jetty等容器)獨(dú)立運(yùn)行。NS4系列框架的設(shè)計(jì)理念是將業(yè)務(wù)和邏輯進(jìn)行分離,開發(fā)人員只需通過簡單的配置和業(yè)務(wù)實(shí)現(xiàn)就可以實(shí)現(xiàn)邏輯復(fù)雜、性能高效、功能穩(wěn)定的業(yè)務(wù)系統(tǒng)。點(diǎn)擊查看框架整體介紹
創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
NS4系列包括4個開源模塊,分別是:ns4_frame 分布式服務(wù)框架(詳情點(diǎn)擊查看:開源|ns4_frame分布式服務(wù)框架開發(fā)指南)、ns4_gear_idgen ID生成器組件(NS4框架Demo示例)、ns4_gear_watchdog 監(jiān)控系統(tǒng)組件(服務(wù)守護(hù)、應(yīng)用性能監(jiān)控、數(shù)據(jù)采集、自動化報(bào)警系統(tǒng))和ns4_chatbot通訊組件。
其中,ns4_gear_idgen(ID生成器)是基于ns4_frame框架實(shí)現(xiàn)的,它支持分布式部署,生成全局唯一的 ID,其中長度、前綴、后綴、步長、進(jìn)制也可根據(jù)自己的業(yè)務(wù)自由配置,還可以通過ns4_gear_idgen對NS4.0框架進(jìn)行測試。本文重點(diǎn)介紹ns4_gear_idgen (ID生成器)方案具備哪些優(yōu)點(diǎn)。
項(xiàng)目開源地址:https://github.com/newsettle/ns4_gear_idgen
在復(fù)雜的系統(tǒng)中,往往需要使用一個有意義且有序的序列號來作為全局唯一的ID,來對大量的數(shù)據(jù)(如訂單賬戶)進(jìn)行標(biāo)識。
取當(dāng)前毫秒數(shù)/微秒作為ID ,如System.currentTimeMillis()
優(yōu)點(diǎn)
缺點(diǎn)
UUID(Universally Unique Identifier)的標(biāo)準(zhǔn)型式包含32個16進(jìn)制數(shù)字,以連字號分為五段,形式為8-4-4-4-12的36個字符。示例:550e8400-e29b-41d4-a716- 446655440000,到目前為止業(yè)界一共有 5 種方式生成UUID,詳情見IETF發(fā)布的UUID規(guī)范 A Universally Unique IDentifier (UUID) URN Namespace。
優(yōu)點(diǎn)
缺點(diǎn)
ID作為主鍵時(shí)在特定的環(huán)境會存在一些問題,比如做DB主鍵的場景下,UUID就非常不適用:
All indexes other than the clustered index are known as secondary indexes. In InnoDB, each record in a secondary index contains the primary key columns for the row, as well as the columns specified for the secondary index. InnoDB uses this primary key value to search for the row in the clustered index. If the primary key is long, the secondary indexes use more space, so it is advantageous to have a short primary key.
這種方案大致來說是一種以劃分命名空間(UUID也算,由于比較常見,所以單獨(dú)分析)來生成ID的一種算法,這種方案把64-bit分別劃分成多段,分開來標(biāo)示機(jī)器、時(shí)間等,比如在snowflake中的64-bit分別表示。如下圖(圖片來自網(wǎng)絡(luò))所示:
41-bit的時(shí)間可以表示(1L<<41)/(1000L*3600*24*365)=69年的時(shí)間,10-bit機(jī)器可以分別表示1024臺機(jī)器。如果我們對IDC劃分有需求,還可以將10-bit分5-bit給IDC,分5-bit給工作機(jī)器。這樣就可以表示32個IDC,每個IDC下可以有32臺機(jī)器,可以根據(jù)自身需求定義。
12 個自增序列號可以表示2^12個ID,理論上snowflake方案的QPS約為409.6w/s,這種分配方式可以保證在任何一個IDC的任何一臺機(jī)器在任意毫秒內(nèi)生成的ID都是不同的。
優(yōu)點(diǎn)
缺點(diǎn)
以MySQL舉例,利用給字段設(shè)置auto_increment_increment和 auto_increment_offset來保證ID自增,每次業(yè)務(wù)使用下列SQL讀寫MySQL得到ID號。
begin;
REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
commit;
優(yōu)點(diǎn)
缺點(diǎn)
Redis的所有命令操作都是單線程的,本身提供像incr和increby這樣的自增原子命令,所以能保證生成的ID肯定是唯一有序的。
考慮到單節(jié)點(diǎn)的性能瓶頸,可以使用Redis集群來獲取更高的吞吐量。假如一個集群中有5臺Redis。可以初始化每臺Redis的值分別是1, 2, 3, 4, 5,然后步長都是5。各個Redis生成的ID為:
A:1, 6, 11, 16, 21
B:2, 7, 12, 17, 22
C:3, 8, 13, 18, 23
D:4, 9, 14, 19, 24
E:5, 10, 15, 20, 25
優(yōu)點(diǎn)
缺點(diǎn)
先看下數(shù)據(jù)庫表設(shè)計(jì):
字段說明:
key_prefix:生成ID的前綴,可配置自定義前綴+日期部分 如: ${date14}/TEST${date14}
ID前綴日期部分支持以下幾種日期格式:
優(yōu)點(diǎn)
該ID生成器是基于NS4框架實(shí)現(xiàn)的,支持分布式部署,同時(shí)生成的ID長度、前綴、后綴、步長,進(jìn)制也可根據(jù)自己的業(yè)務(wù)自由的配置。
其功能可分為以下幾個部分:
見 ns4_gear_idgen 源碼下 gear_key.sql
內(nèi)容來源:宜信技術(shù)學(xué)院
文章標(biāo)題:開源|為什么要使用ns4_gear_idgenID生成器?
標(biāo)題網(wǎng)址:http://vcdvsql.cn/article36/iipdpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站導(dǎo)航、微信公眾號、用戶體驗(yàn)、全網(wǎng)營銷推廣、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)