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

100萬的并發,如何設計一個商品搜索系統?

開發 架構
假設場景:某電商平臺大促期間,需支撐每秒100萬次的商品搜索請求,要求響應時間≤200ms,同時應對商品數據量超10億條。假設給你來做系統設計,怎么做呢?

前言

今天我們來看一道比較有深度的面試題:百萬并發下,商品搜索系統,你如何設計呢?

假設場景:某電商平臺大促期間,需支撐每秒100萬次的商品搜索請求,要求響應時間≤200ms,同時應對商品數據量超10億條。假設給你來做系統設計,怎么做呢?

如果是我來回答面試官這道題的話,我會按照這些思路來跟面試官闡述:

  • 為什么不能用MySQL的llike?
  • 總體架構設計
  • 核心關鍵設計

1.為什么不能用mysql的like?

我們每次提到關鍵詞搜索,大家很容易就想到數據庫的like,比如:

SELECT * FROM products WHERE title LIKE '%智能手機%' LIMIT 10;

但是,顯然商品數據量超10億條,搜索不能用like。

  • LIKE '%keyword%' 無法利用索引,觸發全表掃描。10億數據時單次查詢可能耗時數秒。
  • 不支持分詞搜索(如"手機殼"無法拆分為"手機"和"殼"單獨匹配)
  • 分庫分表后跨庫LIKE查詢復雜度指數級上升

可以使用Elasticsearch ,但是我們是做系統設計,肯定不能直接回答面試官,說,用Elasticsearch呀,而是按照系統設計的思想(高可用 + 可擴展),說一整個鏈路。

2. 總體架構設計

  • 用戶層(前端 + CDN)
  • 接入層(Nginx )
  • 服務層(Search Gateway )
  • 檢索層(搜索引擎,如 Elasticsearch)
  • 數據層(商品數據服務 / DB / 緩存)

圖片圖片

2.1 用戶層(前端 + CDN)

  • 請求分發:通過CDN加速靜態資源(圖片/JS/CSS)
  • 瀏覽器緩存:利用LocalStorage緩存高頻搜索關鍵詞
  • 請求合并:合并相似搜索請求(如防抖機制)
// 前端防抖示例(減少無效請求)
let searchTimer;
function handleSearch(keyword) {
    clearTimeout(searchTimer);
    searchTimer = setTimeout(() => {
        fetch(`/api/search?q=${encodeURIComponent(keyword)}`);
    }, 300); // 300ms防抖
}

2.2 接入層(Nginx)

  • 流量管控:限流、熔斷、鑒權
  • 負載均衡:輪詢/一致性哈希分發請求
  • 協議轉換:HTTP/2 → HTTP/1.1內部通信

Nginx 關鍵配置

# 限流配置(每秒1000請求/ip)
limit_req_zone $binary_remote_addr znotallow=search_limit:10m rate=1000r/s;

location /api/search {
    limit_req znotallow=search_limit burst=200;
    proxy_pass http://search_cluster;
    
    # 緩存熱門請求結果(5秒)
    proxy_cache search_cache;
    proxy_cache_valid 200 5s;
}

2.3 服務層(Search Gateway)

  • 業務邏輯:請求參數校驗、結果格式化
  • 多級緩存:本地緩存 → Redis → Elasticsearch
  • 降級策略:超時返回兜底數據
// 搜索網關偽代碼
public class SearchGateway {
    @Cacheable(value = "localCache", key = "#keyword")
    public List<Product> search(String keyword) {
        // 1. 檢查Redis緩存
        String redisKey = "search:" + keyword.hashCode();
        List<Product> cached = redis.get(redisKey);
        if (cached != null) return cached;
        
        // 2. 查詢Elasticsearch
        List<Product> result = elasticsearch.search(buildQuery(keyword));
        
        // 3. 異步寫入緩存
        executor.submit(() -> {
            redis.setex(redisKey, 30, result); // 緩存30秒
        });
        
        return result;
    }
}

2.4 檢索層(Elasticsearch)

  • 索引構建:商品標題/類目/屬性倒排索引
  • 分布式查詢:分片并行計算
  • 相關性排序:BM25算法優化

索引設計demo:

PUT /products
{
"settings": {
    "number_of_shards": 40,
    "number_of_replicas": 1,
    "refresh_interval": "30s" // 降低寫入實時性要求
  },
"mappings": {
    "properties": {
      "title": { "type": "text", "analyzer": "ik_max_word" },
      "price": { "type": "double" },
      "sales": { "type": "integer" }
    }
  }
}

2.5 數據層(DB + 緩存)

  • 持久化存儲:MySQL分庫分表
  • 數據同步:Binlog → Canal → Elasticsearch
  • 冷熱分離:Redis緩存熱數據,HBase存歷史數據

分庫分表demo

-- 按商品ID分64個庫,每個庫分256表
CREATE TABLE products_%02d.t_product_%03d (
    id BIGINT PRIMARY KEY,
    title VARCHAR(255),
    price DECIMAL(10,2)
) ENGINE=InnoDB;
-- 分片路由算法:hash(product_id) % 64 → 分庫
-- hash(product_id) / 64 % 256 → 分表

3. 核心關鍵設計

3.1 分片與容量設計(水平擴展)

  • 使用 Elasticsearch,每個索引進行合理分片(Sharding)

每個分片大小控制在 20-50 GB,避免 OOM 和延遲增加

按業務維度(如商品類目、國家)分索引或路由分片

  • 分片副本(Replica)數設置,提升可用性

3.2 深度分頁性能優化

我們在使用mysql做查詢的時候,會遇到深分頁的問題,比如回表十萬次

圖片圖片

我們可以用標簽記錄法,來解決深分頁問題

其實Elasticsearch 也存在深分頁的問題,當用戶翻頁到幾百頁時,ES 會做全量掃描,性能陡降。

  • 避免傳統 from + size 深分頁
  • Search After(推薦):基于上一頁最后一個 sort_value 做游標分頁。(類似標簽記錄法思想)
  • Scroll API:適用于數據導出,不推薦用戶查詢
  • 或業務限制分頁范圍(如最多展示 100 頁)

3.3 避免緩存穿透設計

跟大家一起復習一下,什么是緩存穿透?

指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,進而給數據庫帶來壓力。

在百萬并發商品搜索系統時,我們要避免這個問題,可以用布隆過濾器,簡單流程圖如下:

圖片圖片

核心業務邏輯(代碼簡單demo):

@Service
public class SearchService {
    // 布隆過濾器(存儲所有有效關鍵詞)
    @Autowired
    private BloomFilter<String> searchBloomFilter;

    // Redis緩存操作
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public SearchResult search(String keyword) {
        // Step 1: 布隆過濾器校驗
        if (!searchBloomFilter.mightContain(normalizeKeyword(keyword))) {
            return SearchResult.EMPTY;
        }

        // Step 2: 查詢緩存
        String cacheKey = "search:" + keyword.hashCode();
        SearchResult cached = (SearchResult) redisTemplate.opsForValue().get(cacheKey);
        if (cached != null) return cached;

        // Step 3: 查詢Elasticsearch
        SearchResult result = elasticsearchClient.search(buildQuery(keyword));

        // Step 4: 更新緩存
        if (result.isEmpty()) {
            redisTemplate.opsForValue().set(cacheKey, SearchResult.EMPTY, 30, TimeUnit.SECONDS);
        } else {
            redisTemplate.opsForValue().set(cacheKey, result, 5, TimeUnit.MINUTES);
        }

        return result;
    }

    // 關鍵詞標準化處理(如去空格、轉小寫)
    private String normalizeKeyword(String keyword) {
        return keyword.trim().toLowerCase();
    }
}
這里有個點可能要注意一下哈,布隆過濾器需要初始化一下:
// 初始化所有有效關鍵詞到布隆過濾器
@PostConstruct
public void initBloomFilter() {
    List<String> allKeywords = productDao.getAllSearchKeywords(); // 獲取所有商品標題/標簽
    allKeywords.stream()
               .map(this::normalizeKeyword)
               .forEach(searchBloomFilter::put);
}

// 動態更新(新增商品時)
public void addProduct(Product product) {
    // ... 其他業務邏輯
    searchBloomFilter.put(normalizeKeyword(product.getTitle()));
    product.getTags().forEach(tag -> 
        searchBloomFilter.put(normalizeKeyword(tag))
    );
}

3.4 GC調優

既然是百萬并發的系統設計,少不了GC調優。

盡量降低 Full GC 頻率:

  • 使用 G1 或 ZGC
  • 調大堆內存(視機器資源)
  • 避免頻繁創建臨時對象,使用對象池(如 Query 對象)

在上線前,我們要進行壓力測試,然后調出最優最優JVM參數。JVM 最優參數配置不是一成不變的,根據實際壓測,得到的

壓力測試可以用loadrunner或者jemeter,進行高并發模擬測試。

JVM 參數配置demo

# elasticsearch/jvm.options

# 基礎配置
-Xms31g
-Xmx31g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

# G1調優參數
-XX:InitiatingHeapOccupancyPercent=35
-XX:G1ReservePercent=25
-XX:G1HeapReginotallow=4m

# 內存鎖防止Swap
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC

3.5 災備與高可用設計

高并發系統,少不了容災和高可用的設計要點,可以采取以下幾種方式:
  • 多 AZ 部署(分布在不同機房 / 可用區)
  • Elasticsearch 設置跨機房副本(replica + shard allocation awareness)
  • 服務注冊中心(如 Nacos)與服務熔斷、降級策略配合
  • 主從切換、故障自動轉移(Failover)

圖片圖片


責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2023-09-08 08:10:48

2023-09-08 08:22:30

2025-09-29 04:55:00

高并發關單系統算法

2019-08-01 08:36:51

緩存系統并發

2025-06-23 08:23:04

2021-04-28 08:52:22

高并發架構設高并發系統

2019-07-31 07:36:12

架構運維技術

2025-06-04 03:15:00

高并發短鏈系統

2018-09-18 09:38:11

RPC遠程調用網絡通信

2024-11-20 13:18:21

2024-04-24 10:38:22

2020-09-02 07:22:17

JavaScript插件框架

2024-08-27 12:49:20

2025-09-28 01:50:00

2013-08-14 10:48:23

實時計算流計算

2019-08-12 10:45:54

Flutter框架Native

2015-11-13 10:25:04

京東商品搜索架構

2015-07-28 14:35:40

2020-07-27 07:53:36

高并發流量系統

2025-04-29 02:00:00

高并發系統場景
點贊
收藏

51CTO技術棧公眾號

国产一区三区三区| sdde在线播放一区二区| 午夜一区二区三区视频| 久久精品五月婷婷| 性色av一区二区三区四区| 欧美大黑bbbbbbbbb在线| 91精品国产欧美一区二区成人 | 久久久久久久久亚洲| 中文字幕日韩三级片| 四虎国产精品永久在线国在线| 亚洲午夜电影网| 四虎一区二区| 成人久久久精品国产乱码一区二区 | 日日夜夜亚洲精品| 亚洲图片自拍偷拍| 亚洲国产一区二区精品视频| 亚洲黄色a级片| 日精品一区二区| 九九九热精品免费视频观看网站| 久久丫精品国产亚洲av不卡| 色综合视频一区二区三区44| 精品美女永久免费视频| 中国成人在线视频| 婷婷五月综合久久中文字幕| 国产一区二区调教| 国产激情久久久| 国产污污视频在线观看| 久久中文视频| 亚洲无亚洲人成网站77777| 99精品视频免费版的特色功能| 电影网一区二区| 亚洲国产一区二区三区| 亚洲精品白虎| 国产女主播在线写真| 粉嫩高潮美女一区二区三区| 国产在线日韩在线| 激情网站在线观看| 免费永久网站黄欧美| 久久久久久国产精品久久| 麻豆网址在线观看| 日韩一区欧美| 亚洲一级免费视频| 成人免费av片| 任我爽精品视频在线播放| 精品国产1区二区| 91欧美一区二区三区| 国产香蕉久久| 欧美亚日韩国产aⅴ精品中极品| 日韩久久一级片| 美女av在线免费看| 精品日本高清在线播放| 欧美一区二区中文字幕| 91豆花视频在线播放| 亚洲高清免费观看| 国产不卡一区二区视频| 手机在线免费看av| 亚洲制服丝袜一区| 国产一区二区片| 最新超碰在线| 亚洲综合色网站| 99er在线视频| 97人人在线视频| 欧美日韩美女在线| 日本精品一区二区三区四区| 在线能看的av网址| 色偷偷久久人人79超碰人人澡| 国产精品沙发午睡系列| 日韩欧美看国产| 欧美亚洲一区二区在线| www.色就是色| 91精品福利观看| 日韩免费视频线观看| 久久久久亚洲av成人网人人软件| 风间由美中文字幕在线看视频国产欧美| 91精品国产免费| 在线观看欧美一区二区| 精品久久ai| 亚洲精品电影在线| 99在线视频免费| 久久久久久久久久久妇女 | 毛片久久久久久| 欧美永久精品| 91av国产在线| 中文无码av一区二区三区| 狠狠色丁香婷综合久久| 国产精品对白刺激久久久| 亚洲欧洲国产综合| 国产精品视频在线看| 久久久久久久久影视| 深夜成人在线| 欧美精品自拍偷拍动漫精品| 师生出轨h灌满了1v1| 九九热爱视频精品视频| 久久躁狠狠躁夜夜爽| 日韩成年人视频| 免费看日韩精品| 97久久夜色精品国产九色 | 国产一区二区三区四区视频| 国产69精品久久99不卡| 欧美一级二级三级| 少妇视频在线| 欧美熟乱第一页| 成人做爰www看视频软件| 国产一区二区三区四区二区| 欧美精品免费播放| 欧美国产一级片| 国产a级毛片一区| 日韩性感在线| yellow在线观看网址| 欧美三级午夜理伦三级中视频| 美女搡bbb又爽又猛又黄www| 成人av国产| 国模视频一区二区三区| 96日本xxxxxⅹxxx17| 久久免费美女视频| www.av片| 亚洲国产高清在线观看| 在线电影av不卡网址| 久久精品美女视频| 国产在线一区二区综合免费视频| 国模一区二区三区私拍视频| 日本孕妇大胆孕交无码| 欧美日本国产一区| 色噜噜噜噜噜噜| 亚洲色诱最新| 国产精品xxx在线观看www| 日本天堂在线观看| 在线观看不卡视频| wwwwww日本| 亚洲中午字幕| 国产亚洲欧美另类一区二区三区 | 91av国产在线| 亚洲国产精品久久人人爱潘金莲| 亚洲欧美综合色| 亚洲欧洲日本精品| 国产剧情在线观看一区| 欧美诱惑福利视频| 男人天堂网在线视频| 一区二区三区高清不卡| 成人三级做爰av| 午夜日韩福利| 99精彩视频| 在线观看wwwxxxx| 日韩欧美不卡在线观看视频| 五月天婷婷色综合| 国产福利一区二区三区视频| 熟女视频一区二区三区| 少妇精品视频在线观看| 久久精品99久久久香蕉| 亚洲图片视频小说| 中文字幕制服丝袜成人av| 自拍偷拍一区二区三区四区| 99久久99久久精品国产片桃花| 国产精品美女av| 麻豆视频在线播放| 91精品久久久久久久99蜜桃| 成熟的女同志hd| 国产91色综合久久免费分享| 777av视频| 天天久久夜夜| 国产精品久久久久久久久| 在线视频三区| 日韩一区国产二区欧美三区| 欧美性猛交xxxxx少妇| 国产精品99久久久久久有的能看| 992tv快乐视频| 哺乳一区二区三区中文视频| 国内精品400部情侣激情| 视频在线不卡| 欧美午夜宅男影院| 翔田千里88av中文字幕| 成人av免费观看| 欧美日韩第二页| 国产精品99久久精品| 91网免费观看| 在线成人av观看| 精品国产区一区二区三区在线观看| 国产精品无码久久av| 亚洲午夜在线视频| 全黄一级裸体片| 另类的小说在线视频另类成人小视频在线 | 国产成人美女视频| 国产一区清纯| 色之综合天天综合色天天棕色| 电影中文字幕一区二区| 欧美激情视频免费观看| 欧洲一区av| 欧美一区二区三区婷婷月色| 成人精品在线看| 中文字幕一区二区三区四区 | 欧美日韩在线中文| 欧美独立站高清久久| 99re6热在线精品视频播放速度| 蜜桃视频m3u8在线观看| 久久久国产一区二区| 天堂√在线中文官网在线| 欧美片网站yy| youjizz在线视频| 亚洲欧美日韩国产另类专区| 色婷婷免费视频| 国产揄拍国内精品对白| 日韩中文字幕组| 欧美88av| 亚洲激情电影在线| 亚洲第一论坛sis| 亚洲bt欧美bt日本bt| 香蕉视频亚洲一级| 欧美福利视频在线观看| av在线播放网站| 日韩电影中文字幕在线| 精品黑人一区二区三区国语馆| 91久久免费观看| 日产精品久久久久| 亚洲人成在线播放网站岛国| 国产黄片一区二区三区| av在线这里只有精品| 日日干日日操日日射| 视频一区二区中文字幕| 黄色免费福利视频| 欧美日韩少妇| 久久最新免费视频| 成人羞羞在线观看网站| 久久综合狠狠综合久久综青草| 天堂va在线高清一区| 成人欧美一区二区三区黑人| 国产精品亚洲一区二区三区在线观看 | 鲁丝一区二区三区免费| 欧美在线在线| 91久久久亚洲精品| 久久人体av| 国产日本欧美一区二区三区| 先锋欧美三级| 国产精品狠色婷| 美女100%一区| 国产99视频精品免视看7| 国产在线精彩视频| 992tv成人免费影院| 国产91足控脚交在线观看| 久久久国产成人精品| 麻豆传媒视频在线| 久久精品国产视频| 麻豆网站在线免费观看| 久久精品免费电影| 拍真实国产伦偷精品| 色综合伊人色综合网站| 天堂中文8资源在线8| www.欧美免费| 美女av在线播放| 久久国产精品影视| 新版中文在线官网| 久久99久国产精品黄毛片入口| 在线观看a级片| 欧美大荫蒂xxx| 蜜桃麻豆av在线| 国产成人精品电影久久久| 国产私拍福利精品视频二区| 国产精品高潮粉嫩av| 青草综合视频| 成人在线观看网址| 国产精品18hdxxxⅹ在线| 九色综合婷婷综合| 欧美美乳视频| 亚洲欧美国产精品桃花| 亚洲国产精品成人| 波多野结衣av一区二区全免费观看| 伊人久久亚洲热| 欧美牲交a欧美牲交aⅴ免费下载| 日日摸夜夜添夜夜添亚洲女人| 永久免费的av网站| 国产精品123| 成人免费看aa片| 亚洲色欲色欲www在线观看| 欧美黄色免费观看| 色综合久久久久综合体 | 精品乱人伦小说| 香蕉国产在线视频| 在线观看日韩欧美| 怡红院在线播放| 日本精品久久久久久久| 亚洲久草在线| 精品欧美一区二区三区久久久| 日本伦理一区二区| 97se亚洲国产综合自在线观| 韩国一区二区三区美女美女秀| 久久99国产精品视频| 在线天堂一区av电影| 亚洲国产免费| 青青青在线视频免费观看| 国产一区二区在线观看免费| 一女三黑人理论片在线| 国产精品久久久久久久久果冻传媒| 久草福利资源在线观看| 日本韩国精品在线| www.桃色av嫩草.com| 亚洲人成在线免费观看| av网址在线播放| 国产不卡在线观看| 亚洲一区二区三区中文字幕在线观看| 久久99久久精品国产| 国产精品成人a在线观看| 无码专区aaaaaa免费视频| 捆绑调教美女网站视频一区| 国产黑丝在线观看| 一区在线播放视频| 欧美啪啪小视频| 日韩欧美一区电影| av在线电影播放| 欧美一区二区视频97| 我要色综合中文字幕| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲最大成人综合| 最近中文字幕在线免费观看| 亚洲国产一区二区三区在线观看| 香蕉视频免费在线播放| 欧美在线视频网| 国产精品极品国产中出| 综合国产精品久久久| 日韩专区在线视频| 懂色av粉嫩av蜜乳av| 亚洲成人av中文| 精品久久久中文字幕人妻| 日韩在线视频网站| 成人精品高清在线视频| 欧美日韩国产三区| 亚洲日本久久| 丰满岳乱妇一区二区| 夜夜操天天操亚洲| 国产内射老熟女aaaa∵| 波霸ol色综合久久| 欧美综合影院| 椎名由奈jux491在线播放 | 一区二区三区午夜探花| 69久久久久久| 国产欧美精品一区二区色综合朱莉| 欧美激情亚洲综合| 精品网站999www| 欧美aaaaa性bbbbb小妇| 好吊妞www.84com只有这里才有精品 | 99国产精品久| 精品成人av一区二区在线播放| 精品久久免费看| sm捆绑调教国产免费网站在线观看| 99久久精品免费看国产一区二区三区| 亚洲精品久久| 麻豆免费在线观看视频| 亚洲影视在线观看| 韩国av免费在线| 欧美在线播放视频| 欧美女优在线视频| 天天视频天天爽| 中文字幕在线不卡视频| 国产精品视频a| 欧美大秀在线观看| 久久电影在线| 日本黄网站免费| 国产人伦精品一区二区| 亚洲天堂网在线观看视频| 另类少妇人与禽zozz0性伦| 青草伊人久久| 国产手机免费视频| 91在线视频18| 亚洲无码精品一区二区三区| 最近2019年手机中文字幕 | 国产一区二区高清不卡| 亚洲色诱最新| 日本一道本视频| 欧美一级淫片007| av电影在线免费| 欧美日韩国产不卡在线看| 麻豆国产欧美一区二区三区| 国产1区2区3区4区| 亚洲精品久久久一区二区三区 | 成人激情视频免费在线| 午夜欧美精品| 欧美成人午夜精品免费| 欧美裸体bbwbbwbbw| 欧美日韩色网| 欧美一区视久久| 国产麻豆精品久久一二三| 日本一二三区视频| 伊人久久久久久久久久久| 激情视频亚洲| 中文字幕无码精品亚洲35| 国产精品日韩精品欧美在线| 亚洲av无码乱码国产精品| 国产91精品久| 88国产精品视频一区二区三区| 日本一级大毛片a一| 日本二三区不卡| 亚洲电影视频在线| 日本一区二区三区视频免费看| 国产一区二区三区免费播放 | 日韩成人dvd| 久久久久成人片免费观看蜜芽| 亚洲欧美自拍一区| 精品一区二区三区中文字幕视频| 看av免费毛片手机播放| 亚洲日本韩国一区| 国产精品秘入口| 国产一区二区三区高清视频|