久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

這一次,徹底弄懂“秒殺系統”

2021-02-02    分類: 網站建設

說到“秒殺”,恐怕大多數人想到的就是“雙 11”,“促銷”,“買買買”等火爆的場面吧。


圖片來自 Pexels

大家為了打折商品蜂擁而至,造成

技術隔離架構圖

前面有了準備工作,那么從技術上需要有以下幾個方面的考慮:

  • 客戶端,前端秒殺頁面使用專門的頁面,這些頁面包括靜態的 HTML 和動態的 JS,他們都需要在
  • 秒殺系統前端設計簡圖

    代理層設計

    說完了秒殺系統的前端設計,請求自然地來到了代理層。由于用戶的請求量大,我們需要用負載均衡加上服務器集群,來面對如此空前的壓力。

    代理層三大功能簡圖

    在這一層是可以做緩存,過濾和限流的:

    • 緩存,以 Nginx 為例,它可以緩存用戶的信息。假設用戶信息的修改沒有那么頻繁,即使有類似的修改也可以通過更新服務來刷新。總比從服務器上獲取效率要高得多。
    • 過濾,既然緩存了用戶信息,這里就可以過濾掉一些不滿足條件的用戶。注意,這里的用戶信息的過濾和緩存只是一個例子。

    主要想表達的意思是,可以將一些變化不頻繁的數據,提到代理層來緩存,提高響應的效率。

    同時,還可以根據風控系統返回的信息,過濾一些疑似機器人或者惡意請求。例如:從固定 IP 過來的,頻率過高的請求。最重要的就是在這一層,可以識別來自秒殺系統的請求。

    如果是帶有秒殺系統的參數,就要把請求路由到秒殺系統的服務器集群。這樣才能和正常的業務系統分割開來。

    • 限流,每個服務器集群能夠承受的壓力都是有限的。代理層可以根據服務器集群能夠承受的大壓力,設置流量的閥值。

    閥值的設置可以是動態調整的。例如:集群服務器中有 10 個服務器,其中一臺由于壓力過大掛掉了。

    此時就需要調整代理層的流量閥值,將能夠處理的請求流量減少,保護后端的應用服務器。

    當服務器恢復以后,又可以將閥值調回原位。可以通過 Nginx+Lua 合作完成,Lua 從服務注冊中心讀取服務健康狀態,動態調整流量。

    應用層設計

    “秒殺系統”秒殺的是什么?無非是商品。對于系統來說就是商品的庫存,購買的商品一旦超過了庫存就不能再賣了。

    防止超賣

    超過了庫存還可以賣給用戶,這就是“超賣”,也是系統設計需要避免的。為了承受大流量的訪問,我們用了水平擴展的服務,但是對于他們消費的資源“庫存”來說,卻只有一個。

    為了提高效率,會將這個庫存信息放到緩存中。以流行的 Redis 為例,用它存放庫存信息,由多個線程來訪問就會出現資源爭奪的情況。也就是分布式程序爭奪唯一資源,為了解決這個問題我們需要實現分布式鎖。

    假設這里有多個應用響應用戶的訂單請求,他們同時會去訪問 Redis 中存放的庫存信息,每接受用戶一次請求,都會從 Redis 的庫存中減去 1 個商品庫存量。

    當任何一個進程訪問 Redis 中的庫存資源時,其他進程是不能訪問的,所以這里需要考慮鎖的情況(樂觀,悲觀)。

    Redis 緩存承載庫存變量

    如果鎖長期沒有釋放,需要考慮鎖的過期時間,需要設置兩個超時時間:

    • 資源本身的超時時間,一旦資源被使用一段時間還沒有被釋放,Redis 會自動釋放掉該資源給其他服務使用。
    • 服務獲取資源的超時時間,一旦一個服務獲取資源一段時間后,不管該服務是否處理完這個資源,都需要釋放該資源給其他服務使用。

    訂單處理流程

    這里的“扣減服務”完成了最簡單的扣減庫存工作,并沒有和其他項目服務打交道,更沒有訪問數據庫。

    訂單流程示意圖

    后面的流程相對比較復雜,我們先看圖,根據圖示來講解:

    • 首先,扣減服務作為下單流程的入口,會先對商品的庫存做扣減。同樣它會檢查商品是否還有庫存?
    • 由于訂單對應的操作步驟比較多,為了讓流量變得平滑,這里使用隊列存放每個訂單請求,等待訂單處理服務完成具體業務。
    • 訂單處理服務實現多線程,或者水平擴展的服務陣列,它們不斷監聽隊列中的消息。一旦發現有新訂單請求,就取出訂單進行后續處理。

    注意,這里可以加入類似 ZooKeeper 這樣的服務調度來幫助,協調服務調度和任務分配。

    • 訂單處理服務,處理完訂單以后會把結果寫到數據庫。寫數據庫是 IO 操作,耗時長。
    • 所以,在寫數據庫的同時,會把結果先寫入緩存中,這樣用戶是可以第一時間查詢自己是否下單成功了。
    • 結果寫入數據庫,這個操作有可能成功也有可能失敗。
    • 為了保證數據的最終一致性,我們用訂單結果同步的服務不斷的對比,緩存和數據庫中的訂單結果信息。

    一旦發現不一致,會去做重試操作。如果重試依舊不成功,會重寫信息到緩存,讓用戶知道失敗原因。

    • 用戶下單以后,焦慮地刷新頁面查看下單的結果,實際上是讀到的緩存上的下單結果信息。

    雖然,這個信息和最終結果有偏差,但是在秒殺的場景,要求高性能是前提,結果的一致性,可以后期補償。

    數據庫設計

    講完了秒殺的處理流程,來談談數據庫設計要注意的點。

    數據估算

    前面說了秒殺場景需要注意隔離,這里的隔離包括“業務隔離”。就是說我們在秒殺之前,需要通過業務的手段,例如:熱場活動,問卷調查,歷史數據分析。通過他們去估算這次秒殺可能需要存儲的數據量。

    這里有兩部分的數據需要考慮:

    • 業務數據
    • 日志數據

    前者不言而喻是給業務系統用的。后者,是用來分析和后續處理問題訂單用的,秒殺完畢以后還可以用來復盤。

    分表分庫

    對于這些數據的存放,需要分情況討論,例如,MySQL 單表推薦的存儲量是 500W 條記錄(經驗數字)。

    如果估算的時候超過了這個數據,建議做分表。如果服務的連接數較多,建議進行分庫的操作。

    數據隔離

    由于大量的數據操作是插入,有少部分的修改操作。如果使用關系型數據來存儲,建議用專門的表來存放,不建議使用業務系統正在使用的表。

    這個開頭提到了,數據隔離是必須的,一旦秒殺系統掛了,不會影響到正常業務系統,這個風險意識要有。表的設計除了 ID 以外,最好不要設置其他主鍵,保證能夠快速地插入。

    數據合并

    由于是用的專用表存儲,在秒殺活動完畢以后,需要將其和現有的數據做合并。其實,交易已經完成,合并的目的也就是查詢。

    這個合并需要根據具體情況來分析,如果對于那些“只讀”的數據,對于做了讀寫分離的公司,可以導入到專門負責讀的數據庫或者 NoSQL 數據庫中。

    壓力測試

    構建了秒殺系統,一定會面臨上線,那么在上線之前壓力測試是必不可少的。

    我們做壓力測試的目的是檢驗系統崩潰的邊緣在哪里?系統的極限在哪里?

    這樣才能合理地設置流量的上限,為了保證系統的穩定性,多余的流量需要被拋棄。

    壓力測試的方法

    合理的測試方法可以幫助我們對系統有深入的了解,這里介紹兩種壓力測試的方法:

    • 正壓力測試
    • 負壓力測試

    正壓力測試。每次秒殺活動都會計劃,使用多少服務器資源,承受多少的請求量。

    可以在這個請求量上面不斷加壓,直到系統接近崩潰或者真正崩潰。簡單的說就是做加法。

    正壓力測試示意圖

    負壓力測試。在系統正常運行的情況下,逐步減少支撐系統的資源(服務器),看什么時候系統無法支撐正常的業務請求。

    例如:在系統正常運行的情況下,逐步減少服務器或者微服務的數量,觀察業務請求的情況。說白了就是做減法。

    負壓力測試示意圖

    壓力測試的步驟

    測試步驟

    有了測試方法的加持,我們來看看需要遵循哪些測試步驟。下面的操作偏套路化,大家在其他系統的壓力測試也可以這么做,給大家做個參考。

    第一,確定測試目標。與性能測試不同的是,壓力測試的目標是,什么時候系統會接近崩潰。比如:需要支撐 500W 訪問量。

    第二,確定關鍵功能。壓力測試其實是有重點的,根據 2/8 原則,系統中 20% 的功能被使用的是最多的,我們可以針對這些核心功能進行壓力測試。例如:下單,庫存扣減。

    關注核心服務

    第三,確定負載。這個和關鍵服務的思路一致,不是每個服務都有高負載的,我們的測試其實是要關注那些負載量大的服務,或者是一段時間內系統中某些服務的負載有波動。這些都是測試目標。

    第四,選擇環境,建議搭建和生產環境一模一樣的環境進行測試。

    第五,確定監視點,實際上就是對關注的參數進行監視,例如 CPU 負載,內存使用率,系統吞吐量等等。

    第六,產生負載,這里需要從生產環境去獲取一些真實的數據作為負載數據源,這部分數據源根據目標系統的承受要求由腳本驅動,對系統進行沖擊。

    建議使用往期秒殺系統的數據,或者實際生產系統的數據進行測試。

    第七,執行測試,這里主要是根據目標系統,關鍵組件,用負載進行測試,返回監視點的數據。

    建議團隊可以對測試定一個計劃,模擬不同的網絡環境,硬件條件進行有規律的測試。

    第八,分析數據,針對測試的目的,對關鍵服務的壓力測試數據進行分析得知該服務的承受上限在哪里。

    對一段時間內有負載波動或者大負載的服務進行數據分析,得出服務改造的方向。

    總結

    秒殺系統的特點,并發量大,資源有限,操作相對簡單,訪問的都是熱點數據。因此,我們需要把它從業務,技術,數據上做隔離,保證不影響到現有的系統。

    因此,架構設計需要分幾層來考慮,從客戶請求到數據庫存儲,到最后上線前的壓力測試。

    簡易的思維導圖送給大家

    思考順序如下,客戶端→代理層→應用層→數據庫→壓力測試:

    客戶端 90% 靜態 HTML+10% 動態 JS;配合 CDN 做好緩存工作。

    接入層專注于過濾和限流。

    應用層利用緩存+隊列+分布式處理好訂單。

    做好數據的預估,隔離,合并。

    上線之前記得進行壓力測試。

    網站欄目:這一次,徹底弄懂“秒殺系統”
    當前URL:http://www.js-pz168.com/news18/98718.html

    成都網站建設公司_創新互聯,為您提供App設計、營銷型網站建設響應式網站、全網營銷推廣、ChatGPT、網站內鏈

    廣告

    聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

    外貿網站制作
    久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
    91.麻豆视频| 亚洲午夜av在线| 视频一区视频二区中文字幕| 久久亚洲春色中文字幕久久久| 国产精品免费视频观看| 午夜视频在线观看一区二区三区| 国产美女一区二区三区| 国产嫩草一区二区三区在线观看| 中文字幕一区二区中文字幕| 欧美成人免费网站| 一区二区三区中文字幕精品精品 | 国产欧美日韩视频一区二区三区| 亚洲欧洲国产精品久久| 日韩欧美二区三区| 一区二区视频免费在线观看| 国产成人亚洲综合a∨婷婷| 国产一区二区在线观看免费播放| 91精彩视频在线观看| 久久九九久久九九| 丝袜美腿高跟呻吟高潮一区| www.亚洲国产| 正在播放一区| 久久精品视频网| 免费观看一级欧美片| 成人av中文| 欧美视频一区二区三区| 国产精品久久久久久久久晋中| 久久99精品久久久久久| 狠狠色噜噜狠狠色综合久| 欧美日韩国产精选| 在线不卡日本| 久久精品一区二区三区不卡| 日本不卡不码高清免费观看| 不卡一卡2卡3卡4卡精品在| 色94色欧美sute亚洲线路二| 中文字幕不卡的av| 精品一区二区三区久久久| 韩日午夜在线资源一区二区| 777午夜精品免费视频| 一区二区日韩av| 97久久精品人人澡人人爽| 一区二区三区我不卡| 欧美激情艳妇裸体舞| 国产一区三区三区| 午夜精品区一区二区三| 国产欧美一区二区精品性色超碰| 久久er99精品| 日本一区二区三区视频在线播放| 欧美精品一区二区三区蜜桃视频 | 九九精品一区二区| 日本黑人久久| 国产亚洲一二三区| 国产一区二区三区免费播放| 性欧美精品一区二区三区在线播放 | 亚洲综合精品自拍| 99久久综合狠狠综合久久止 | 精品国产免费人成电影在线观看四季| 日韩影院精彩在线| 99re视频在线播放| 91 com成人网| 日本不卡在线视频| 欧美性大战久久久久| 久久老女人爱爱| 国产原创一区二区三区| 亚洲在线观看一区| 亚洲欧美日韩国产中文在线| 91在线码无精品| 制服丝袜一区二区三区| 日韩和欧美一区二区| 免费久久一级欧美特大黄| 国产亚洲成av人在线观看导航 | 欧美日本一道本| 日日摸夜夜添夜夜添亚洲女人| 黑人中文字幕一区二区三区| 精品99久久久久久| 久久综合资源网| 国产在线精品一区二区| 樱花www成人免费视频| 一区视频在线播放| 91传媒在线免费观看| 欧美一卡2卡3卡4卡| 久久精品理论片| 一区二区三区四区在线视频| 伊人夜夜躁av伊人久久| 国产一区免费视频| 国产日产欧美一区| 91亚洲精品乱码久久久久久蜜桃| 欧美一区二区视频在线观看2020| 久久精品理论片| 一本高清dvd不卡在线观看| 亚洲影视在线观看| 欧美精品一区二区视频| 国产精品久久久久久久第一福利| 91美女片黄在线观看| 精品区一区二区| 成人影视亚洲图片在线| 宅男噜噜噜66一区二区66| 激情成人午夜视频| 欧美日韩久久不卡| 激情成人综合网| 欧美精品在线观看播放| 国产一区视频网站| 欧美精品丝袜久久久中文字幕| 久久99精品久久久久婷婷| 欧美视频在线不卡| 久久电影国产免费久久电影| 欧美色窝79yyyycom| 久久精工是国产品牌吗| 欧美少妇bbb| 国产在线观看一区二区| 91精品久久久久久久91蜜桃| 国产精品影视在线| 欧美一二三四在线| 成人激情动漫在线观看| wwwwxxxxx欧美| 99久久伊人精品影院| 国产精品美女久久久久aⅴ | 国产欧美日韩不卡免费| 成人三级视频在线观看一区二区| 国产精品午夜春色av| 精品久久久久久亚洲| 亚洲丝袜美腿综合| 日本在线观看一区二区三区| 亚洲一区二区3| 中文字幕一区二区中文字幕| 美腿丝袜亚洲色图| 欧美电影在线免费观看| 成人黄色大片在线观看| 久久久蜜桃精品| 国产亚洲精品自在久久| 亚洲精品免费视频| 亚洲国产一区二区三区在线播| 日韩av电影天堂| 欧美日韩夫妻久久| aaa欧美大片| 中日韩av电影| 日韩欧美三级电影| 奇米影视一区二区三区小说| 在线成人免费视频| 91免费看片在线观看| 亚洲色图.com| 中文网丁香综合网| 国产精品18久久久久久vr| 亚洲精品在线一区二区| 国产视频不卡| 香蕉影视欧美成人| 欧美日韩高清不卡| 亚洲乱码日产精品bd| 色综合久久久久| 国产精品一区二区无线| 国产亚洲综合色| 日本成人三级| 韩国女主播一区二区三区| 精品国产伦一区二区三区观看方式 | 亚洲国产一区二区a毛片| 欧美午夜精品久久久久久孕妇 | 国产a一区二区| 亚洲国产色一区| 欧美浪妇xxxx高跟鞋交| 91麻豆swag| 一区二区三区在线观看动漫| 欧美最猛性xxxxx直播| 成人小视频免费在线观看| 国产精品欧美极品| 伊甸园精品99久久久久久| 国产美女娇喘av呻吟久久| 国产亚洲婷婷免费| 视频一区二区三区免费观看| 国产一区二区主播在线| 欧美激情一区二区三区在线| 亚洲日本理论电影| 岛国一区二区在线观看| 亚洲靠逼com| 欧美日韩不卡在线| 国产精品免费区二区三区观看 | 国产人成一区二区三区影院| 亚洲国产精品一区二区第一页| 国产精品一区专区| 综合色中文字幕| 欧美色成人综合| 国产精品精品软件视频| 日韩av一二三| 国产三级一区二区三区| 樱花www成人免费视频| 91玉足脚交白嫩脚丫在线播放| 亚洲一区二区欧美激情| 日韩精品中文字幕在线不卡尤物| 裸模一区二区三区免费| 国产在线精品一区二区夜色| 国产精品久久久久aaaa| 欧美三级电影精品| 激情视频一区二区| 韩国视频一区二区| 亚洲视频免费在线| 4438x亚洲最大成人网| 欧美精品人人做人人爱视频| 国产精品456| 亚洲线精品一区二区三区八戒| 欧美大片一区二区| 亚洲啪啪av|