天畫專案 Idgenerator的開源重構(上)

2021-10-13 16:31:02 字數 1578 閱讀 1047

我在建設乙個租房平台,進行基於租房業務的架構實踐。在寫業務**的時候發現我需要乙個id生成器用於生成各種id和單據編號資訊。

id生成器基於分布式打造,滿足高可用性

支援分庫分表id生成的需求

支援各種業務單據編號生成的管理需求

具有視覺化配置頁面

盡量找開源並滿足上述需求的專案,萬不得已不自己開發

梳理完我的需求之後我開始了在全網尋找id生成器專案之旅。

分布式id生成器的方案之前調研過,起碼有6種,單說id生成器則有uuid和snowflake.這裡簡單羅列下實現方案:

uuid 生成

snowflake演算法生成

基於mysql 自增主鍵實現

基於redis 自增實現

基於zookeeper 檔案序號實現

基於封裝的美團開源leaf實現

基於封裝的滴滴開源tinyid

上面都是比較優秀的分布式id生成實踐專案,這裡我對

這個專案比較感興趣。通過對這個專案的深入了解確實滿足了我最初對id生成的需求。後面我開始了基於這個專案的應用實戰過程。

核心依賴關係

圖(1)核心依賴關係,出自原作者github readme.

核心流程圖

圖(2)核心流程圖,出自原作者github readme.

專案結構和依賴

註冊中心:zookeeper、eureka多種註冊中心

資料庫儲存:mysql

快取:redis

啟動流程

由於服務依賴快取或者資料庫,因此需要先啟動資料庫或者快取,這裡我們使用redis作為儲存,

1.先啟動本地的redis服務。

2.啟動服務之前先將common/core/metric 工程install到本地

3.啟動dashbord工程,訪問http://localhost:6082/,這個工程類似與id配置管理的控制台,所以單獨起乙個springboot服務,這裡前端js載入需要一定的時間,因此首次訪問需要等一小會兒。

4.在視覺化頁面中配置一定規則,如下圖:

5.啟動id-generator-******工程,這裡相當於id-generator工程對外暴露的api服務,將控制台和id獲取分為兩個工程,增加了可用性。

6.訪問http://localhost:6080/generate/id?key=&num=,或者訪問http://localhost:6080/generate/guid?num=即可看到生成的id

這個id-generator工程以springboot的方式構建,同時支援融合主流框架,並具有簡單的視覺化頁面配置,因此可以進行二次開發和整合。

動態畫echarts vue專案

暫時沒接資料,後台介面還沒寫,寫好了更新 let classname document.getelementsbyclassname classname for 在init上面console的時候是可以獲取子元素的,但是放在init裡面就報 this.dom.getcontext is not a ...

旅遊專案第2天

1.在index.html頁面裡發請求 確定是否要傳參 2.在servlet裡 準備頁面需要的資料 在service裡把三類資料封裝到乙個map 把map返回給servlet 處理結果 把map放到resultinfo裡 把resultinfo轉換成json,返回客戶端 3.在index.html頁...

Swift 一天學會,三天寫專案

最近v4.0框架班馬上要開班,很多同學有點焦慮!問為什麼?不會swift,完全沒有接觸過啊!內心換成一批 和諧學習,不急不躁!有我cooci在,你們怕啥!專門為大家寫下這篇部落格,一天快速入門swift,三天寫專案 很快就是週末了,希望你讀完這篇部落格之後這個週末的時間請留給 swift談到語法,我...