<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      開源項目|Go 開發的一款分布式唯一 ID 生成系統

      原文連接: 開源項目|Go 開發的一款分布式唯一 ID 生成系統

      今天跟大家介紹一個開源項目:id-maker,主要功能是用來在分布式環境下生成唯一 ID。上周停更了一周,也是用來開發和測試這個項目的相關代碼。

      美團有一個開源項目叫 Leaf,使用 Java 開發。本項目就是在此思路的基礎上,使用 Go 開發實現的。

      項目整體代碼量并不多,不管是想要在實際生產環境中使用,還是想找個項目練手,我覺得都是一個不錯的選擇。

      項目背景

      在大部分系統中,全局唯一 ID 都是一個強需求。比如快遞,外賣,電影等,都需要生成唯一 ID 來保證單號唯一。

      那業務系統對 ID 號的要求有哪些呢?

      1. 全局唯一性:不能出現重復的 ID 號,既然是唯一標識,這是最基本的要求。
      2. 趨勢遞增:在 MySQL InnoDB 引擎中使用的是聚集索引,由于多數 RDBMS 使用 B-tree 的數據結構來存儲索引數據,在主鍵的選擇上面我們應該盡量使用有序的主鍵保證寫入性能。
      3. 單調遞增:保證下一個 ID 一定大于上一個 ID,例如事務版本號、IM 增量消息、排序等特殊需求。
      4. 信息安全:如果 ID 是連續的,惡意用戶的扒取工作就非常容易做了,直接按照順序下載指定 URL 即可;如果是訂單號就更危險了,競對可以直接知道我們一天的單量。所以在一些應用場景下,會需要 ID 無規則、不規則。

      在此背景下,有一個高可用的唯一 ID 生成系統就很重要了。

      項目使用

      生成 ID 分兩種方式:

      1. 根據數據庫生成 ID。
      2. 根據雪花算法生成 ID。

      使用上提供兩種方式來調用接口:

      1. HTTP 方式
      2. gRPC 方式

      HTTP 方式

      1、健康檢查:

      curl http://127.0.0.1:8080/ping
      

      2、獲取 ID:

      獲取 tag 是 test 的 ID:

      curl http://127.0.0.1:8080/v1/id/test
      

      3、獲取雪花 ID:

      curl http://127.0.0.1:8080/v1/snowid
      

      gRPC 方式

      1、獲取 ID:

      grpcurl -plaintext -d '{"tag":"test"}' -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetId
      

      2、獲取雪花 ID:

      grpcurl -plaintext -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetSnowId
      

      本地開發

      # Run MySQL
      $ make compose-up
      
      # Run app with migrations
      $ make run
      

      項目架構

      項目使用 go-clean-template 架構模板開發,目錄結構如下:

      下面對各目錄做一個簡要說明:

      • cmd:程序入口
      • config:配置文件
      • docs:生成的項目文檔
      • integration-test:整合測試
      • internal:業務代碼
      • pkg:一些調用的包

      借用官方的兩張圖:

      整體的層次關系是這樣的,最里面是 models,定義我們的表結構,然后中間是業務邏輯層,業務邏輯層會提供接口,給最外層的 API 來調用,最外層就是一些工具和調用入口。

      這樣做的最大好處就是解耦,不管最外層如何變化,只要在業務邏輯層實現對應接口即可,核心代碼可能根本不需要改變。

      所以,它們之間的調用關系看起來是這樣的:

      HTTP > usecase
             usecase > repository (Postgres)
             usecase < repository (Postgres)
      HTTP < usecase
      

      以上就是本項目的全部內容,如果大家感興趣的話,歡迎給我留言交流,要是能給個 star 那就太好了。


      項目地址:id-maker

      往期文章:

      推薦閱讀:

      posted @ 2021-11-09 20:12  yongxinz  閱讀(1172)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲欧洲一区二区天堂久久| 亚洲国产成人久久77| 国产成人啪精品视频免费软件| 日本九州不卡久久精品一区 | 亚洲成a人v欧美综合天堂下载 | 亚洲中国精品精华液| 灵山县| 99久久精品国产一区二区蜜芽| 亚洲国产一区二区三区亚瑟| 中文成人在线| 日韩av一区二区高清不卡| 日本中文一二区有码在线| 无码中文字幕人妻在线一区| 成人精品视频一区二区三区| 亚洲男人电影天堂无码| 人妻丝袜中文无码AV影音先锋专区| 吴江市| 日韩伦理片| 免费看欧美全黄成人片| 另类 专区 欧美 制服| 人人澡人摸人人添| av高清无码 在线播放| 无码国产成人午夜电影在线观看| 亚洲a∨国产av综合av| a4yy私人毛片| 免费无码午夜福利片| 国内精品无码一区二区三区| 日韩视频中文字幕精品偷拍| 99久久精品久久久久久清纯| 亚洲国产精品日韩在线| 国产在线观看免费观看不卡| 午夜亚洲AV日韩AV无码大全| 国产精品中文字幕av| 国产成人精品一区二区三区免费 | 国产亚洲精品VA片在线播放| 欧美成aⅴ人高清免费| 成人亚洲a片v一区二区三区动漫| 久久婷婷五月综合97色直播| av区无码字幕中文色| 久久zyz资源站无码中文动漫| 成人无码视频|