999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Spring Cloud的電商平臺秒殺系統設計

2023-01-07 03:09:16
信息記錄材料 2022年11期
關鍵詞:數據庫用戶服務

尹 玲

(廣州科技職業技術大學 廣東 廣州 510550)

0 引言

在電商平臺上,商品的超低價格引起人們對商品的購買欲望,這些超低價格的商品限量銷售使得大量購物者瘋狂搶購,甚至有黃牛黨采用專業的工具搶購。商品在進行秒殺時成百萬上千萬的請求瞬間涌入,數據庫和服務端資源有限,如果架構方面沒有合理的設計,系統必然會崩潰。秒殺系統的業務流程簡單,即用戶下單成功核減庫存,但秒殺系統瞬時并發量極大,特價商品的數量限制導致秒殺成功的請求數量很少。如何解決秒殺過程中的瞬時高并發,防止超賣是本系統重點研究的問題。

1 系統關鍵技術介紹

1.1 Spring Cloud 架構及微服務組件

微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元[1],Spring Cloud 是一個基于Spring Boot 實現的云應用開發工具,是一套微服務治理的框架[2]。秒殺系統采用Spring Cloud 分布式微服務集群架構,使用Spring Cloud 管理商品服務,秒殺服務、訂單服務、庫存服務等這些微服務,必然離不開Spring Cloud 的相關組件。其主要組件如下:

Spring Cloud Gateway:網關對請求進行路由、過濾和限流。

Netflix Eureka:注冊中心存儲所有服務信息。

Netflix Hystrix:熔斷器通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力[3]。

RestTemplate:Spring 提供、用于訪問的Rest 服務客戶端,主要用于微服務間的調用。

1.2 負載均衡Nginx

負載均衡是將任務分攤到多個處理單元執行,在服務器集群中,Nginx 服務器起到一個代理服務器的角色(即反向代理)[4],避免其中一個服務器壓力過大,將來自用戶的請求轉發給不同的服務器。同時,Nginx 服務器還可以做靜態資源代理。負載均衡Nginx 保證所有后端服務器的性能充分發揮,從而保持服務器集群的整體性能最優。

1.3 緩存Redis

緩存是指將頻繁訪問的數據放在內存中,從而加快用戶訪問速度的技術。Redis 技術是一種基于內存的數據庫,處理請求能力極高,正常情況下對讀請求處理速度為90 000/s,寫請求處理速度為50 000/s,并且提供一定的數據持久化的功能,緩存Redis 的使用可以提高數據的查詢性能和效率。

1.4 消息中間件RocketMQ

RocketMQ 是阿里巴巴開源的分布式消息中間件,消息隊列基于生產者-消費者設計模式,按具體場景與規則,針對上層請求生產者往隊列的末尾添加數據,多個消費者從隊列里面依次讀取數據然后自行處理,消息隊列具有異步、解耦、削峰的特點[5]。

1.5 數據庫MySQL

MySQL 為一款免費的通用數據庫,通過不斷的迭代升級,現在各項讀寫性能均達到主流水平之上,而且也支持主從、集群模式。

2 系統實現

2.1 系統架構圖

秒殺系統架構圖如圖1所示。

圖1 系統架構圖

2.2 前端層面實現

秒殺商品的頁面信息很多都不會改變,為減少秒殺時服務器壓力,秒殺商品的圖片和文字元素都需要盡可能靜態化。在服務端通過Thymeleaf 模板語言生成靜態頁面,用戶可以通過Nginx訪問頁面,降低對Java服務端的壓力。

前端層面除了生成靜態頁面減少服務器壓力,還可以進行限流操作,盡可能提升秒殺效率。針對普通購物者,當購物者點擊購買按鈕一次后,按鈕置灰,防止用戶重復提交請求。針對黃牛,防止黃牛使用抓包工具和定時腳本自動發請求,需要在后端Controller 層進行處理,即對同一個用戶的請求進行校驗,限制同一個用戶短時間內的大量請求,去除重復請求。如果想簡化操作還可以花錢讓市面上的專業風控團隊來處理。風控系統會根據一系列規則,判斷當前用戶是否為刷單賬號、僵尸賬號等,對那些不符合平臺要求的直接攔截過濾掉。

2.3 Nginx 層和網關層限流

在前端層面盡管已經攔截了惡意請求,減少了部分流量,但是秒殺的總流量還是很多的,研究人員還需要做負載均衡。負載均衡理論上講就是集群,單臺機器的性能有上限,流量太大時扛不住。那研究人員可以多加幾臺機器,提升物理硬件方面的能力。在Nginx 層下面的Node 節點,可以將請求按照輪詢、權重等方式,均勻地分布在每一臺服務器上面。例如1 000 個請求過來,研究人員有10 臺Node 節點服務,那么按照輪詢策略每個節點分擔100 個請求,可以極大地提升服務的響應速度和健壯性。在真實的秒殺場景中,Nginx 層還會加一級4 層負載,在硬件層面的F5或者軟件層面的LVS,對Nginx服務的IP做負載均衡。

Nginx 層除了做反向代理,還可以做好限流控制。Nginx 層和網關層限流具體如圖2所示。

圖2 Nginx 層和網關層限流設計圖

應用級別限流:通過Nginx 配置屬性limit_req_zone和limit_req,來控制客戶端每個IP 地址限制為每秒一次請求。并且在網關層通過對用戶權限控制,只有用戶權限校驗通過,才給予令牌權限允許訪問秒殺接口服務。

接口級別的限流:一般秒殺系統允許用戶每秒/次的訪問量。具體是通過RedisSon(Redis+lua 客戶端)工具來實現,具體限流實現為用戶ID 為key,過期時間expire 屬性設置為1 秒。每次接口請求進來,先通過用戶ID 去查詢Redis,如果查詢不到則允許訪問接口,同時在Redis 中set 以用戶ID 為key 每秒/次的訪問量,來控制同一個用戶下次的訪問。

2.4 緩存Redis 層實現

在秒殺的過程中,對于成功進入后端的請求在訪問數據庫時,會先查詢數據庫商品庫存是否足夠,庫存足夠才會下單成功,進行寫數據庫操作。秒殺時有數十萬的請求進來同時查詢數據庫,由于數據庫讀寫屬于磁盤的輸入輸出,性能較低,數據庫的連接資源非常有限,此時數據庫可能會宕機。秒殺系統最大的瓶頸是對數據庫的讀寫,如果能夠把部分數據或業務邏輯轉移到內存緩存,效率會有極大的提升。所以在秒殺開始前,可以在后臺寫一個控制按鈕,點擊按鈕實現將數據提前寫入緩存Redis 中,讓請求過來的數據都在Redis 層處理計算。Redis 采用主從模式,Redis master(主服務)處理所有的寫請求,Redis slave(從服務)用于讀操作緩解系統的查庫壓力,再由Redis master 將數據同步到Redis slave 上。

另外為了防止超賣,研究人員需要加鎖來保證,讓請求從并行化切換為串行化處理。例如1 000 件商品,平均分成10 份商品庫,每份100 件,然后生成10 把鎖,每把鎖對應一份商品庫。代碼業務中誰拿到鎖,誰就可以產生交易,沒有鎖的請求則處于等待狀態。使用redis 分布式鎖來保護秒殺的數據庫操作如圖3所示。

圖3 使用redis 分布式鎖搶鎖示意圖

Redis 加鎖代碼示例(使用Redis+SpringAOP 的方式實現分布式鎖)

2.5 RocketMQ 消息隊列和MySQL 數據庫

系統使用RocketMQ 的削峰特性來更新下單信息到數據庫,預防因秒殺時大量訂單直接更新數據庫,導致數據庫服務宕機。RocketMQ消息隊列對訂單進行分組存儲管理,然后讓多個消費者來進行消費,消費成功后把訂單信息寫入數據庫。MySQL 數據庫用來做最終持久化,將最終的交易數據寫到硬盤。如圖4所示。

圖4 使用RocketMQ 消息隊列更新數據庫示意圖

3 測試數據

JMeter 是Apache 組織基于Java 開發的壓力測試工具,用于對軟件做壓力測試。JMeter 對秒殺系統的壓測結果如圖5所示。

圖5 JMeter 壓測結果圖

當前秒殺樣本數據50 000,從壓力測試接口來看,吞吐量為929/s,表示系統每秒可以處理完900 個以上的工作量,基本上可以達到秒殺系統的使用要求。

4 結論

本系統結合目前市面最為流行的開發技術Spring Cloud 架構,運用其相關組件完成了微服務電商平臺秒殺系統設計。該設計使用負載均衡Nginx 做反向代理和限流,使用緩存Redis 提高系統的響應速度和利用分布式鎖防止超賣,使用RocketMQ 消息隊列在高并發環境下進行削峰和服務間的解耦。當然,電商實現線上秒殺的方案不止一種,系統也可進一步優化。秒殺存在于大眾生活的方方面面,秒殺系統的研究及性能提升具有重要意義。

猜你喜歡
數據庫用戶服務
服務在身邊 健康每一天
今日農業(2019年12期)2019-08-15 00:56:32
服務在身邊 健康每一天
今日農業(2019年10期)2019-01-04 04:28:15
服務在身邊 健康每一天
今日農業(2019年16期)2019-01-03 11:39:20
招行30年:從“滿意服務”到“感動服務”
商周刊(2017年9期)2017-08-22 02:57:56
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
主站蜘蛛池模板: 免费久久一级欧美特大黄| 91亚洲精选| 日本亚洲欧美在线| 色婷婷久久| 美女国内精品自产拍在线播放| 亚洲无码A视频在线| 黄色三级毛片网站| 亚洲欧洲国产成人综合不卡| 免费A级毛片无码无遮挡| 久久久久青草大香线综合精品| 国产九九精品视频| 永久天堂网Av| 激情爆乳一区二区| 亚洲国产精品一区二区高清无码久久| 综合社区亚洲熟妇p| 一本久道久综合久久鬼色| 日韩福利在线观看| 8090成人午夜精品| av无码一区二区三区在线| 国产精品嫩草影院av| 操国产美女| 亚洲av无码成人专区| 精品人妻一区二区三区蜜桃AⅤ| 亚洲国产精品无码久久一线| 免费观看三级毛片| 国产成人一区免费观看| 大学生久久香蕉国产线观看| 97在线国产视频| 国产成人乱无码视频| 精品成人一区二区| 免费啪啪网址| 亚洲九九视频| 9啪在线视频| 专干老肥熟女视频网站| 91蜜芽尤物福利在线观看| 在线视频亚洲欧美| 国产青榴视频在线观看网站| 亚洲毛片在线看| 日韩av手机在线| 91无码网站| 无码人中文字幕| 夜色爽爽影院18禁妓女影院| 亚洲精品免费网站| 亚洲人成电影在线播放| 亚洲综合色区在线播放2019| 国产第一页免费浮力影院| 欧美日韩亚洲综合在线观看 | 国产一级妓女av网站| 久久国产精品波多野结衣| 少妇精品在线| 老司机午夜精品网站在线观看| 丁香亚洲综合五月天婷婷| 999国产精品永久免费视频精品久久| 日韩av在线直播| 人妻丰满熟妇av五码区| 国内精品久久久久久久久久影视 | 在线亚洲精品自拍| 少妇极品熟妇人妻专区视频| 国产精品3p视频| 国产精品性| 91麻豆精品国产高清在线| 亚洲人免费视频| 精品国产成人a在线观看| 无码日韩视频| 少妇精品网站| 呦女精品网站| 成人免费黄色小视频| 九九九九热精品视频| 人人澡人人爽欧美一区| 免费国产黄线在线观看| 国产91在线|日本| 久久人与动人物A级毛片| 国产成人一区二区| 99成人在线观看| 中文字幕亚洲精品2页| 日本一区二区不卡视频| 色135综合网| 亚洲区视频在线观看| 亚洲精品麻豆| 在线日韩日本国产亚洲| 精品无码日韩国产不卡av| 国产在线自在拍91精品黑人|