【摘要】伴隨著社會(huì)的不斷發(fā)展,人們的生活水平和消費(fèi)水平也在不斷提高,我國(guó)的支外支付平臺(tái)的不斷完善,網(wǎng)上購(gòu)物成為人們?nèi)粘I钪械闹匾獌?nèi)容。天貓、淘寶、拼多多等電子商務(wù)平臺(tái)也逐漸融入人們的生活。過(guò)去,傳統(tǒng)的電子商務(wù)平臺(tái)使用了一種單體系結(jié)構(gòu),目的是將整個(gè)業(yè)務(wù)邏輯集中在一個(gè)應(yīng)用程序中。但是,隨著業(yè)務(wù)的不斷擴(kuò)展,平臺(tái)的流量、功能和要求也在不斷增加,這種單體架構(gòu)模式的應(yīng)用在功能拓展以及維護(hù)的時(shí)候都會(huì)越來(lái)越麻煩,還有抗并發(fā)的能力也滿(mǎn)足不了現(xiàn)在的需求。
本文根據(jù)上述要求和難點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于微服務(wù)的高并發(fā)電子商務(wù)平臺(tái)。根據(jù)微服務(wù)體系結(jié)構(gòu)的思想,將整個(gè)系統(tǒng)分為六個(gè)微服務(wù)。這些微服務(wù)是單獨(dú)開(kāi)發(fā)和實(shí)施的。采用ngnix、sentinel、redis和rabbitmq等技術(shù)實(shí)現(xiàn)了請(qǐng)求路由、請(qǐng)求流約束、緩沖和異步請(qǐng)求處理,從而提高了系統(tǒng)的可擴(kuò)展性和高并發(fā)性能。本文詳細(xì)介紹了各個(gè)微服務(wù)的功能,結(jié)合電子商務(wù)平臺(tái)本身的要求,提出了系統(tǒng)的總體功能需求和非功能需求,通過(guò)平臺(tái)架構(gòu)圖展示了微服務(wù)體系結(jié)構(gòu)的構(gòu)建模式,并通過(guò)E-R圖論證了平臺(tái)中不同主體之間的關(guān)系。根據(jù)系統(tǒng)大綱的需求分析和設(shè)計(jì)內(nèi)容,采用springmvc、springboot、springcloud、mybatis、Vue、redis和rabbitmq等技術(shù)實(shí)現(xiàn)了基于微服務(wù)的高并發(fā)電子商務(wù)平臺(tái)。最后采用黑盒測(cè)試方法對(duì)系統(tǒng)功能進(jìn)行了測(cè)試,保證了系統(tǒng)的高可用性、高性能和高并發(fā)和穩(wěn)定性。
而經(jīng)過(guò)早期開(kāi)發(fā)和測(cè)試,基于微服務(wù)體系結(jié)構(gòu)的高并發(fā)電子商務(wù)平臺(tái)能夠在不同環(huán)境下可靠運(yùn)行,各種不同的任務(wù)可以通過(guò)不同微服務(wù)模塊之間的正常協(xié)作完成。電子商務(wù)平臺(tái)可以很好地滿(mǎn)足三種類(lèi)型的用戶(hù):高并發(fā)和大規(guī)模數(shù)據(jù)環(huán)境下的買(mǎi)家、商家和后臺(tái)管理人員。
【關(guān)鍵詞】電商平臺(tái);微服務(wù)架構(gòu);高并發(fā)
1引言
1.1項(xiàng)目背景及意義
伴隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,電子商務(wù)系統(tǒng)日趨成熟和完善。近年來(lái),它在我國(guó)的經(jīng)濟(jì)組成中發(fā)揮著重要作用。而正是由于國(guó)內(nèi)電子商務(wù)的快速發(fā)展,各類(lèi)電子商務(wù)平臺(tái)已經(jīng)融入人們的生活,網(wǎng)購(gòu)已經(jīng)成為人們?nèi)粘I钪蟹浅V匾囊徊糠帧?br />
而由于我國(guó)網(wǎng)絡(luò)用戶(hù)數(shù)量龐大,電子商務(wù)平臺(tái)的發(fā)展將來(lái)將面臨高并發(fā)化的問(wèn)題。而且隨著電子商務(wù)市場(chǎng)的發(fā)展,人們對(duì)電子商務(wù)平臺(tái)的需求會(huì)越來(lái)越大,這說(shuō)明著電子商務(wù)平臺(tái)的業(yè)務(wù)邏輯將會(huì)變得越來(lái)越復(fù)雜,技術(shù)難度也會(huì)越來(lái)越大。傳統(tǒng)的電子商務(wù)平臺(tái)在實(shí)際開(kāi)發(fā)中采用單一的體系結(jié)構(gòu)構(gòu)建整個(gè)電子商務(wù)平臺(tái),用戶(hù)需求小、平臺(tái)規(guī)模小的時(shí)候該方法易于開(kāi)發(fā)。當(dāng)用戶(hù)需求較大時(shí),該方法混淆了整個(gè)電子商務(wù)平臺(tái)的內(nèi)部邏輯,使得開(kāi)發(fā)人員難以進(jìn)行擴(kuò)展和維護(hù),大大降低了對(duì)高并發(fā)能力的支持。從而構(gòu)建邏輯清晰、易于開(kāi)發(fā)維護(hù)的電子商務(wù)平臺(tái)就顯得的越來(lái)越重要。
微服務(wù)體系結(jié)構(gòu)是一個(gè)復(fù)雜的結(jié)構(gòu)體系,根據(jù)簡(jiǎn)單、靈活、獨(dú)立的功能模塊分為一些獨(dú)立的微服務(wù)。該基于微服務(wù)體系結(jié)構(gòu)的平臺(tái)邏輯簡(jiǎn)單,易于開(kāi)發(fā)和部署,擴(kuò)展性高并且維護(hù)性強(qiáng),能夠滿(mǎn)足未來(lái)電子商務(wù)平臺(tái)的發(fā)展需求。
1.2國(guó)內(nèi)外研究現(xiàn)狀
國(guó)內(nèi)領(lǐng)先的大型電子商務(wù)企業(yè)有京東、阿里巴巴、拼多多、當(dāng)當(dāng)?shù)?。他們的電子商?wù)平臺(tái)也占據(jù)了國(guó)內(nèi)市場(chǎng)的大部分,并且他們電子商務(wù)平臺(tái)的模式卻十分相似。早期的電商平臺(tái),主要通過(guò)靜態(tài)HTML網(wǎng)頁(yè)向用戶(hù)顯示商品信息,然后用戶(hù)在線(xiàn)下跟商家聯(lián)系,完成與商家的交易。后來(lái)電子商務(wù)平臺(tái)已從原來(lái)的靜態(tài)網(wǎng)頁(yè)轉(zhuǎn)變?yōu)槟軌蚺c用戶(hù)交互的動(dòng)態(tài)網(wǎng)頁(yè)。初期,由于用戶(hù)數(shù)量少,需求大,電子商務(wù)平臺(tái)邏輯比較簡(jiǎn)單,整體規(guī)模小,所以是用單一的體系結(jié)構(gòu)開(kāi)發(fā)的,一個(gè)系統(tǒng)包含全部功能。
而隨著用戶(hù)數(shù)量的增加和各種需求的增加,傳統(tǒng)的單一體系結(jié)構(gòu)電子商務(wù)平臺(tái)逐漸暴露出一些薄弱環(huán)節(jié),如功能難以拓展、后期維護(hù)困難、并發(fā)能力差等。而隨后,分布式體系結(jié)構(gòu)和分布式緩存技術(shù)出現(xiàn)解決了大量用戶(hù)訪(fǎng)問(wèn)帶來(lái)的高并發(fā)問(wèn)題。但是,近年電子商務(wù)用戶(hù)的暴增,高并發(fā)的壓力越來(lái)越大,之前的分布式體系結(jié)構(gòu)已經(jīng)不能現(xiàn)在的發(fā)展需求。本文正是在這種背景下,我國(guó)京東、淘寶等電子商務(wù)平臺(tái)都開(kāi)始去采用微服務(wù)體系結(jié)構(gòu)來(lái)重構(gòu)之前所用的那種架構(gòu)。多年來(lái),在天貓的雙11日和京東618日中,基于微服務(wù)體系結(jié)構(gòu)的重構(gòu)電商平臺(tái)滿(mǎn)足了人們的期望,經(jīng)受住了巨大的流量和巨大的高并發(fā)。我國(guó)的電商平臺(tái)將進(jìn)入微服務(wù)體系結(jié)構(gòu)時(shí)代。
國(guó)外電商平臺(tái)發(fā)展的比較早。長(zhǎng)期發(fā)展后,產(chǎn)生了亞馬遜等優(yōu)秀的企業(yè)。當(dāng)然,國(guó)外的電子商務(wù)平臺(tái)最初也采用單一的體系結(jié)構(gòu),之后隨著用戶(hù)數(shù)量的增加和各種需求的增加,單一體系結(jié)構(gòu)的缺點(diǎn)也出現(xiàn)了。面對(duì)上述問(wèn)題,劉易斯和福勒在2014年精確地定義了微服務(wù)體系結(jié)構(gòu)是一種體系結(jié)構(gòu)模式,將單一和復(fù)雜的應(yīng)用程序劃分為一些能夠相互協(xié)調(diào)和協(xié)作的小型和獨(dú)立服務(wù)。亞馬遜等電子商務(wù)平臺(tái)已經(jīng)利用其固有的優(yōu)勢(shì),將微服務(wù)體系結(jié)構(gòu)的理念應(yīng)用于他們的平臺(tái)當(dāng)中去。當(dāng)前,雖然電商業(yè)務(wù)在世界范圍內(nèi)發(fā)展迅速,但美國(guó)的電子商務(wù)水平仍處于世界領(lǐng)先水平。
2相關(guān)理論技術(shù)概述
2.1 SpringBoot技術(shù)概述
Springboot是一個(gè)全新的框架,更新了原有的模式。開(kāi)發(fā)人員不需要反復(fù)配置某些資源文件而是采用統(tǒng)一的資源配置方式,這樣提高了項(xiàng)目前期建設(shè)和開(kāi)發(fā)過(guò)程的效率。并且在Spring原有結(jié)構(gòu)的基礎(chǔ)上,對(duì)資源配置采用了具體的設(shè)計(jì)方法。并同時(shí)集成了其一些優(yōu)良特性,解決了版本沖突的問(wèn)題。后來(lái)spring boot在開(kāi)發(fā)領(lǐng)域就得到了廣泛的應(yīng)用。springboot框架有兩個(gè)基本功能:開(kāi)箱即用和約定大于配置。開(kāi)箱即用意味著開(kāi)發(fā)人員不需要去配置相應(yīng)的資源包,并且資源在項(xiàng)目啟動(dòng)時(shí)自動(dòng)加載資源包,它可以使用Maven組件在POM文件中配置一些項(xiàng)目所需的資源依賴(lài)包,然后使用注解來(lái)實(shí)現(xiàn)自動(dòng)注入資源,以取代繁瑣的XML文件配置,從而完成對(duì)象的生命周期管理。這樣開(kāi)發(fā)人員就可以避免浪費(fèi)太多的時(shí)間進(jìn)行資源分配和管理,而只關(guān)注業(yè)務(wù)本身。約定大于配置的實(shí)質(zhì)是行為范式。在軟件開(kāi)發(fā)過(guò)程中的一些原則是按照約定的設(shè)計(jì)規(guī)范進(jìn)行定義的,它設(shè)計(jì)目的是為了避免在設(shè)計(jì)中浪費(fèi)太多的時(shí)間來(lái)決定某些規(guī)則,以便于快速地進(jìn)行簡(jiǎn)單靈活的開(kāi)發(fā)工作,開(kāi)發(fā)者只需要確定哪些內(nèi)容不符合設(shè)計(jì)中的規(guī)則。
2.2 微服務(wù)架構(gòu)概述
微服務(wù)架構(gòu)是分布式體系結(jié)構(gòu),即微服務(wù)體系結(jié)構(gòu)根據(jù)不同的功能模塊將復(fù)雜的系統(tǒng)劃分為粒度更小的微服務(wù)。各個(gè)微服務(wù)之間相互配合且相對(duì)獨(dú)立。微服務(wù)體系結(jié)構(gòu)最初是從SOA體系結(jié)構(gòu)演變而來(lái)的,后來(lái)隨著用戶(hù)數(shù)量急劇增加。SOA體系結(jié)構(gòu)已經(jīng)滿(mǎn)足不了需求復(fù)雜、并發(fā)強(qiáng)、數(shù)據(jù)量大、吞吐量高等情況的電商平臺(tái)。微服務(wù)體系結(jié)構(gòu)強(qiáng)調(diào)的是服務(wù)的粒度應(yīng)該很小,然后通過(guò)將應(yīng)用程序和服務(wù)分解為更小且可以進(jìn)行獨(dú)立開(kāi)發(fā)、測(cè)試、部署和維護(hù)的服務(wù)。具有效率高、擴(kuò)展性強(qiáng)、響應(yīng)快和高并發(fā)性的特點(diǎn)。而微服務(wù)體系結(jié)構(gòu)需要在進(jìn)行拆分時(shí)應(yīng)保證體系結(jié)構(gòu)的穩(wěn)定性;各種微型服務(wù)的劃分在內(nèi)部應(yīng)該是非常一致的。各微服務(wù)都是松散耦合的;微服務(wù)是為了彌補(bǔ)單一體系結(jié)構(gòu)存在的擴(kuò)展性差、開(kāi)發(fā)難度大、抗并發(fā)能力差等問(wèn)題。并且微服務(wù)體系結(jié)構(gòu)具有以下優(yōu)點(diǎn):每個(gè)微服務(wù)只負(fù)責(zé)一個(gè)業(yè)務(wù)模塊,代碼非常聚合。各微服務(wù)之間的連接性較低,因此各微服務(wù)相對(duì)獨(dú)立,易于獨(dú)立開(kāi)發(fā)、測(cè)試、部署、維護(hù)和擴(kuò)展。
2.3 SpringCloud技術(shù)概述
SpringCloud基于SpringBoot簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)架構(gòu)的開(kāi)發(fā),如服務(wù)注冊(cè)和發(fā)現(xiàn)、服務(wù)網(wǎng)關(guān)、斷路器、數(shù)據(jù)監(jiān)控、配置中心、服務(wù)調(diào)用和負(fù)載均衡。開(kāi)發(fā)人員可以使用這些工具快速構(gòu)建基于微服務(wù)體系結(jié)構(gòu)的系統(tǒng)。Spring Cloud平臺(tái)的基本功能包括服務(wù)注冊(cè)和發(fā)現(xiàn)、服務(wù)網(wǎng)關(guān)和配置管理。
服務(wù)注冊(cè)和發(fā)現(xiàn):它是SpringCloud提供的注冊(cè)中心之一,其中包括SpringCloud Alibaba Nacos、Netflix Eureka、Apache zookeeper等組件。本文采用Nacos。Nacos可以提供服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)。服務(wù)注冊(cè)的目的是注冊(cè)微服務(wù)名稱(chēng)、微服務(wù)操作主機(jī)的IP地址和外部提供的端口號(hào)等信息;服務(wù)發(fā)現(xiàn)是當(dāng)需要使用某一個(gè)服務(wù)時(shí),可以從注冊(cè)中心中獲取可以使用的服務(wù)信息,客戶(hù)端憑借此信息可以連接上服務(wù)氣端。
服務(wù)網(wǎng)關(guān):負(fù)責(zé)處理HTTP服務(wù)請(qǐng)求和連接。有Spring GateWay,Netflix Zuul等。本文采用Spring GateWay網(wǎng)關(guān)驚醒請(qǐng)求路由和用戶(hù)鑒權(quán)等。網(wǎng)關(guān)是微服務(wù)體系結(jié)構(gòu)中外部所有請(qǐng)求的統(tǒng)一接入點(diǎn)。其主要功能包括身份驗(yàn)證、請(qǐng)求分配、負(fù)載均衡、路由管理等功能。
服務(wù)調(diào)用:即一個(gè)服務(wù)調(diào)用另一個(gè)服務(wù)。在微服務(wù)體系結(jié)構(gòu)中,服務(wù)之間必然存在連接。本文采用了Feign組件進(jìn)行服務(wù)之間的調(diào)用。Feign是一個(gè)更方便的HTTP客戶(hù)端。您只需創(chuàng)建一個(gè)接口,然后在其上添加注解即可。將需要調(diào)用的方法定義成抽象方法,并不需要自己構(gòu)建 HTTP 請(qǐng)求。需要調(diào)用的服務(wù)引入這個(gè)接口,調(diào)用里面的方法這樣就完成了服務(wù)之間的調(diào)用。
服務(wù)熔斷:本文采用了Sentinel。由于服務(wù)共享問(wèn)題,一個(gè)業(yè)務(wù)的請(qǐng)求鏈路通常很長(zhǎng)。當(dāng)用戶(hù)發(fā)起訪(fǎng)問(wèn)請(qǐng)求時(shí),通常需要幾個(gè)微服務(wù)來(lái)執(zhí)行它們。高并發(fā)場(chǎng)景下,請(qǐng)求調(diào)用鏈對(duì)系統(tǒng)的穩(wěn)定性有很大影響。如果其中一個(gè)服務(wù)鏈路中存在網(wǎng)絡(luò)延遲等情況導(dǎo)致這個(gè)服務(wù)不可使用,導(dǎo)致請(qǐng)求阻塞,這可能導(dǎo)致服務(wù)雪崩連鎖效應(yīng)。服務(wù)熔斷是用來(lái)解決這種情況的。當(dāng)某一個(gè)服務(wù)無(wú)法正常提供服務(wù)時(shí),它會(huì)將當(dāng)前接口與外部進(jìn)行隔離并且觸發(fā)服務(wù)熔斷。此后一段時(shí)間內(nèi),請(qǐng)求方的請(qǐng)求將直接失敗,直到這個(gè)服務(wù)恢復(fù)。
2.4 Redis技術(shù)概述
Redis是一個(gè)高性能的非關(guān)系的開(kāi)源數(shù)據(jù)庫(kù),它以鍵值對(duì)的形式保存和檢索數(shù)據(jù)。Redis采用C語(yǔ)言編寫(xiě),并提供了用于數(shù)據(jù)管理的原子操作,它與其他非關(guān)系數(shù)據(jù)庫(kù)不同,具有更豐富的數(shù)據(jù)類(lèi)型和更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。但與此同時(shí),Redis不僅可以作為緩存,而且還可以作為持久型數(shù)據(jù)庫(kù)使用。比起復(fù)雜的磁盤(pán)數(shù)據(jù)操作,內(nèi)存中的數(shù)據(jù)管理相對(duì)更加簡(jiǎn)單一點(diǎn),其效率更。因此,在復(fù)雜的操作中,Redis可以完成很多工作。當(dāng)數(shù)據(jù)存儲(chǔ)在磁盤(pán)中時(shí),磁盤(pán)上的文件以尾部追加的方式將數(shù)據(jù)存儲(chǔ)在文件末尾,這可以避免從磁盤(pán)檢索數(shù)據(jù)到內(nèi)存中時(shí)出現(xiàn)的隨機(jī)訪(fǎng)問(wèn),從而極大地提高了查詢(xún)性能。Redis經(jīng)常用作緩存以提高查詢(xún)的效率。緩存技術(shù)是指從磁盤(pán)讀取數(shù)據(jù)后將數(shù)據(jù)備份到內(nèi)存中。查詢(xún)數(shù)據(jù)時(shí),必須先讀取內(nèi)存中的數(shù)據(jù)。如果無(wú)法讀取它們,則在磁盤(pán)上讀取它們。同時(shí)將讀取的數(shù)據(jù)備份到內(nèi)存中。內(nèi)存中的數(shù)據(jù)讀取速度比磁盤(pán)快數(shù)百倍,所以當(dāng)經(jīng)常需要讀取某一數(shù)據(jù)時(shí),將它備份到緩存中,可以在緩存中快速地獲取數(shù)據(jù),以避免訪(fǎng)問(wèn)磁盤(pán)來(lái)重新讀取數(shù)據(jù)。對(duì)于一些大型的系統(tǒng),使用Redis緩存技術(shù)可以大大提高頻繁訪(fǎng)問(wèn)數(shù)據(jù)的速度。
2.5 ElasticSearch技術(shù)概述
ElasticSearch是一個(gè)分布式、可擴(kuò)展和實(shí)時(shí)性高的全文搜索引擎。而在各種搜索引擎中,Apache Lucene被公認(rèn)為最先進(jìn)、最高效、最全面的搜索引擎庫(kù)。ElasticSearch就是以它為基礎(chǔ)的。它需要集成到應(yīng)用程序中,才能發(fā)揮其強(qiáng)大的作用。ElasticSearch是用Java編寫(xiě)的,并使用Lucene構(gòu)建其索引進(jìn)行檢索。采用簡(jiǎn)單API來(lái)完成全文檢索功能。比起Lucence的復(fù)雜性,ElasticSearch明顯更簡(jiǎn)單、更方便。ElasticSearch的實(shí)現(xiàn)原理主要分為以下幾個(gè)步驟:用戶(hù)先將數(shù)據(jù)上傳到ElasticSearch數(shù)據(jù)庫(kù),然后通過(guò)分詞控制器將相關(guān)句子分割成單詞,并將其權(quán)重和分詞結(jié)果存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)搜索時(shí)根據(jù)權(quán)重以及分詞的結(jié)果將結(jié)果返回并呈現(xiàn)給用戶(hù)。ElasticSearch是開(kāi)箱即用的,將全文檢索、分布式技術(shù)以及數(shù)據(jù)分析技術(shù)結(jié)合在一起,可以近乎實(shí)時(shí)的檢索和儲(chǔ)存數(shù)據(jù),可擴(kuò)展性強(qiáng),可以處理百萬(wàn)級(jí)別的數(shù)據(jù)。
3微服務(wù)高并發(fā)電商平臺(tái)的需求分析
3.1 功能性需求分析
功能的需求決定了電商平臺(tái)必須提供的功能服務(wù),對(duì)功能進(jìn)行分析劃分出平臺(tái)必須完成的所有功能。經(jīng)過(guò)早期對(duì)用戶(hù)和市場(chǎng)的調(diào)研,微服務(wù)高并發(fā)的電商平臺(tái)功能模塊主要可以劃分為如下六個(gè)微服務(wù),分別是商品微服務(wù)、訂單管理微服務(wù)、購(gòu)物車(chē)管理微服務(wù)、用戶(hù)管理微服務(wù)、秒殺微服務(wù)和評(píng)論微服務(wù)。
3.1.1 商品微服務(wù)的需求分析
商品微服務(wù)是微服務(wù)高并發(fā)電商平臺(tái)最重要的模塊之一。此微服務(wù)提供的功能包括門(mén)戶(hù)系統(tǒng)的商品信息的展示,如商品標(biāo)題、圖片、價(jià)格、品牌、分類(lèi)等,商品的搜索,如按條件搜索、排序等搜素展示商品的信息。還有后臺(tái)的商品的管理,包括商品的增加刪除修改查詢(xún),商品品牌的增加刪除修改查詢(xún),商品的收藏查詢(xún),商品的瀏覽記錄等功能。商品微服務(wù)功能用例圖如圖3-1,3-2所示。
圖3-1 商品微服務(wù)用戶(hù)功能用例圖
圖3-2 商品微服務(wù)管理員功能用例圖
如沒(méi)特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請(qǐng)注明來(lái)自http://m.oulysa.com/news/6509.html