中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

全局id生成器試用之Leaf

數(shù)據(jù)量上來后,單庫單表承受不住的時候,我們就需要引入分庫分表。 但是分庫分表后,主鍵id就不能依賴于MySQL,需要從外部去獲取id。

專注于為中小企業(yè)提供做網(wǎng)站、成都做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)德欽免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

目前我們生產(chǎn)環(huán)境在用的DBLE作為中分庫分表中間件, 其自帶了類似snowflake方案的全局id生成器,也可以基于數(shù)據(jù)庫來實現(xiàn)。

但是,在一個大點的公司里面, 全局id 是一個用處很廣泛的服務(wù),通常會獨立作為一個公共服務(wù)對外提供。

這里我們就以 美團點評出的 Leaf為例,看下它的效果。

相關(guān)文檔:

https://tech.meituan.com/2019/03/07/open-source-project-leaf.html

https://tech.meituan.com/2017/04/21/mt-leaf.html

https://blog.csdn.net/bskfnvjtlyzmv867/article/details/90175306? 源碼詳解

官方的2篇文檔,介紹的很詳細了,我們就不啰嗦了。

下面的演示,是基于數(shù)據(jù)庫做id分發(fā) (數(shù)據(jù)庫的SLA可以使用MHA、pxc或mgr來保證)

0 環(huán)境

OS版本:? CentOS7

node1 IP: 192.168.20.10

node2 IP: 192.168.20.17

MySQL地址: 192.168.20.10

1 創(chuàng)建數(shù)據(jù)庫表等

CREATE?DATABASE?leaf?;

use?leaf?;

CREATE?TABLE?`leaf_alloc`?(
??`biz_tag`?varchar(128)??NOT?NULL?DEFAULT?'',?--?your?biz?unique?name
??`max_id`?bigint(20)?NOT?NULL?DEFAULT?'1',
??`step`?int(11)?NOT?NULL,
??`description`?varchar(256)??DEFAULT?NULL,
??`update_time`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?ON?UPDATE?CURRENT_TIMESTAMP,
??PRIMARY?KEY?(`biz_tag`)
)?ENGINE=InnoDB;

--?插入幾條需要分發(fā)id的服務(wù)的標識(我這里在默認的基礎(chǔ)上,加了?卡券id、帖子id?這2個例子)
insert?into?leaf_alloc(biz_tag,?max_id,?step,?description)?values('leaf-segment-test',?1,?2000,?'Test?leaf?Segment?Mode?Get?Id');
insert?into?leaf_alloc(biz_tag,?max_id,?step,?description)?values('coupon',?1,?2000,?'Get?coupon?Id');
insert?into?leaf_alloc(biz_tag,?max_id,?step,?description)?values('tid',?1,?1000,?'Get?tiezi?id');

select?*?from?leaf_alloc?;
+-------------------+--------+------+-------------------------------+---------------------+
|?biz_tag???????????|?max_id?|?step?|?description???????????????????|?update_time?????????|
+-------------------+--------+------+-------------------------------+---------------------+
|?coupon????????????|??????1?|?2000?|?Get?coupon?Id?????????????????|?2019-10-12?17:47:23?|
|?leaf-segment-test?|??????1?|?2000?|?Test?leaf?Segment?Mode?Get?Id?|?2019-10-12?17:47:00?|
|?tid???????????????|??????1?|?1000?|?Get?tiezi?id??????????????????|?2019-10-12?17:48:21?|
+-------------------+--------+------+-------------------------------+---------------------+
3?rows?in?set?(0.001?sec)

--?創(chuàng)建獨立的數(shù)據(jù)庫賬號
create?user?leaf@'%'?identified?by?'leaf1234';
grant?select,update,delete,insert?on?leaf.*?to?leaf@'%';

2 編譯leaf-server

注意:需要在node1和node2上單獨執(zhí)行編譯和啟動的操作,編譯+啟動 依賴到 maven 和 oracle-jdk

cd?/usr/local/
git?clone?https://github.com/Meituan-Dianping/Leaf.git
cd?leaf
mvn?clean?install?-DskipTests
cd?leaf-server

vim leaf-server/src/main/resources/leaf.properties? 修改配置文件中數(shù)據(jù)庫的連接方式

leaf.name=com.sankuai.leaf.opensource.test

leaf.segment.enable=true
leaf.jdbc.url=jdbc:mysql://192.168.20.10:3306/leaf?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
leaf.jdbc.username=leaf
leaf.jdbc.password=leaf1234

leaf.snowflake.enable=false
#leaf.snowflake.zk.address=
#leaf.snowflake.port=

3 啟動leaf-server:

cd?/usr/local/leaf/leaf-server
mvn?spring-boot:run

4 測試

測試我上面插入的3個biz_tag的發(fā)號器情況:

? ? curl http://192.168.20.10:8080/api/segment/get/leaf-segment-test

? ? curl http://192.168.20.10:8080/api/segment/get/coupon

? ? curl

http://192.168.20.10:8080/api/segment/get/tid

5 其它

號段模式自帶了個監(jiān)控界面:? ?

http://192.168.20.10:8080/cache

測試id的生成效果:

for?i?in?{1..2000};?do??curl?http://192.168.20.17:8080/api/segment/get/coupon;?done
for?i?in?{1..2000};?do??curl?http://192.168.20.10:8080/api/segment/get/coupon;?done

然后,我們在for循環(huán)獲取id的時候,人為的把MySQL關(guān)閉掉,可以看到如下的,可以看到剛開始leaf因為號段+雙buffer的存在,可以繼續(xù)發(fā)號,但是當預(yù)分配的id都用光后,就會報錯了:

全局id生成器試用之Leaf

只要我們的MySQL數(shù)據(jù)庫故障切換的時候不要太久,并且配合設(shè)置不同biz_tag以不同大小的step,通不會對對leaf服務(wù)造成影響。

下面是雙buffer在web界面上的體現(xiàn):

全局id生成器試用之Leaf

網(wǎng)頁名稱:全局id生成器試用之Leaf
地址分享:http://www.rwnh.cn/article28/jgpcjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)搜索引擎優(yōu)化、品牌網(wǎng)站制作、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
谷城县| 井冈山市| 仁寿县| 安国市| 镇沅| 隆子县| 高阳县| 增城市| 蕲春县| 铁岭市| 涿州市| 富锦市| 建平县| 高青县| 托里县| 孝感市| 绥中县| 连南| 千阳县| 读书| 瑞安市| 庆安县| 承德县| 宜都市| 齐齐哈尔市| 株洲市| 南投县| 临猗县| 太仓市| 峨边| 塔城市| 辽阳市| 绥中县| 滨海县| 赣榆县| 临朐县| 会理县| 鹤壁市| 枝江市| 靖安县| 乌兰察布市|