成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 開發的一款分布式唯一 ID 生成系統

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

[[433936]]

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

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

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

項目背景

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

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

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

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

項目使用

生成 ID 分兩種方式:

  • 根據數據庫生成 ID。
  • 根據雪花算法生成 ID。

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

  • HTTP 方式
  • gRPC 方式

HTTP 方式

1、健康檢查:

  1. curl http://127.0.0.1:8080/ping 

2、獲取 ID:

獲取 tag 是 test 的 ID:

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

3、獲取雪花 ID:

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

gRPC 方式

1、獲取 ID:

  1. 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:

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

本地開發

  1. # Run MySQL 
  2. $ make compose-up 
  3.  
  4. # Run app with migrations 
  5. $ make run 

項目架構

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

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

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

借用官方的兩張圖:

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

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

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

  1. HTTP > usecase 
  2.        usecase > repository (Postgres) 
  3.        usecase < repository (Postgres) 
  4. HTTP < usecase 

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

項目地址:

  • https://github.com/yongxinz/id-maker

本文轉載自微信公眾號「AlwaysBeta」,可以通過以下二維碼關注。轉載本文請聯系AlwaysBeta公眾號。

 

責任編輯:武曉燕 來源: AlwaysBeta
相關推薦

2022-02-23 07:09:30

分布式ID雪花算法

2023-09-03 22:14:23

分布式ID

2021-06-28 14:45:07

分布式框架操作

2017-04-12 09:29:02

HiveMapReduceSpark

2024-10-31 13:51:58

2024-02-02 10:57:12

Java分布式算法

2020-07-21 11:35:21

開發技能代碼

2021-06-05 07:33:09

ID分布式架構

2023-01-12 17:46:37

分庫分表id如何生成

2019-09-03 09:22:08

數據庫Redis算法

2021-07-02 06:54:43

分布式環境ID

2023-12-13 09:35:52

算法分布式

2023-12-14 09:17:30

Jami開源

2023-12-12 07:13:39

雪花算法分布式ID

2017-07-01 16:02:39

分布式ID生成器

2019-12-18 10:24:10

數據庫PostgreSQL Oracle

2018-06-05 14:21:33

NewSQLMySQLRadonDB

2017-04-06 15:15:02

多場景分布式發號器

2022-09-28 07:58:06

MongoDB分布式ID

2021-04-27 10:17:42

數據庫工具技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产剧情一区 | 婷婷在线视频 | 91精品国产乱码久久久 | 久久久高清 | 国产精品毛片一区二区三区 | 性一爱一乱一交一视频 | 亚洲 中文 欧美 日韩 在线观看 | 久久日韩精品一区二区三区 | 欧美一区 | 久久久久久久国产精品影院 | 超碰美女在线 | 日韩视频在线播放 | 日韩av资源站 | 日本激情视频网 | 欧美日韩视频在线第一区 | 国产三级大片 | 中文字幕高清av | 国产日韩精品一区 | 欧美日韩亚洲国产综合 | 99成人| 免费a级毛片在线播放 | 午夜影院 | 日本成人在线播放 | 99久久久国产精品 | 国产成人精品免高潮在线观看 | 一区二区在线不卡 | 久久国产精品久久久久 | 日产精品久久久一区二区福利 | 久久的色| 久久99视频这里只有精品 | 日本成人中文字幕在线观看 | 激情国产 | 国产 日韩 欧美 在线 | 国产精品日韩欧美一区二区三区 | 亚洲免费一区 | av网站在线播放 | 欧美二区三区 | 国产精品久久久久久婷婷天堂 | 天堂综合 | 欧美mv日韩mv国产网站91进入 | 中文字幕一区在线观看视频 |