精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分布式ID生成的常見方案~都在這里啦!

云計算 分布式
我們日常開發中,經常需要使用到分布式ID。我們系統一般都是分布式部署的,一些分布式鎖、冪等、數據庫的唯一鍵,都需要分布式ID。

前言

大家好,我是田螺。

我們日常開發中,經常需要使用到分布式ID。我們系統一般都是分布式部署的,一些分布式鎖、冪等、數據庫的唯一鍵,都需要分布式ID。

今天田螺哥盤點一些常見的分布式唯一ID生成方案。

1. 數據庫自增ID

原理:利用數據庫自增字段(如MySQL的AUTO_INCREMENT)生成唯一ID

圖片圖片

優點:簡單易用、ID有序、索引效率高缺點:單點故障、擴展性差(分庫分表困難)
適用場景:單機或簡單主從架構系統

代碼示例

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_data VARCHAR(255)
);

2. UUID

  • 原理:基于MAC地址、時間戳、隨機數生成128位字符串
  • 優點:全局唯一、無需中心化服務
  • 缺點:無序導致索引效率低、存儲空間大(36字符)
  • 適用場景:日志跟蹤、非核心業務(如臨時會話)

我們的項目中,有些伙伴為了簡單方便,有時候會直接用它,如果業務性比較強的,就在它后綴拼接寫個性化標記(業務標記)進來~

代碼示例

import java.util.UUID;
String uuid = UUID.randomUUID().toString();

3. 雪花算法(Snowflake)

  • 原理:64位結構 = 時間戳(41位) + 機器ID(10位) + 序列號(12位)

    圖片圖片

  • 優點:高性能(單機每秒4萬+)、趨勢遞增29
  • 缺點:依賴時鐘同步(時鐘回撥會導致重復)
  • 適用場景:分布式高并發系統(如電商訂單)

其實,我們現在的系統,很多場景就是用雪花算法生成的,如流水號等等~

代碼示例

public class Snowflake {
    private long machineId;
    private long sequence = 0L;
    private long lastTimestamp = -1L;

    public synchronized long nextId() {
        long timestamp = System.currentTimeMillis();
        if (timestamp < lastTimestamp) {
            throw new RuntimeException("時鐘回撥!");
        }
        if (timestamp == lastTimestamp) {
            sequence = (sequence + 1) & 4095; // 12位序列號
            if (sequence == 0) timestamp = tilNextMillis(lastTimestamp);
        } else {
            sequence = 0L;
        }
        lastTimestamp = timestamp;
        return (timestamp << 22) | (machineId << 12) | sequence;
    }
}

4. 數據庫號段模式

  • 原理:批量獲取ID段(如一次取1000個),減少數據庫訪問
  • 優點:降低數據庫壓力、可用性高(緩存號段)、速度快
  • 缺點:在服務器重啟或故障轉移等情況下,可能會導致ID的生成出現不連續的情況。
  • 適用場景:中等并發業務(如用戶ID生成)

我們的一些客戶號,當前是用號段模式生成的,然后拼一些業務標記

表結構:

CREATE TABLE id_segment (
    biz_tag VARCHAR(50) PRIMARY KEY,
    max_id BIGINT NOT NULL,
    step INT NOT NULL,
    version INT NOT NULL
);

5. Redis分布式ID

  • 原理:利用INCR原子操作生成遞增ID

    圖片圖片

  • 優點:性能優于數據庫、天然有序、高性能、可擴展性強
  • 缺點:依賴Redis可用性
  • 適用場景:按日生成的流水號(如訂單號=日期+自增)

代碼示例:

Jedis jedis = new Jedis("redis-host");
Long orderId = jedis.incr("order:20240526");

6.百度的uid-generator

優點:避免頻繁生成、吞吐量提升至600萬/秒
適用場景:超大規模分布式系統

基于Twitter的Snowflake算法進行改進,增加了更多的配置和靈活性。

與原始的snowflake算法不同在于,uid-generator支持自定義時間戳、工作機器ID和 序列號 等各部分的位數,而且uid-generator中采用用戶自定義workId的生成策略。

代碼示例:

import com.baidu.fsg.uid.UidGenerator;  
import com.baidu.fsg.uid.impl.CachedUidGenerator;  
  
public class UidGeneratorDemo {  
  
    public static void main(String[] args) {  
        // 創建一個UidGenerator實例  
        UidGenerator uidGenerator = new CachedUidGenerator();  
  
        // 初始化,這里只是一個簡單的示例,實際使用時你可能需要根據你的業務場景進行更復雜的配置  
        // 例如,設置workerId、epoch等  
        // 注意:在多實例部署時,每個實例的workerId必須唯一  
        long workerId = 1L; // 示例ID,實際使用時需要保證每個實例的唯一性  
        long datacenterId = 1L; // 數據中心ID,示例  
        uidGenerator.init(workerId, datacenterId, null);  
  
        // 生成一個UID  
        long uid = uidGenerator.getUID();  
        System.out.println("Generated UID: " + uid);  
    }  
}


7. 基于Zookeeper的順序節點

利用Zookeeper的順序節點特性來生成全局唯一ID。

圖片圖片

優點:

  • 利用Zookeeper的集群特性保證高可用。
  • ID全局唯一。

缺點:

  • 需要依賴Zookeeper集群。
  • 可能會受到Zookeeper性能的限制。
  • 并發競爭較大不適合用Zookeeper

8. 數據庫集群模式

單庫的數據庫自增ID會存在單點問題,所以可以用數據庫集群模式,去解決這個問題。數據庫集群模式:通過多個數據庫實例設置不同的起始值和步長來生成全局唯一的ID。

圖片圖片


數據庫集群模式優點

  • 可以有效生成集群中的唯一ID。解決了單點的問題。
  • 降低ID生成數據庫操作的負載。

數據庫集群模式缺點

  • 需要獨立部署多個數據庫實例,成本高。
  • 后期不方便擴展

9. 美團(Leaf)

Leaf是美團點評開源的分布式ID生成系統,包含基于數據庫和基于Zookeeper的兩種實現方式。

以基于數據庫的自增ID生成策略為例(數據庫表結構):

CREATE TABLE leaf_alloc (  
    biz_tag VARCHAR(128) NOT NULL COMMENT '業務key',  
    max_id BIGINT(20) NOT NULL COMMENT '當前已分配的最大id',  
    step INT(11) NOT NULL COMMENT '每次id的增長步長',  
    PRIMARY KEY (biz_tag)  
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

Java 實現:

import java.sql.*;  
  
public class LeafIdGenerator {  
  
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimeznotallow=UTC";  
    private static final String USERNAME = "your_username";  
    private static final String PASSWORD = "your_password";  
  
    private static final String UPDATE_SQL = "UPDATE leaf_alloc SET max_id = max_id + ? WHERE biz_tag = ?";  
    private static final String SELECT_SQL = "SELECT max_id FROM leaf_alloc WHERE biz_tag = ? FOR UPDATE";  
  
    public synchronized long getId(String bizTag) throws SQLException {  
        Connection conn = null;  
        PreparedStatement updateStmt = null;  
        PreparedStatement selectStmt = null;  
        ResultSet rs = null;  
  
        try {  
            conn = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);  
            selectStmt = conn.prepareStatement(SELECT_SQL);  
            selectStmt.setString(1, bizTag);  
            rs = selectStmt.executeQuery();  
  
            if (rs.next()) {  
                long maxId = rs.getLong("max_id");  
                int step = 1000; // 假設步長為1000,你可以從數據庫中讀取這個值  
  
                // 假設這里只是簡單演示,不檢查是否超過max_id + step是否溢出  
                updateStmt = conn.prepareStatement(UPDATE_SQL);  
                updateStmt.setInt(1, step);  
                updateStmt.setString(2, bizTag);  
                updateStmt.executeUpdate();  
  
                // 返回ID區間中的一個ID,這里簡單返回maxId(實際應用中可能需要更復雜的策略)  
                return maxId;  
            } else {  
                // 如果沒有找到對應的bizTag,則需要初始化  
                // ... 初始化代碼省略 ...  
                throw new RuntimeException("BizTag not found: " + bizTag);  
            }  
        } finally {  
            // 關閉資源,省略了異常處理  
            if (rs != null) rs.close();  
            if (selectStmt != null) selectStmt.close();  
            if (updateStmt != null) updateStmt.close();  
            if (conn != null) conn.close();  
        }  
    }  
  
    public static void main(String[] args) {  
        LeafIdGenerator generator = new LeafIdGenerator();  
        try {  
            long id = generator.getId("test-biz-tag");  
            System.out.println("Generated ID: " + id);  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
}

優點

  • 結合了數據庫和Zookeeper的優點,提供了高可用和高性能的ID生成服務。缺點:
  • 就是時鐘回撥問題、復雜性高。

10. 滴滴(Tinyid)

Tinyid是滴滴開源的輕量級分布式ID生成系統,它是基于號段模式原理實現的與Leaf如出一轍,每個服務獲取一個號段(1000,2000]、(2000,3000]、(3000,4000]

圖片圖片

以下是一個簡化的Tinyid,服務端的偽代碼:

// 假設我們有一個ID生成器,這里用AtomicLong模擬  
import java.util.concurrent.atomic.AtomicLong;  
  
public class TinyidService {  
    private AtomicLong idGenerator = new AtomicLong(0);  
  
    // 模擬的ID生成方法  
    public synchronized long generateId() {  
        return idGenerator.incrementAndGet();  
    }  
  
    // 這里應該是RESTful API的實現,但為簡化起見,我們省略了HTTP部分  
    // 客戶端應該通過HTTP請求調用此方法  
    public long getIdOverHttp() {  
        return generateId();  
    }  
}

客戶端(Java示例)

import okhttp3.*;  
  
public class TinyidClient {  
    private static final String TINYID_SERVICE_URL = "http://localhost:8080/tinyid/generate";  
  
    public static void main(String[] args) {  
        OkHttpClient client = new OkHttpClient();  
  
        Request request = new Request.Builder()  
                .url(TINYID_SERVICE_URL)  
                .build();  
  
        client.newCall(request).enqueue(new Callback() {  
            @Override  
            public void onFailure(Call call, IOException e) {  
                e.printStackTrace();  
            }  
  
            @Override  
            public void onResponse(Call call, Response response) throws IOException {  
                if (!response.isSuccessful()) {  
                    throw new IOException("Unexpected code " + response);  
                } else {  
                    // 假設服務端返回的是純文本格式的ID  
                    String responseBody = response.body().string();  
                    long id = Long.parseLong(responseBody);  
                    System.out.println("Generated ID: " + id);  
                }  
            }  
        });  
    }  
}
  • 優缺點:簡單、輕量級,但性能可能不如其他方案。
責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2019-04-24 08:31:43

分布式限流kafka

2025-05-16 09:34:10

2024-07-02 11:16:21

2017-10-24 14:57:58

AI人工智能機器學習

2018-03-19 14:43:28

2018-04-26 16:15:02

數據庫MySQLMySQL 8.0

2021-07-01 09:00:00

安全數字化轉型滲透

2019-06-18 09:10:01

工具策略系統

2019-11-14 08:44:11

分布式系統策略

2021-12-09 08:16:40

JVM參數系統

2019-11-04 09:07:48

DevOps互聯網IT

2023-09-11 08:51:23

LinkedList雙向鏈表線程

2021-06-17 13:40:47

區塊鏈比特幣公有鏈

2021-10-06 16:21:32

類型對象Typescript

2023-12-11 21:59:01

時序分析深度學習自回歸模型

2009-06-24 14:10:22

2017-12-23 14:55:14

Java語言編程

2020-03-18 18:20:19

區塊鏈數字貨幣比特幣

2019-12-04 07:57:22

6G5G網絡

2022-06-16 07:31:15

MySQL服務器服務
點贊
收藏

51CTO技術棧公眾號

草莓视频成人appios| 日韩有码第一页| 99免费精品| 欧美成人精品福利| www国产精品内射老熟女| 精品无人乱码| 精品制服美女丁香| 97在线视频免费| 蜜桃av免费在线观看| 国产精品极品在线观看| 欧美三级在线播放| 国产主播自拍av| 日本成人在线播放| 91蜜桃婷婷狠狠久久综合9色| 国产欧美精品久久久| 99热在线观看免费精品| 91精品国产麻豆国产在线观看| 日韩av在线最新| 人人爽人人av| 蜜桃视频www网站在线观看| 国产精品拍天天在线| 精品一区二区三区免费毛片| 亚洲在线免费观看视频| 性高湖久久久久久久久| 久久伊人91精品综合网站| 亚洲精品在线视频免费观看| 亚洲国产91视频| 在线观看日韩高清av| 奇米影视亚洲色图| 国产黄色小视频在线| 国产午夜精品一区二区| 精品视频导航| 国精产品一品二品国精品69xx| 精品在线亚洲视频| 国产精品久久二区| 婷婷激情五月网| 在线精品观看| 欧美极品xxxx| 玖玖爱这里只有精品| 97在线精品| 日韩在线激情视频| 免费在线观看a视频| 亚洲日本三级| 日韩精品视频免费| www.88av| 校花撩起jk露出白色内裤国产精品 | 日本在线中文字幕一区二区三区| 午夜激情一区二区三区| 青草网在线观看| 免费大片黄在线观看视频网站| 国产精品热久久久久夜色精品三区 | 中文字幕成人在线视频| 国产一区影院| 欧美日韩国产高清一区| 奇米影视四色在线| 男人亚洲天堂| 91精品国产91久久久久久一区二区| 污视频网站观看| 国产精品亚洲四区在线观看| 91.com在线观看| www.超碰97.com| 国产成人视屏| 欧美成人免费网站| 天堂久久久久久| 国产精品一区二区av交换| 亚洲一区第一页| 丁香六月激情综合| 欧美1区2区| 69影院欧美专区视频| 9i精品福利一区二区三区| 日韩av一二三| 亚洲伊人一本大道中文字幕| www.国产视频| 久久综合色8888| 亚洲精品成人a8198a| 老司机午夜在线视频| 一区二区三区高清| 欧美高清中文字幕| 欧美电影h版| 欧美日本一区二区三区| 成年人三级黄色片| 亚洲精品影片| 亚洲视频欧洲视频| 国产真实乱在线更新| 亚洲乱码久久| 国产精品自拍偷拍| 亚洲欧美激情国产综合久久久| 国产视频91在线| 午夜av在线免费观看| 一区二区三区波多野结衣在线观看| 国产尤物av一区二区三区| 精品捆绑调教一区二区三区| 在线免费一区三区| 一二三级黄色片| 免费日韩一区二区三区| 亚洲九九九在线观看| 亚洲女人久久久| 一本一本久久| 国产日韩精品在线观看| 欧美一级在线免费观看| 国产女主播视频一区二区| av动漫在线播放| 色天使综合视频| 精品美女一区二区三区| 91精品国自产在线| 亚洲国产二区| 成人综合国产精品| 十九岁完整版在线观看好看云免费| 国产精品国产三级国产普通话三级| 亚洲精品蜜桃久久久久久| 欧洲av一区二区| 精品国产自在久精品国产| 亚洲无人区码一码二码三码的含义 | 66久久国产| 热久久免费视频精品| 精品国产区一区二| 欧美国产精品一区二区| 成人黄色av片| av日韩一区| 在线精品国产成人综合| 成人免费区一区二区三区| 精品亚洲国产成人av制服丝袜| 精品999在线观看| 在线你懂的视频| 欧美日韩高清一区二区| 无码人妻精品一区二区三应用大全| 欧美在线国产| 国产日韩中文在线| 国产天堂在线| 黑人巨大精品欧美一区二区三区| 久久久国产精品久久久| 久久中文字幕av| 国产精品视频地址| 精品电影在线| 色婷婷久久久亚洲一区二区三区| 在线黄色免费网站| 国产精品av久久久久久麻豆网| 成人黄在线观看| 九义人在线观看完整免费版电视剧| 欧美亚洲综合另类| 亚洲国产天堂av| 久久人人97超碰国产公开结果| 精品视频在线观看| 国产高潮在线| 日韩成人在线网站| 久久青青草视频| 久久久久久久久久久久久夜| 人妻精品无码一区二区三区| 欧美激情99| 欧美在线观看网址综合| 欧洲亚洲精品视频| 日本高清无吗v一区| 91中文字幕永久在线| 久久久久久黄| 五月天久久狠狠| 欧美成人xxxx| 欧美成人激情视频免费观看| 精品人妻伦一二三区久久| 夜夜嗨av一区二区三区中文字幕| 无码人妻一区二区三区免费n鬼沢| 欧美成熟视频| 国产在线精品日韩| 国偷自产一区二区免费视频| 国产午夜精品一区二区三区| 中文字幕免费在线看| 国产精品成人免费| 男人的天堂免费| 日韩视频在线一区二区三区| 久久久久久久有限公司| 精品欧美一区二区三区在线观看 | 欧美一区二区三区色| 欧美成人精品欧美一| 国产午夜福利片| 97精品视频在线观看自产线路二| 欧美日韩中文在线视频| 成人3d精品动漫精品一二三| 成人中文字幕在线观看| 久久电影网站| 亚洲欧洲日产国码av系列天堂| 这里只有精品国产| 亚洲精品国产第一综合99久久| 四虎精品一区二区| 日韩精品免费视频人成| 欧美aaa在线观看| 国产图片一区| 国产精品久久久久久久久久久新郎| 精品自拍一区| 亚洲美女性视频| 国产精品一区二区免费视频| 欧美日韩国产激情| 日本激情视频一区二区三区| 成人中文字幕合集| 天美星空大象mv在线观看视频| 欧美激情日韩| 日本在线播放不卡| 91久久精品无嫩草影院| 国产精品91久久久| 青青在线视频| 色天天综合狠狠色| 亚洲欧美日韩动漫| 91精品黄色片免费大全| 黄色在线视频网址| 亚洲一区二区三区在线看| 成人小视频免费看| 99久久精品国产观看| 欧美美女性视频| 亚洲免费综合| 337p亚洲精品色噜噜狠狠p| 欧美一区二区麻豆红桃视频| 国产伦视频一区二区三区| 永久免费观看精品视频| 奇米成人av国产一区二区三区| 羞羞的网站在线观看| 色婷婷综合成人av| 男人的天堂在线| 亚洲国产成人一区| 国产高清第一页| 精品视频色一区| 男人天堂av在线播放| 午夜视频一区在线观看| 男的操女的网站| 国产精品免费久久久久| 欧美 日韩 国产 成人 在线观看| 不卡的av电影| 免费观看一区二区三区| 国模无码大尺度一区二区三区| 天天影视综合色| 亚洲一区二区动漫| 免费看国产一级片| 好看的日韩av电影| 日本黄大片在线观看| 911久久香蕉国产线看观看| 亚洲一区尤物| 91综合网人人| 在线天堂一区av电影| 日韩久久久久| 亚洲午夜高清视频| 国产探花在线精品| 欧美婷婷久久| 国产不卡一二三区| 欧美日韩喷水| 国产传媒欧美日韩成人精品大片| 美国av一区二区三区| 亚洲人成网77777色在线播放 | 欧美顶级大胆免费视频| 午夜精品短视频| 欧美日一区二区| 新呦u视频一区二区| 日韩一区二区在线免费| 一区二区三区av| 香蕉精品视频在线观看| 国产麻豆电影在线观看| 欧美精品三区| 国产一线二线三线女| 99av国产精品欲麻豆| 一女被多男玩喷潮视频| 久久精品综合| 麻豆三级在线观看| 黄网站免费久久| 337p日本欧洲亚洲大胆张筱雨| 国产福利电影一区二区三区| jjzz黄色片| 92国产精品观看| 一区二区黄色片| 国产精品久久久久久亚洲毛片| 男人av资源站| 亚洲一区二区三区在线看| 在线观看 中文字幕| 日韩欧美在线播放| 夜夜躁狠狠躁日日躁av| 日韩一区二区在线看| 视频一区 中文字幕| 亚洲欧美日韩高清| 日韩精品毛片| 欧美激情国产日韩精品一区18| 久久男人av资源站| 国产精品成熟老女人| 欧美在线在线| 久久久久久久有限公司| 99久久精品费精品国产| www精品久久| 青青草精品视频| 色欲无码人妻久久精品| xnxx国产精品| 欧美激情精品久久久久久免费| 亚洲一区av在线| 中文字幕精品视频在线观看| 日韩手机在线导航| 欧美xxx.com| 欧美裸体xxxx极品少妇| 成人片免费看| 99国产超薄肉色丝袜交足的后果 | 亚洲人成在线电影| 菠萝蜜视频国产在线播放| 欧美性在线视频| 久久wwww| 神马影院我不卡| 日韩视频一区| 成人免费播放视频| 欧美激情中文字幕一区二区| 国产一级特黄a高潮片| 欧美在线播放高清精品| 殴美一级特黄aaaaaa| 日韩在线观看你懂的| 性欧美18一19sex性欧美| 99理论电影网| 国产精品毛片久久| 国产精品无码专区av在线播放| 激情六月婷婷久久| 亚洲一级黄色录像| 精品免费在线视频| 亚洲国产日韩在线观看| 色999日韩欧美国产| 在线看片福利| 国产精品视频在线免费观看 | 国产黄色高清视频| 国产亚洲a∨片在线观看| 国产无遮挡裸体视频在线观看| 91亚洲国产成人久久精品网站| 欧美精选视频在线观看| 久色视频在线播放| 成人av在线播放网址| 成年人一级黄色片| 欧美精品少妇一区二区三区| 川上优的av在线一区二区| 日本电影亚洲天堂| 欧美天堂影院| 国产午夜大地久久| 福利一区二区在线观看| 久久久久亚洲av无码专区体验| 欧美男生操女生| 色综合久久影院| 国产精品福利在线| 精品一区二区三区的国产在线观看| 久草资源站在线观看| 26uuu欧美| 久久艹免费视频| 日韩经典一区二区三区| 僵尸再翻生在线观看| 久久影院理伦片| 亚洲综合激情| 欧美18—19性高清hd4k| 在线观看日韩毛片| 永久免费av在线| 成人免费网站在线| 天天射综合网视频| 欧美性受xxxx黒人xyx性爽| 综合在线观看色| 国产乱人乱偷精品视频| 欧美成人激情视频| 91欧美极品| 日韩精品视频一区二区在线观看| www成人在线观看| 亚洲av无码不卡| 中文字幕亚洲情99在线| 91精品福利观看| 国产免费内射又粗又爽密桃视频| 国产91精品免费| 久热这里只有精品6| 亚洲色图狂野欧美| 九九久久国产| 大陆极品少妇内射aaaaaa| 成人福利视频在线| 国产日产精品一区二区三区| 国产午夜精品免费一区二区三区| a成人v在线| 成人性做爰片免费视频| 国产999精品久久| 亚洲AV无码成人精品区东京热| 国产亚洲人成a一在线v站| 日韩欧国产精品一区综合无码| 99热这里只有精品免费| 91一区一区三区| 中文字幕1区2区3区| 操日韩av在线电影| 欧美色图婷婷| 久久久久xxxx| 精品久久久久久久久国产字幕 | 欧美成人激情视频| 日韩极品少妇| 亚洲黄色av片| 欧美日韩午夜视频在线观看| wwwww在线观看免费视频| 999精品视频一区二区三区| 久久福利影视| 免费毛片在线播放免费| 亚洲精品中文字幕有码专区| 日韩一区中文| 欧美老熟妇喷水| 亚洲欧美日韩系列| 天堂成人在线| 亚洲最大成人在线| 久久亚洲一区| 久久久精品视频在线| 中文字幕国产亚洲2019| 大型av综合网站| 欧洲在线免费视频| 欧美性xxxxhd| 欧美一卡二卡| 亚洲一区影院|