楊濤 南京蘇寧軟件技術(shù)有限公司
高并發(fā)電子商務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
楊濤 南京蘇寧軟件技術(shù)有限公司
本文主要從多線程處理、優(yōu)化數(shù)據(jù)庫、增加系統(tǒng)可用資源三個(gè)方面對(duì)高并發(fā)電子商務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行簡(jiǎn)要闡述,以提高系統(tǒng)資源利用率、提高系統(tǒng)處理速度為目的,滿足用戶的訪問量、平臺(tái)的請(qǐng)求量,保證電商系統(tǒng)響應(yīng)的準(zhǔn)確性和流暢性。
高并發(fā) 電子商務(wù)系統(tǒng) 設(shè)計(jì)
隨著信息化的快速發(fā)展,電子商務(wù)系統(tǒng)的設(shè)計(jì)技術(shù)也在蓬勃發(fā)展,人們的購物方式從之前面對(duì)面的錢貨方式慢慢轉(zhuǎn)變?yōu)槎嘣慕灰追绞剑缇W(wǎng)上購物,這種購物方式以保證客戶購物安全為前提、為客戶提供豐富的商品選擇、而且足不出戶的購物方式也為客戶提供一個(gè)安全、便捷、性價(jià)比高的購物渠道。但在購物狂歡節(jié)如雙11、雙12這種節(jié)日時(shí),交易平臺(tái)的訪問量較大、商品查詢次數(shù)較多等問題極易導(dǎo)致商品刷新慢、無法付款、甚至服務(wù)器崩潰等現(xiàn)象、為用戶帶來極大的不便,所以將高并發(fā)技術(shù)應(yīng)用到電子商務(wù)系統(tǒng)的設(shè)計(jì),保證系統(tǒng)響應(yīng)的準(zhǔn)確性和流暢性,滿足用戶的購物需求、也使得購物平臺(tái)的用戶量不斷增加。
在用戶訪問高峰期時(shí),電子商務(wù)平臺(tái)因訪問量大、頻次多,使得平臺(tái)響應(yīng)時(shí)間長(zhǎng)、反應(yīng)慢、服務(wù)器超負(fù)荷運(yùn)轉(zhuǎn)甚至出現(xiàn)死機(jī)等現(xiàn)象,將高并發(fā)的技術(shù)需求應(yīng)用到電子商務(wù)系統(tǒng)中,對(duì)整個(gè)系統(tǒng)進(jìn)行設(shè)計(jì),保證系統(tǒng)響應(yīng)的準(zhǔn)確性和流暢性,滿足用戶的購物需求,本文主要從三個(gè)方面進(jìn)行簡(jiǎn)要闡述。
(1)多線程處理:當(dāng)用戶向服務(wù)器發(fā)送請(qǐng)求時(shí)、傳輸?shù)男畔⒅饕远噙M(jìn)程方式、異步方式、多線程方式進(jìn)行處理,通過分析比較,多線程處理方式可提高服務(wù)器的利用率、減少空閑時(shí)間。與多進(jìn)程方式相比,一個(gè)進(jìn)程由多個(gè)線程組成、且線程間可共享用戶要求的部分資源,所以線程占用空間較小、且處理效率較高。如圖1所示,采用多線程處理方式處理用戶提交訂單的信息,當(dāng)用戶發(fā)出提交訂單的信息,系統(tǒng)會(huì)自動(dòng)調(diào)出商品與用戶的信息,然后驗(yàn)證商品是否有貨及相關(guān)配送問題等、同時(shí)也驗(yàn)證用戶是否有權(quán)限、ID是否被禁用等,當(dāng)兩者都驗(yàn)證通過時(shí)、訂單才會(huì)被認(rèn)為提交成功,采用多線程處理方式處理、對(duì)商品及用戶信息的驗(yàn)證是同時(shí)進(jìn)行的(非順序驗(yàn)證)、若有一項(xiàng)不符合該訂單顯示提交失敗,這種處理方式可提高處理效率。
圖1 添加多線程處理的流程圖
(2)優(yōu)化數(shù)據(jù)庫:完善DAO層,讀寫分離,有效的減輕數(shù)據(jù)庫和io壓力,同時(shí)保證數(shù)據(jù)一致性;合理使用數(shù)據(jù)庫索引,哈希索引實(shí)現(xiàn)數(shù)據(jù)的快速存?。粚?duì)常用又很少變更的數(shù)據(jù)使用Redis存儲(chǔ),Redis擁有豐富的數(shù)據(jù)類型,高效的讀寫速度,所有操作都是原子性,可大幅度提高系統(tǒng)處理效率;分布式部署,針對(duì)特殊的業(yè)務(wù)場(chǎng)景,如秒殺和搶購,需要控制商品發(fā)放數(shù)量,采用隊(duì)列和樂觀鎖的方案,通過MQ或Kafka先進(jìn)先出的隊(duì)列方式處理請(qǐng)求,當(dāng)商品數(shù)量足夠時(shí),通過樂觀鎖去扣除商品數(shù)量,樂觀鎖通過數(shù)據(jù)庫版本號(hào)實(shí)現(xiàn)加鎖,更新失敗時(shí),商品數(shù)量已經(jīng)被搶購?fù)?,后續(xù)請(qǐng)求可以直接返回?fù)屬徥?,提高系統(tǒng)的響應(yīng)速度;
(3)增加系統(tǒng)可用資源:當(dāng)電商平臺(tái)訪問量較多、請(qǐng)求量較大時(shí),單個(gè)服務(wù)器因負(fù)載大而反應(yīng)緩慢、采用多個(gè)服務(wù)器進(jìn)行處理、提高處理效率,采用Nginx作為負(fù)載均衡服務(wù)器、只接收并向其他服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求,當(dāng)一臺(tái)服務(wù)器沒有響應(yīng)時(shí)、系統(tǒng)會(huì)自動(dòng)地重新進(jìn)行全面映射、使得負(fù)載均衡并滿足平臺(tái)的處理請(qǐng)求。業(yè)務(wù)層采用成熟的NIO通訊框架,支撐高并發(fā)吞吐量的請(qǐng)求。同時(shí),對(duì)于web系統(tǒng)來說,圖片,css,JavaScript,Html等靜態(tài)資源的資源消耗比較大,將靜態(tài)資源和應(yīng)用服務(wù)器分別部署在不同的服務(wù)器上,通過Nginx管理靜態(tài)資源服務(wù)器和后端服務(wù)器的請(qǐng)求,可以使后端應(yīng)用更加服務(wù)化,減輕后端服務(wù)器壓力,提高靜態(tài)資源訪問速度。
為保證電商系統(tǒng)響應(yīng)的準(zhǔn)確性和流暢性,滿足用戶的訪問量、平臺(tái)的請(qǐng)求量,本文主要從多線程處理、優(yōu)化數(shù)據(jù)庫、增加系統(tǒng)可用資源三個(gè)方面對(duì)高并發(fā)電子商務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行簡(jiǎn)要闡述,提高系統(tǒng)資源利用率、提高系統(tǒng)處理速度,來不斷滿足在用戶高峰期時(shí)電子商務(wù)系統(tǒng)的使用。
[1]徐偉恒.高并發(fā)電子商務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱工業(yè)大學(xué),2016.
[2]彭沖.面向農(nóng)產(chǎn)品的電子商務(wù)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D].湘潭大學(xué),2016.
楊濤,1990.05,男,漢,江蘇南京,本科,助理工程師,目前從事軟件工程方面的工作。