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

100萬QPS短鏈系統如何設計?

開發 前端
為了從根本上改善這一痛點,本文將系統介紹如何基于 Spring Boot 3.4.5 + Spring Cloud Context 實現無需重啟即可動態更新配置文件的機制,覆蓋原理解析、實戰代碼、注意事項,助你提升至少 50% 的配置變更效率。

前言

凌晨兩點,監控大屏突然飆紅——短鏈服務QPS突破80萬! 數據庫連接池告急,Redis集群響應延遲突破500ms。

這不是演習,而是某電商平臺大促的真實場景。

當每秒百萬級請求涌向你的短鏈服務,你該如何設計系統?

今天這篇文章跟大家一起聊聊100萬QPS短鏈系統要如何設計?

希望對你會有所幫助。

最近建了一些工作內推群,各大城市都有,歡迎各位HR和找工作的小伙伴進群交流,群里目前已經收集了不少的工作內推崗位。

1.短鏈系統的核心挑戰

首先我們一起看看設計一個高并發的短鏈系統,會遇到哪些核心的挑戰。

如下圖所示:

圖片圖片

百萬QPS下的三大生死關:

  • ID生成瓶頸:傳統數據庫自增ID撐不住百萬并發
  • 跳轉性能黑洞:302重定向的TCP連接成本
  • 緩存雪崩風險:熱點短鏈瞬間擊穿Redis

2.短鏈生成

2.1 發號器的設計

發號器是短鏈系統的發動機。

方案對比:

方案

吞吐量

缺點

適用場景

UUID

5萬/s

長度長,無法排序

小型系統

Redis自增ID

8萬/s

依賴緩存持久化

中型系統

Snowflake

12萬/s

時鐘回撥問題

中大型系統

分段發號

50萬/s

需要預分配

超大型系統

分段發號器實現(Java版):

public class SegmentIDGen {
    privatefinal AtomicLong currentId = new AtomicLong(0);
    privatevolatilelong maxId;
    privatefinal ExecutorService loader = Executors.newSingleThreadExecutor();

    public void init() {
        loadSegment();
        loader.submit(this::daemonLoad);
    }

    private void loadSegment() {
        // 從DB獲取號段:SELECT max_id FROM alloc WHERE biz_tag='short_url'
        this.maxId = dbMaxId + 10000; // 每次取1萬個號
        currentId.set(dbMaxId);
    }

    private void daemonLoad() {
        while (currentId.get() > maxId * 0.8) {
            loadSegment(); // 號段使用80%時異步加載
        }
    }

    public long nextId() {
        if (currentId.get() >= maxId) thrownew BusyException();
        return currentId.incrementAndGet();
    }
}

關鍵優化

  • 雙Buffer異步加載(避免加載阻塞)
  • 監控號段使用率(動態調整步長)
  • 多實例分段隔離(biz_tag區分業務)

2.2 短鏈映射算法

短碼映射將長ID轉換成62進制的字符串。

轉換原理:

2000000000 = 2×62^4 + 17×62^3 + 35×62^2 + 10×62 + 8 
           = "Cdz9a"

原始ID: 2000000000,轉換為62進制的值為Cdz9a。

// Base62編碼(0-9a-zA-Z)
publicclass Base62Encoder {
    privatestaticfinal String BASE62 = 
        "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    
    public static String encode(long id) {
        StringBuilder sb = new StringBuilder();
        while (id > 0) {
            sb.append(BASE62.charAt((int)(id % 62)));
            id /= 62;
        }
        return sb.reverse().toString();
    }
    
    // 測試:生成8位短碼
    public static void main(String[] args) {
        long id = 1_000_000_000L;
        System.out.println(encode(id)); // 輸出:BFp3qQ
    }
}

編碼優勢:

  • 6位短碼可表示 62^6 ≈ 568億種組合
  • 8位短碼可表示 62^8 ≈ 218萬億種組合
  • 無意義字符串避免被猜測

3.存儲架構

3.1 數據存儲模型設計

圖片圖片

3.2 緩存層級設計

圖片圖片

3.3 緩存擊穿解決方案

// Redis緩存擊穿防護
public String getLongUrl(String shortCode) {
    // 1. 布隆過濾器預檢
    if (!bloomFilter.mightContain(shortCode)) {
        returnnull;
    }
    
    // 2. 查Redis
    String cacheKey = "url:" + shortCode;
    String longUrl = redis.get(cacheKey);
    if (longUrl != null) {
        return longUrl;
    }
    
    // 3. 獲取分布式鎖
    String lockKey = "lock:" + shortCode;
    if (redis.setnx(lockKey, "1", 10)) { // 10秒超時
        try {
            // 4. 二次檢查緩存
            longUrl = redis.get(cacheKey);
            if (longUrl != null) return longUrl;
            
            // 5. 查數據庫
            longUrl = db.queryLongUrl(shortCode);
            if (longUrl != null) {
                // 6. 回填Redis
                redis.setex(cacheKey, 3600, longUrl);
            }
            return longUrl;
        } finally {
            redis.del(lockKey);
        }
    } else {
        // 7. 等待重試
        Thread.sleep(50);
        return getLongUrl(shortCode);
    }
}

防護要點:

  • 布隆過濾器攔截非法短碼
  • 分布式鎖防止緩存擊穿
  • 雙重檢查減少DB壓力
  • 指數退避重試策略

4.跳轉優化

4.1 Nginx層直接跳轉

server {
    listen 80;
    server_name s.domain.com;

    location ~ ^/([a-zA-Z0-9]{6,8})$ {
        set $short_code $1;

        # 查詢Redis
        redis_pass redis_cluster;
        redis_query GET url:$short_code;

        # 命中則直接302跳轉
        if ($redis_value != "") {
            add_header Cache-Control "private, max-age=86400";
            return 302 $redis_value;
        }

        # 未命中轉發到后端
        proxy_pass http://backend;
    }
}

性能收益:

  • 跳轉延遲從100ms降至5ms
  • 節省后端服務器資源
  • 支持百萬級并發連接

4.2 連接池優化

連接池優化可以用Netty實現:

// Netty HTTP連接池配置
publicclass HttpConnectionPool {
    privatefinal EventLoopGroup group = new NioEventLoopGroup();
    privatefinal Bootstrap bootstrap = new Bootstrap();
    
    public HttpConnectionPool() {
        bootstrap.group(group)
            .channel(NioSocketChannel.class)
            .option(ChannelOption.SO_KEEPALIVE, true)
            .handler(new HttpClientInitializer());
    }
    
    public Channel getChannel(String host, int port) throws InterruptedException {
        return bootstrap.connect(host, port).sync().channel();
    }
    
    // 使用示例
    public void redirect(ChannelHandlerContext ctx, String longUrl) {
        Channel channel = getChannel("target.com", 80);
        channel.writeAndFlush(new DefaultFullHttpRequest(
            HttpVersion.HTTP_1_1, 
            HttpMethod.GET, 
            longUrl
        ));
        // 處理響應...
    }
}

優化效果:

  • TCP連接復用率提升10倍
  • 減少80%的TCP握手開銷
  • QPS承載能力提升3倍

5.百萬QPS整體架構

百萬QPS整體架構如下圖所示:

圖片圖片

核心組件解析:

1)接入層

  • CDN:緩存靜態資源
  • Nginx:處理302跳轉,本地緩存熱點數據

2)緩存層

  • Redis集群:緩存短鏈映射
  • 布隆過濾器:攔截非法請求

3)服務層

  • 短鏈生成:分布式ID服務
  • 映射查詢:高并發查詢服務

4)存儲層

  • MySQL:分庫分表存儲映射關系
  • TiKV:分布式KV存儲ID生成狀態

6.容災設計

6.1 限流熔斷策略

基于Sentinel的熔斷降級:

public class RedirectController {
    @GetMapping("/{shortCode}")
    @SentinelResource(
        value = "redirectService", 
        fallback = "fallbackRedirect",
        blockHandler = "blockRedirect"
    )
    public ResponseEntity redirect(@PathVariable String shortCode) {
        // 跳轉邏輯...
    }
    
    // 熔斷降級方法
    public ResponseEntity fallbackRedirect(String shortCode, Throwable ex) {
        return ResponseEntity.status(503)
            .body("服務暫時不可用");
    }
    
    // 限流處理方法
    public ResponseEntity blockRedirect(String shortCode, BlockException ex) {
        return ResponseEntity.status(429)
            .body("請求過于頻繁");
    }
}

6.2 多級降級方案

使用多級降級方案:

圖片圖片

保證服務的高可用。

6.3 數據分片策略

基于短碼分庫分表:

public int determineDbShard(String shortCode) {
    // 取短碼首字母的ASCII值
    int ascii = (int) shortCode.charAt(0);
    // 分16個庫
    return ascii % 16;
}

public int determineTableShard(String shortCode) {
    // 取短碼的CRC32值
    CRC32 crc32 = new CRC32();
    crc32.update(shortCode.getBytes());
    // 每庫1024張表
    return (int) (crc32.getValue() % 1024);
}

這里成了16個庫,每個庫有1024張表。

7.性能壓測數據對比

優化點

優化前QPS

優化后QPS

提升倍數

原始方案

12,000

-

1x

+Redis緩存

120,000

10x


+Nginx直跳

350,000

2.9x


+連接池優化

780,000

2.2x


+布隆過濾器

1,200,000

1.5x



壓測環境:32核64G服務器 × 10臺,千兆內網

總結

百萬QPS短鏈架構核心要點如圖所示:

圖片圖片

四大設計原則:

  • 無狀態設計:跳轉服務完全無狀態,支持無限擴展
  • 讀多寫少優化:將讀性能壓榨到極致
  • 分而治之:數據分片,流量分散
  • 柔性可用:寧可部分降級,不可全線崩潰

真正的架構藝術不在于復雜,而在于在百萬QPS洪流中,用最簡單的路徑解決問題。當你的系統能在流量風暴中優雅舞蹈,才是架構師的巔峰時刻。

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2025-09-28 01:50:00

2022-09-13 17:45:40

長網址短鏈系統

2024-11-12 08:13:09

2024-11-19 16:31:23

2022-10-09 14:15:42

短鏈設計

2022-09-13 08:01:58

短鏈服務哈希算法字符串

2023-08-10 10:13:35

轉轉短鏈平臺

2025-06-04 03:15:00

高并發短鏈系統

2023-07-26 13:29:43

高性能短鏈系統

2025-04-30 08:56:34

2025-09-15 10:05:00

后端URL短鏈

2024-07-22 11:48:42

2024-06-28 09:59:35

2019-07-29 14:40:26

架構存儲檢索

2019-05-05 09:28:59

架構數據查詢

2015-05-15 13:21:22

URL系統設計

2022-11-21 09:57:18

網關系統

2025-04-27 01:22:00

QPS高并發MySQL

2025-04-27 10:10:04

2022-02-09 20:50:46

短鏈系統場景
點贊
收藏

51CTO技術棧公眾號

欧美大片一区二区| 久久99精品波多结衣一区| 中文字幕一区二区三区人妻四季 | 久久成人免费视频| 日韩av资源在线| 亚洲乱色熟女一区二区三区| 国产精品极品在线观看| 黄一区二区三区| 亚洲一区av在线播放| 国产精品一线二线三线| 国产黄色av网站| 国产精品伦理久久久久久| 91极品视觉盛宴| 欧美日韩精品免费看| 天天操天天操天天操天天| 久久99偷拍| 亚洲va天堂va国产va久| 国产日产精品一区二区三区四区 | 亚洲精品久久久蜜桃| 国产精品美女久久久免费| 亲爱的老师9免费观看全集电视剧| 欧美区在线播放| 亚洲黄色小视频在线观看| 精品美女视频在线观看免费软件| 成人另类视频| 亚洲国产精品人人做人人爽| 成人免费在线看片| 国产成人精品av久久| 九九热hot精品视频在线播放 | 国产午夜福利100集发布| 午夜精品久久久久久久爽 | 国产淫片免费看| 天天色综合久久| 亚洲欧美日韩专区| 精品亚洲男同gayvideo网站 | 亚洲天堂一级片| 疯狂欧洲av久久成人av电影| www五月婷婷| 外国成人直播| 一本一道精品欧美中文字幕| 丰满诱人av在线播放| 国产在线精品一区二区三区不卡| 自拍偷拍亚洲在线| 性欧美在线视频| 中文字幕在线三区| 9l国产精品久久久久麻豆| 欧美一级视频免费在线观看| 成人午夜福利一区二区| 高清亚洲高清| 一级日本不卡的影视| 国内一区二区在线视频观看| 一区二区www| 欧美精品成人| 精品国产欧美一区二区| 日本不卡在线观看视频| 91超碰在线播放| 国产日韩v精品一区二区| 91久久国产婷婷一区二区| 麻豆成人在线视频| 九九视频免费观看视频精品| 欧美亚洲高清一区| 潘金莲一级淫片aaaaaa播放1| 欧美一级淫片免费视频魅影视频| 久久久久91| 欧美片一区二区三区| 草视频在线观看| 国产亚洲欧美日韩在线观看一区二区 | 成人免费在线一区二区三区| 亚洲黄色在线观看视频| 北条麻妃国产九九精品视频| 日本精品在线视频 | 亚洲一区二区成人在线观看| 久久99导航| 91国内免费在线视频| 一级黄色高清视频| 亚洲精品中文字幕| 亚洲女性喷水在线观看一区| 久久手机视频| 搞黄视频免费在线观看| 国产成人亚洲精品青草天美| 热草久综合在线| 国产成人a v| 尹人成人综合网| 久久韩国免费视频| 男人的天堂av网| 日韩欧美中文字幕电影| 91精品国产91热久久久做人人 | 亚洲高潮女人毛茸茸| 8x国产一区二区三区精品推荐| 在线观看视频欧美| 成年人视频网站免费观看| 日韩另类视频| 色天天综合色天天久久| 最新免费av网址| 操欧美女人视频| 亚洲性夜色噜噜噜7777| 无码黑人精品一区二区| 国产三级视频在线看| 国产黄色片在线| 黄色成人影院| 26uuu国产一区二区三区| 久久夜精品香蕉| 一区二区三区精品在线| 国产精品试看| 亚洲成av人影院| 极品美女扒开粉嫩小泬| 日本精品裸体写真集在线观看| 欧美午夜激情在线| 免费超爽大片黄| 91国内在线视频| 色婷婷狠狠综合| 欧美在线免费视频| 精品一区二区无码| 国产激情偷乱视频一区二区三区| 国产精品久久久久久久小唯西川| 国产男女猛烈无遮挡| 美女久久久精品| 韩国精品久久久999| 成人免费看片98| 欧美日韩精选| 国产精品久久久久久久久借妻| 色老头一区二区| 琪琪一区二区三区| 国产精品一区二区电影| 亚洲天堂999| 91亚洲午夜精品久久久久久| 精品一区二区不卡| 国产三级电影在线| 性感美女久久精品| 无码人妻少妇色欲av一区二区| 欧美日本三级| 狼人精品一区二区三区在线 | 91pron在线| 久久久精品视频在线| 日韩va亚洲va欧美va久久| 国产成人免费av在线| 粉嫩aⅴ一区二区三区四区五区| 中文字幕日韩av综合精品| 久草国产在线观看| 六月婷婷色综合| 日韩美女一区| 麻豆网站在线| 亚洲黄色小说网站| 国产wwwxx| 国产精品国产三级在线观看| 国产一区二区三区视频| 天天干天天干天天干天天| 懂色av一区二区夜夜嗨| av资源一区二区| 四虎影视精品成人| 国产精品久久久爽爽爽麻豆色哟哟| 制服丝袜综合日韩欧美| av在线小说| 亚洲第一精品福利| 人妻丰满熟妇av无码久久洗澡| 成人av二区| 久久久久中文字幕2018| 国产精品成人久久久| 国产高清亚洲一区| 黄色一级大片免费| 国产另类xxxxhd高清| 欧美一区二区精品久久911| 99热这里只有精品4| 99国产精品久久久久久久成人热| 国产精品国产三级国产专播精品人 | 91嫩草在线| 国产第一页在线| 亚洲精品国产精品久久清纯直播 | www男人的天堂| 亚洲一区中文在线| 日韩精品视频一区二区| 91日韩欧美| 日本亚洲精品在线观看| 国产福利在线看| 宅男在线国产精品| 人人妻人人澡人人爽| 久久99精品国产91久久来源| 久久久久久欧美精品色一二三四| 超碰国产一区| 亚洲成avwww人| 六月丁香激情综合| 亚洲国产精品v| 啊啊啊一区二区| 欧美日韩国产传媒| 欧美顶级毛片在线播放| 亚洲精品网址在线观看| 亚洲午夜无码久久久久| 综合亚洲深深色噜噜狠狠网站| 青青草原成人网| 色999国产精品| 国产精品h在线观看| 少妇av在线播放| 91传媒视频在线播放| 国产稀缺精品盗摄盗拍| 99视频在线精品| 久久久久久久高清| 亚洲综合电影一区二区三区| 一区二区三区四区视频在线| 欧美va在线观看| 色综合久综合久久综合久鬼88| 国产又粗又黄又爽的视频| 亚洲电影一级黄| 中文字幕观看av| 丁香五月缴情综合网| 日韩电影在线免费看| 粉嫩av一区二区三区免费观看| 麻豆蜜桃在线观看| 欧美唯美清纯偷拍| 麻豆changesxxx国产| 中文字幕av一区二区三区免费看| 中文字幕在线国产| 欧美午夜一区| 日韩电影天堂视频一区二区| 一本一道久久a久久| 国产精品久久久91| 免费一二一二在线视频| 久久香蕉频线观| 国产有码在线| 亚洲精品福利在线| 亚洲高清精品视频| 制服丝袜亚洲精品中文字幕| 色老头在线视频| 欧美日韩一二三四五区| 波多野结衣av在线免费观看| 国产精品日韩| 日韩精品一区二区免费| 精品精品国产毛片在线看| 国产在线久久久| 1区2区在线观看| 三级精品视频久久久久| 97人妻一区二区精品免费视频| 17c精品麻豆一区二区免费| 中文字幕一区二区三区人妻| 丁香桃色午夜亚洲一区二区三区| 久久久久久久999| 精品99一区二区| 91影视免费在线观看| 午夜不卡视频| 中文欧美字幕免费| 久久精品国产一区二区三| 午夜老司机精品| 素人啪啪色综合| 欧洲日韩成人av| 手机在线观看av| 91av在线免费观看视频| 9lporm自拍视频区在线| 欧美激情一二三| 国产精品186在线观看在线播放| 欧美巨乳美女视频| 亚洲淫性视频| 亚洲第一精品福利| 欧美 日韩 国产 成人 在线 91| 日韩亚洲欧美成人一区| 国产成人无码精品久在线观看 | 日韩精品福利| 欧美视频一区在线| 中文在线字幕av| 欧美精品粉嫩高潮一区二区| 日本一级黄色大片| 国产精品国产三级国产专播品爱网| 成人一区二区三区仙踪林| 久久最新视频| 大胆欧美熟妇xx| 欧美午夜免费影院| 女性女同性aⅴ免费观女性恋| 亚洲视频1区| 欧美伦理视频在线观看| 亚洲黄色影院| 色综合电影网| 91精品人妻一区二区三区| 三区四区在线观看| 亚洲熟妇无码久久精品| bl视频在线免费观看| 91成人看片| 亚洲欧美日韩精品久久久久| 天天综合天天添夜夜添狠狠添| 免费高清视频精品| 91视频福利网| 美洲天堂一区二卡三卡四卡视频| 自拍偷拍21p| 香蕉亚洲视频| 亚洲一级免费观看| 国产成人av电影免费在线观看| 天天躁日日躁狠狠躁av麻豆男男 | 久久国产精品亚洲| 国产特黄在线| 久久中文字幕在线视频| 波多野结衣在线高清| 热re99久久精品国产66热| 国产精品成人3p一区二区三区| 精品国产一区二区三区四区vr | 在线免费观看黄色| 亚洲国产精品va在线看黑人动漫 | 91免费小视频| 中文字幕无码日韩专区免费| 亚洲大型综合色站| 中文字幕在线视频第一页| 精品日韩99亚洲| 国产高清免费观看| 亚洲欧美另类在线观看| 三级av在线播放| 蜜月aⅴ免费一区二区三区| 芒果视频成人app| 成人久久18免费网站漫画| 精品高清久久| 免费不卡av在线| 国内精品在线播放| 国产小视频自拍| 午夜一区二区三区视频| 97精品人妻一区二区三区在线| 日韩h在线观看| 欧美在线观看在线观看| 欧美成人精品在线视频| 澳门av一区二区三区| 国产精品视频免费观看| 天天综合亚洲| 精品久久久久久久无码| 26uuu久久天堂性欧美| 久久国产免费观看| 91精品国产91久久久久久一区二区 | 这里只有精品国产| 日韩精品在线观看一区二区| 日韩经典av| 99re在线播放| 欧美在线1区| 黄页免费在线观看视频| 激情久久久久久久久久久久久久久久| 亚洲第一成人网站| 精品动漫一区二区| 三级网站在线播放| 亚洲精品理论电影| 国产精品69xx| 国产福利久久| 国产精品一级伦理| 亚洲高清不卡在线| 国产wwwxxx| 美女精品久久久| 国产精品日本一区二区三区在线 | 成人精品视频99在线观看免费 | 精品国产免费人成电影在线观...| 天天色综合色| 国产精欧美一区二区三区白种人| 欧美激情一区二区三区全黄 | 日韩中文在线电影| 免费看污污网站| 中文字幕av资源一区| 怡红院男人天堂| 日韩中文理论片| 一级欧美视频| 激情久久av| 国产欧美在线| 中文字幕一区二区三区人妻| 欧美日韩国产麻豆| 欧美女v视频| 不卡av电影院| 精品国产三级| 精品无码av无码免费专区| 久久精品国产精品青草| 国产免费一区二区三区四区| 在线成人高清不卡| 最新av在线播放| 狠狠干一区二区| 久久激情一区| 日本黄区免费视频观看| 制服丝袜av成人在线看| 成人超碰在线| 精品久久久久久综合日本| 久久综合网络一区二区| 亚洲图片第一页| 日韩一级在线观看| 麻豆国产在线| 一区二区三区四区国产| 国产精品中文字幕一区二区三区| 巨胸大乳www视频免费观看| 91传媒视频在线播放| 麻豆视频在线观看免费网站| 999热视频在线观看| 一区二区三区高清视频在线观看| 一级黄色片大全| 欧美福利视频一区| 黑森林国产精品av| 亚洲一区久久久| 国产大屁股喷水视频在线观看| 日本午夜免费一区二区| 亚洲免费观看视频| 久久美女福利视频| 新片速递亚洲合集欧美合集| 精品久久久久久久久久久久久| 免费黄色a级片| 天天综合天天综合色| 国产一二三在线观看| 成人网页在线免费观看| 中文亚洲欧美| 午夜三级在线观看| 亚洲黄色www网站| 日韩城人网站| 欧美牲交a欧美牲交| 麻豆精品久久久| 国产一级在线观看视频| 一本色道久久88精品综合|