1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        高并發(fā)場(chǎng)景下秒殺系統(tǒng)的設(shè)計(jì)思路

        共 1499字,需瀏覽 3分鐘

         ·

        2020-09-16 10:45

        點(diǎn)擊上方「藍(lán)字」關(guān)注我們

        1. 概述

        秒殺系統(tǒng)之所以難做,是因?yàn)樵跇O短的時(shí)間內(nèi)涌入大量的請(qǐng)求,來同時(shí)訪問有限的服務(wù)資源,從而造成系統(tǒng)負(fù)載壓力大,甚至導(dǎo)致系統(tǒng)服務(wù)癱瘓以及宕機(jī)的可能。本文會(huì)介紹秒殺系統(tǒng)中存在的痛點(diǎn)以及針對(duì)這些點(diǎn)的優(yōu)化思路。

        2. 秒殺系統(tǒng)是什么鬼

        如:12306的春節(jié)搶票、各大電商搞的定時(shí)搶購(gòu)活動(dòng),如小米手機(jī)的在線搶購(gòu)等,搶過火車票的同學(xué)都知道在放票的那一瞬間可能1s都不到,票就被搶購(gòu)一空了。

        3. 秒殺系統(tǒng)的難點(diǎn)

        (1)短時(shí)間內(nèi)高并發(fā),系統(tǒng)負(fù)載壓力大

        (2)競(jìng)爭(zhēng)的資源有限,數(shù)據(jù)庫(kù)鎖沖突嚴(yán)重

        (3)避免對(duì)其他業(yè)務(wù)的影響

        4. 常見的互聯(lián)網(wǎng)分層架構(gòu)

        (1)客戶端層:手機(jī)或PC端操作的客戶端頁(yè)面,域名通過DNS解析路由到NG

        (2)反向代理層:一般通過NG作為反向代理,將客戶端請(qǐng)求均衡路由到后端站點(diǎn)服務(wù),NG也可以水平擴(kuò)展為多實(shí)例,且每個(gè)實(shí)例可單獨(dú)部署為主從的高可用方案。

        (3)站點(diǎn)層:站點(diǎn)層可以水平擴(kuò)展為多個(gè)實(shí)例部署,以此來均衡來自客戶端請(qǐng)求產(chǎn)生的高并發(fā)負(fù)載,多個(gè)web server之間的session信息可以集中存儲(chǔ)于分布式緩存服務(wù)(Redis,MemCache)中。

        (4)服務(wù)層:服務(wù)層也可水平擴(kuò)展為多個(gè)實(shí)例部署,即時(shí)下最火的微服務(wù)方式

        (5)數(shù)據(jù)庫(kù)層:數(shù)據(jù)庫(kù)層的常見部署方式,如讀寫分離,分庫(kù)分表等

        5. 秒殺系統(tǒng)的架構(gòu)原則

        (1)盡量將請(qǐng)求攔截在上游

        對(duì)于秒殺系統(tǒng)來說,系統(tǒng)的瓶頸一般在數(shù)據(jù)庫(kù)層,由于資源是有限的,如庫(kù)中共1萬張票,一瞬間并發(fā)進(jìn)來100萬的請(qǐng)求,那么有99萬都是無用的請(qǐng)求,所以為了更好的保護(hù)底層有限的數(shù)據(jù)庫(kù)資源,盡量將請(qǐng)求攔截在上游。

        (2)充分利用緩存

        緩存不但極大的縮短了數(shù)據(jù)的訪問效率,更重要的是承載了底層數(shù)據(jù)庫(kù)的訪問壓力,所以對(duì)于讀多寫少的業(yè)務(wù)場(chǎng)景充分利用好緩存

        (3)熱點(diǎn)隔離

        業(yè)務(wù)隔離:如12306的分時(shí)段售票,將熱點(diǎn)數(shù)據(jù)分散處理,來降低系統(tǒng)負(fù)載壓力

        系統(tǒng)隔離:實(shí)現(xiàn)系統(tǒng)的軟硬隔離,不光是實(shí)現(xiàn)軟件的隔離,還可以實(shí)現(xiàn)硬件的隔離,盡最大限度的減少秒殺帶來的高并發(fā)安全性問題。

        數(shù)據(jù)隔離:?jiǎn)⒂脝为?dú)的cache集群或數(shù)據(jù)庫(kù)來存放熱點(diǎn)數(shù)據(jù)

        6. 優(yōu)化方案

        (1)頁(yè)面端優(yōu)化,如:

        • 按鈕置灰:禁止用戶重復(fù)提交請(qǐng)求

        • 通過JS控制:在一定時(shí)間內(nèi)只能提交一次請(qǐng)求

        (2)web server層優(yōu)化,如:

        • 動(dòng)靜分離:如將幾乎不變的靜態(tài)頁(yè)面直接通過NG或CDN來路由訪問,只有動(dòng)態(tài)變換的頁(yè)面可以請(qǐng)求到web server端

        • 頁(yè)面緩存化

        • Nginx反向代理實(shí)現(xiàn)web server端的水平擴(kuò)展

        (3)后端service服務(wù)層優(yōu)化

        • 使用緩存(Redis、Memchched):將讀多寫少的業(yè)務(wù)數(shù)據(jù)放入緩存,如秒殺業(yè)務(wù)中可以將更新頻繁的商品庫(kù)存信息放入Redis緩存處理

        注:庫(kù)存信息放入Redis緩存的時(shí)候最好分為多份放入不同key的緩存中,如庫(kù)存為10萬可以分為10份分別放入不同key的緩存中,這樣將數(shù)據(jù)分散操作可以達(dá)到更高的讀寫性能。

        • 使用隊(duì)列處理:將請(qǐng)求放入隊(duì)列排隊(duì)處理,以可控的速度來訪問底層DB

        • 異步處理:如將秒殺成功的訂單通知信息通過消息隊(duì)列(RabbitMQ、Kafka)來異步處理

        (4)DB層優(yōu)化

        • 讀寫分離

        • 分表分庫(kù)

        • 數(shù)據(jù)庫(kù)集群

        來源:https://my.oschina.net/feinik/blog/1807902

        掃碼二維碼

        獲取更多精彩

        Java樂園

        有用!分享+在看?
        瀏覽 67
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            插插插插插插插插色域综合网 | 青娱乐伊人 | 奇米色色色 | 国产日韩理论片 | 日皮黄色三片 | 二本道一区二区三区免费视频 | 午夜色色网 | 五月天精品 | 午夜精品久久久久久久免费APP | 国产色婷婷视频在线观看 |