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

Springboot整合百度開源分布式ID生成器UIDGenerator

開發 前端 分布式
UidGenerator是Java實現的, 基于Snowflake算法的唯一ID生成器。UidGenerator以組件形式工作在應用項目中, 支持自定義workerId位數和初始化策略, 從而適用于docker等虛擬化環境下實例自動重啟、漂移等場景。

[[411081]]

環境:sprinboot2.3.12.RELEASE + uid-generator1.0.0

簡介

UidGenerator是Java實現的, 基于Snowflake算法的唯一ID生成器。UidGenerator以組件形式工作在應用項目中, 支持自定義workerId位數和初始化策略, 從而適用于docker等虛擬化環境下實例自動重啟、漂移等場景。 在實現上, UidGenerator通過借用未來時間來解決sequence天然存在的并發限制; 采用RingBuffer來緩存已生成的UID, 并行化UID的生產和消費, 同時對CacheLine補齊,避免了由RingBuffer帶來的硬件級「偽共享」問題. 最終單機QPS可達600萬。

依賴版本:Java8及以上版本, MySQL(內置WorkerID分配器, 啟動階段通過DB進行分配; 如自定義實現, 則DB非必選依賴)

Snowflake算法

Springboot整合百度開源分布式ID生成器UIDGenerator

Snowflake算法描述:指定機器 & 同一時刻 & 某一并發序列,是唯一的。據此可生成一個64 bits的唯一ID(long)。默認采用上圖字節分配方式:

  • sign(1bit) 固定1bit符號標識,即生成的UID為正數。
  • delta seconds (28 bits) 當前時間,相對于時間基點"2016-05-20"的增量值,單位:秒,最多可支持約8.7年
  • worker id (22 bits) 機器id,最多可支持約420w次機器啟動。內置實現為在啟動時由數據庫分配,默認分配策略為用后即棄,后續可提供復用策略。
  • sequence (13 bits) 每秒下的并發序列,13 bits可支持每秒8192個并發。

以上參數均可通過Spring進行自定義

CachedUidGenerator

RingBuffer環形數組,數組每個元素成為一個slot。RingBuffer容量,默認為Snowflake算法中sequence最大值,且為2^N。可通過boostPower配置進行擴容,以提高RingBuffer 讀寫吞吐量。

Tail指針、Cursor指針用于環形數組上讀寫slot:

  • Tail指針 表示Producer生產的最大序號(此序號從0開始,持續遞增)。Tail不能超過Cursor,即生產者不能覆蓋未消費的slot。當Tail已趕上curosr,此時可通過rejectedPutBufferHandler指定PutRejectPolicy
  • Cursor指針 表示Consumer消費到的最小序號(序號序列與Producer序列相同)。Cursor不能超過Tail,即不能消費未生產的slot。當Cursor已趕上tail,此時可通過rejectedTakeBufferHandler指定TakeRejectPolicy
Springboot整合百度開源分布式ID生成器UIDGenerator

 CachedUidGenerator采用了雙RingBuffer,Uid-RingBuffer用于存儲Uid、Flag-RingBuffer用于存儲Uid狀態(是否可填充、是否可消費)

由于數組元素在內存中是連續分配的,可最大程度利用CPU cache以提升性能。但同時會帶來「偽共享」FalseSharing問題,為此在Tail、Cursor指針、Flag-RingBuffer中采用了CacheLine 補齊方式。

Springboot整合百度開源分布式ID生成器UIDGenerator

RingBuffer填充時機

  • 初始化預填充 RingBuffer初始化時,預先填充滿整個RingBuffer.
  • 即時填充 Take消費時,即時檢查剩余可用slot量(tail - cursor),如小于設定閾值,則補全空閑slots。閾值可通過paddingFactor來進行配置,請參考Quick Start中CachedUidGenerator配置
  • 周期填充 通過Schedule線程,定時補全空閑slots。可通過scheduleInterval配置,以應用定時填充功能,并指定Schedule時間間隔

以上為百度的官方介紹,接下來我們將其整合到Springboot項目中

UIDGenerator下載

在下面地址下載uid-generator

Springboot整合百度開源分布式ID生成器UIDGenerator

UIDGenerator環境配置

創建表

  1. DROP TABLE IF EXISTS WORKER_NODE; 
  2. CREATE TABLE WORKER_NODE 
  3.   ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id'
  4.   HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name'
  5.   PORT VARCHAR(64) NOT NULL COMMENT 'port'
  6.   TYPE INT NOT NULL COMMENT 'node type: ACTUAL or CONTAINER'
  7.   LAUNCH_DATE DATE NOT NULL COMMENT 'launch date'
  8.   MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time'
  9.   CREATED TIMESTAMP NOT NULL COMMENT 'created time'
  10.   PRIMARY KEY(ID) 
  11. )COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB; 

 將其項目中的mapper.xml文件copy到自己項目中,對應的WorkerNodeEntity,WorkerNodeDAO,

DisposableWorkerIdAssigner都copy到自己的項目中。

DisposableWorkerIdAssigner主要是修改注入的dao,因為這里我們需要修改默認的dao相關的配置。

項目配置

依賴

  1. <dependency> 
  2.   <groupId>mysql</groupId> 
  3.   <artifactId>mysql-connector-java</artifactId> 
  4.   <scope>runtime</scope> 
  5. </dependency> 
  6. <dependency> 
  7.   <groupId>org.mybatis.spring.boot</groupId> 
  8.   <artifactId>mybatis-spring-boot-starter</artifactId> 
  9.   <version>2.1.4</version> 
  10. </dependency> 
  11. <dependency> 
  12.   <groupId>com.github.pagehelper</groupId> 
  13.   <artifactId>pagehelper-spring-boot-starter</artifactId> 
  14.   <version>1.3.0</version> 
  15. </dependency> 

mybatis配置

  1. pagehelper: 
  2.   helperDialect: mysql 
  3.   reasonable: true 
  4.   pageSizeZero: true 
  5.   offsetAsPageNum: true 
  6.   rowBoundsWithCount: true 
  7. --- 
  8. mybatis: 
  9.   type-aliases-package: com.pack.domain 
  10.   mapper-locations: 
  11.   - classpath:/mappers/*.xml 
  12.   configuration: 
  13.     lazy-loading-enabled: false 
  14.     aggressive-lazy-loading: false  

 mapper文件中的namespace及對應domain修改為自己路徑下的。

配置UIDGenerator

  1. @Configuration 
  2. public class UIDConfig { 
  3.      
  4.     @Bean 
  5.     public DefaultUidGenerator defaultUidGenerator(DisposableWorkerIdAssigner disposableWorkerIdAssigner) { 
  6.         DefaultUidGenerator defaultUidGenerator = new DefaultUidGenerator() ; 
  7.         defaultUidGenerator.setWorkerIdAssigner(disposableWorkerIdAssigner) ; 
  8.         defaultUidGenerator.setTimeBits(29) ; 
  9.         defaultUidGenerator.setWorkerBits(21) ; 
  10.         defaultUidGenerator.setSeqBits(13) ; 
  11.         defaultUidGenerator.setEpochStr("2021-01-01") ; 
  12.         return defaultUidGenerator ; 
  13.     } 
  14.  

 注意這里的

DisposableWorkerIdAssigner是copy到自己項目中的,不是百度提供的。

  1. @Component 
  2. public class DisposableWorkerIdAssigner implements WorkerIdAssigner { 
  3.   @Resource 
  4.   private WorkerNodeMapper workerNodeDAO; 
  5.   // other code 

 到此所有的都配置完成了。

測試

  1. @Resource 
  2. private DefaultUidGenerator uidGenerator ; 
  3.      
  4. @Test 
  5. public void testGeneratorId() { 
  6.   for (int i = 0; i < 10; i++) { 
  7.     System.out.println(uidGenerator.getUID()) ; 
  8.   } 
Springboot整合百度開源分布式ID生成器UIDGenerator
Springboot整合百度開源分布式ID生成器UIDGenerator

完畢!!!

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2017-07-01 16:02:39

分布式ID生成器

2019-12-27 10:00:34

開源技術 軟件

2024-10-07 08:52:59

分布式系統分布式 IDID

2020-11-04 14:40:26

分布式Tinyid數據庫

2025-03-11 08:50:00

CASID分布式

2023-02-22 14:04:54

2022-01-10 11:58:51

SpringBootPulsar分布式

2019-09-05 13:06:08

雪花算法分布式ID

2011-08-12 10:58:51

Hadoop

2023-01-13 07:39:07

2024-10-29 08:30:31

2016-11-29 09:12:21

數據庫分布式ID

2024-12-04 09:36:37

2021-07-23 11:24:54

Create Inc開源G代碼生成器

2024-08-19 00:00:00

表單生成器開發開源

2022-02-23 07:09:30

分布式ID雪花算法

2022-06-27 08:21:05

Seata分布式事務微服務

2011-10-28 16:19:21

百度搜索

2013-10-12 10:25:20

百度云 Cooliris

2016-11-08 21:18:22

百度
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级h片| 91在线视频观看免费 | 性网址| 久久精品免费观看 | 国产精品美女一区二区 | 岛国在线免费观看 | 国产精品一区二区av | 成人福利电影 | 久久久精品视频一区二区三区 | 天天躁人人躁人人躁狂躁 | 黄片毛片免费观看 | 成人在线免费网站 | 久久成人国产精品 | 99精品免费久久久久久日本 | 欧美日韩中文在线 | 羞羞视频网站免费看 | 99福利视频 | 欧美日韩视频在线第一区 | 成人精品一区二区三区 | 东方伊人免费在线观看 | 欧美日韩在线一区二区三区 | 国产美女在线播放 | 一区二区三区av | 中文二区 | 欧美一级特黄aaa大片在线观看 | 最近免费日本视频在线 | 欧美日韩综合视频 | 亚洲国产中文字幕 | 日本亚洲精品成人欧美一区 | 久久精品青青大伊人av | 成人在线观看网址 | 国产精品久久777777 | 国产精品一区二区三区在线播放 | 成人深夜福利网站 | 青青草av| 欧美在线看片 | 日韩视频精品在线 | 亚洲中午字幕 | 欧美综合一区二区三区 | 久久精品| 国产精品久久久亚洲 |