1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        美團(tuán)分布式ID生成服務(wù)開源!

        共 2893字,需瀏覽 6分鐘

         ·

        2022-06-08 01:43



        上一篇:突然!VS Code 殺死 IDEA?!

        簡介

        Leaf 最早期需求是各個(gè)業(yè)務(wù)線的訂單ID生成需求。在美團(tuán)早期,有的業(yè)務(wù)直接通過DB自增的方式生成ID,有的業(yè)務(wù)通過redis緩存來生成ID,也有的業(yè)務(wù)直接用UUID這種方式來生成ID。以上的方式各自有各自的問題,因此我們決定實(shí)現(xiàn)一套分布式ID生成服務(wù)來滿足需求。

        目前Leaf覆蓋了美團(tuán)點(diǎn)評公司內(nèi)部金融、餐飲、外賣、酒店旅游、貓眼電影等眾多業(yè)務(wù)線。在4C8G VM基礎(chǔ)上,通過公司RPC方式調(diào)用,QPS壓測結(jié)果近5w/s,TP999 1ms。

        快速上手

        一、Leaf Server

        我們提供了一個(gè)基于spring boot的HTTP服務(wù)來獲取ID

        二、配置介紹

        Leaf 提供兩種生成的ID的方式(號段模式和snowflake模式),你可以同時(shí)開啟兩種方式,也可以指定開啟某種方式(默認(rèn)兩種方式為關(guān)閉狀態(tài))。

        Leaf Server的配置都在leaf-server/src/main/resources/leaf.properties中

        配置項(xiàng)含義默認(rèn)值
        leaf.nameleaf 服務(wù)名
        leaf.segment.enable是否開啟號段模式false
        leaf.jdbc.urlmysql 庫地址
        leaf.jdbc.usernamemysql 用戶名
        leaf.jdbc.passwordmysql 密碼
        leaf.snowflake.enable是否開啟snowflake模式false
        leaf.snowflake.zk.addresssnowflake模式下的zk地址
        leaf.snowflake.portsnowflake模式下的服務(wù)注冊端口

        1.號段模式

        如果使用號段模式,需要建立DB表,并配置leaf.jdbc.url, leaf.jdbc.username, leaf.jdbc.password

        如果不想使用該模式配置leaf.segment.enable=false即可。

        創(chuàng)建數(shù)據(jù)表
        CREATE DATABASE leaf
        CREATE TABLE `leaf_alloc` (
          `biz_tag` varchar(128)  NOT NULL DEFAULT '',
          `max_id` bigint(20NOT NULL DEFAULT '1',
          `step` int(11NOT NULL,
          `description` varchar(256)  DEFAULT NULL,
          `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
          PRIMARY KEY (`biz_tag`)
        ENGINE=InnoDB;

        insert into leaf_alloc(biz_tag, max_id, step, description) values('leaf-segment-test'12000'Test leaf Segment Mode Get Id')
        配置相關(guān)數(shù)據(jù)項(xiàng)

        在leaf.properties中配置leaf.jdbc.url, leaf.jdbc.username, leaf.jdbc.password參數(shù)

        2.Snowflake模式

        算法取自twitter開源的snowflake算法。

        如果不想使用該模式配置leaf.snowflake.enable=false即可。

        配置zookeeper地址

        在leaf.properties中配置leaf.snowflake.zk.address,配置leaf 服務(wù)監(jiān)聽的端口leaf.snowflake.port。

        三、運(yùn)行Leaf Server

        打包服務(wù)
        git clone [email protected]:Meituan-Dianping/Leaf.git
        //按照上面的號段模式在工程里面配置好
        cd leaf
        mvn clean install -DskipTests
        cd leaf-server
        運(yùn)行服務(wù)

        注意:首先得先配置好數(shù)據(jù)庫表或者zk地址

        mvn方式
        mvn spring-boot:run
        腳本方式
        sh deploy/run.sh
        測試
        #segment
        curl http://localhost:8080/api/segment/get/leaf-segment-test
        #snowflake
        curl http://localhost:8080/api/snowflake/get/test
        監(jiān)控頁面

        號段模式:http://localhost:8080/cache

        四、Leaf Core

        當(dāng)然,為了追求更高的性能,需要通過RPC Server來部署Leaf 服務(wù),那僅需要引入leaf-core的包,把生成ID的API封裝到指定的RPC框架中即可。

        五、注意事項(xiàng)

        注意現(xiàn)在leaf使用snowflake模式的情況下 其獲取ip的邏輯直接取首個(gè)網(wǎng)卡ip【特別對于會(huì)更換ip的服務(wù)要注意】避免浪費(fèi)workId

        項(xiàng)目地址

        github地址:https://github.com/Meituan-Dianping/Leaf


        感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。 
            · END ·

        最后,關(guān)注公眾號互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。


        正文結(jié)束


        推薦閱讀 ↓↓↓

        1.Alibaba開源內(nèi)網(wǎng)高并發(fā)編程手冊.pdf

        2.2T架構(gòu)師學(xué)習(xí)資料干貨分享

        3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

        4.程序員一般可以從什么平臺(tái)接私活?                                                  

        瀏覽 32
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产成人无码精品电影 | 欧美肥妇bbwbbwbbw | 一区二区三区无码流出 | 成人h视频在线观看无码 | 女人裸体打篮球无遮挡 | 国产绿帽娇妻找猛男3p视频 | 成人高潮AA 毛片 | 在线黄色毛片 | 麻豆AV无码久久精品蜜桃久久 | 人人肏屄|