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

圖3-1 商品微服務用戶功能用例圖

圖3-2 商品微服務管理員功能用例圖