張林
摘? 要:基于微服務(wù)框架搭建的“商對客”商業(yè)模式(B2C商業(yè)模式)的商城平臺,對商城平臺前后端進(jìn)行分離,前端使用vue.js(視圖層開發(fā)框架)進(jìn)行頁面渲染,后端采用微服務(wù)框架SpringCloud;每個微服務(wù)單體模塊使用SpringBoot框架進(jìn)行開發(fā),微服務(wù)單體模塊之間使用消息隊(duì)列RabbitMq進(jìn)行通信,使用Redis技術(shù)進(jìn)行緩存。該設(shè)計(jì)實(shí)現(xiàn)了高可用、高并發(fā)和可擴(kuò)展的全品類商對客模式電商網(wǎng)站,使客戶與商家交易效率提高,給客戶帶來了良好的購物體驗(yàn)。
關(guān)鍵詞:微服務(wù)架構(gòu);“商對客”商業(yè)模式;SpringCloud
中圖分類號:TP311? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:2096-1472(2021)-09-55-03
Abstract: This paper is based on a mall platform of the business-to-customer business model (B2C business model) built on the microservices framework, separating front and back ends of the mall platform. vue.js (view layer development framework) is used in the front end for page rendering, and SpringCloud, a microservice framework, is used in the back end. Each microservice monomer module is developed by using SpringBoot framework, the message queue RabbitMq is used for communication between the microservice monomer modules, and Redis technology is used for caching. The design achieves a high-availability, high-concurrency and extensible business-to-customer e-mall website of full-category goods, improving the efficiency of customer-business transactions and bringing customers a good shopping experience.
Keywords: microservice architecture; business-to-customer business model; SpringCloud
1? ?引言(Introduction)
隨著科學(xué)技術(shù)的日益進(jìn)步,電子商務(wù)成為社會活動的重要部分,用戶實(shí)現(xiàn)了在家一鍵下單,購買支付,一鍵退款,方便了人們的生活。以往的單體應(yīng)用架構(gòu)根本支撐不住如此強(qiáng)大的購物熱潮,在客流量增大的情況下,服務(wù)器常常因?yàn)闊o法承受高并發(fā)量而造成宕機(jī)的問題,使用戶體驗(yàn)感差。而后發(fā)展的分布式架構(gòu)和SOA(粗粒度服務(wù))架構(gòu)擴(kuò)展性差,耦合性高,也不滿足此系統(tǒng)的需求?;诖耍疚拈_發(fā)的系統(tǒng)商城平臺采用微服務(wù)架構(gòu),按照業(yè)務(wù)被拆分為多個微服務(wù),以松耦合的方式被獨(dú)立部署[1],使用Spring(SpringCloud+SpringBoot)框架進(jìn)行開發(fā),Nginx(輕量級web服務(wù)器)作為反向代理,Redis(內(nèi)存數(shù)據(jù)庫)作為緩存,MySQL(關(guān)系型數(shù)據(jù)庫)作為后臺數(shù)據(jù)庫;使用RabbitMq(消息隊(duì)列)方式提高了全品類網(wǎng)站平臺的響應(yīng)速度,實(shí)現(xiàn)了商品顯示、商品搜索、加入購物車、下單購買等功能。
2? ?技術(shù)方案(Technical solutions)
2.1? ?微服務(wù)架構(gòu)
2.1.1? ?微服務(wù)
微服務(wù)是面向服務(wù)軟件開發(fā)的最新發(fā)展趨勢,其通常采用去中心化的服務(wù)管理方式[2]。它的核心思想是根據(jù)業(yè)務(wù)需求,將業(yè)務(wù)拆分為一個一個的服務(wù),實(shí)現(xiàn)去耦合,每個服務(wù)都對應(yīng)唯一的業(yè)務(wù),做到一個服務(wù)只做一件事,服務(wù)單一職責(zé)化,能夠被獨(dú)立部署到生產(chǎn)環(huán)境。服務(wù)內(nèi)部通過RPC或消息驅(qū)動API通信,對外通過RESTful API輕量交互信息[3]。微服務(wù)架構(gòu)是粗粒度SOA架構(gòu)的升華,其強(qiáng)調(diào)業(yè)務(wù)和功能徹底組件化和服務(wù)化。
微服務(wù)的優(yōu)點(diǎn):
(1)服務(wù)獨(dú)立,一個服務(wù)只干一件事,獨(dú)立部署;
(2)開發(fā)簡單,效率提高,團(tuán)隊(duì)之間工作互不干擾;
(3)微服務(wù)是松耦合的;
(4)易于和第三方集成。
微服務(wù)的缺點(diǎn):
(1)開發(fā)和運(yùn)營人員要處理分布式系統(tǒng)的復(fù)雜性;
(2)運(yùn)維成本提高;
(3)數(shù)據(jù)一致性存在問題;
(4)服務(wù)間通信成本增大。
2.1.2? ?SpringCloud框架簡介
SpringCloud是一套基于SpringBoot構(gòu)建的通用工具集[4],它是一系列框架的有序集合,這些框架致力于分布式服務(wù)治理;它本身不會提供具體功能的操作,主要專注于服務(wù)之間的通信、熔斷、監(jiān)控;它有很多組件來支持一套功能[5]。
2.2? “商對客”商業(yè)模式
“商對客”(即B2C)模式是企業(yè)對消費(fèi)者的電子商務(wù)模式,企業(yè)建立自己的網(wǎng)站,在線上通過互聯(lián)網(wǎng)銷售自己的產(chǎn)品,宣傳自己的品牌,進(jìn)行網(wǎng)絡(luò)推廣和網(wǎng)絡(luò)營銷,使線上的交易配合線下的銷售和宣傳,提升了企業(yè)的服務(wù)質(zhì)量,更好地增強(qiáng)了用戶的黏性。B2C是一種綜合性商城,不僅是一種百貨商店,還是多種服務(wù)商店;不僅具有較大的購物群體,也實(shí)現(xiàn)了穩(wěn)定的網(wǎng)絡(luò)平臺,在支付網(wǎng)絡(luò)以及安全體系創(chuàng)建方式上都實(shí)現(xiàn)了完整的建設(shè)系統(tǒng),為企業(yè)發(fā)展和人們消費(fèi)提供了較大方便[6]。
2.3? ?Redis
Redis是基于鍵值對存儲結(jié)構(gòu)的系統(tǒng),類屬于NoSQL[7]。Redis讀寫數(shù)據(jù)的時候不會受到硬盤I/O速度的限制,讀取速度非??靃8]。Redis中的Value支持五種數(shù)據(jù)類型:字符串、字符串列表、字符串集合、有序字符串集合、哈希。Redis支持?jǐn)?shù)據(jù)備份到磁盤上,且操作具有原子性。
3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(System design and implementation)
3.1? ?整體架構(gòu)
靈耀商城平臺是一個全品類的網(wǎng)站平臺,在MVC架構(gòu)的基礎(chǔ)上,根據(jù)具體功能和實(shí)際業(yè)務(wù)需求融入微服務(wù)架構(gòu)。每個微服務(wù)模塊按照業(yè)務(wù)功能進(jìn)行拆分,每個微服務(wù)的功能職責(zé)單一,除通用模塊Common外,其余模塊相互獨(dú)立,沒有功能性依賴,其他模塊如要使用則直接調(diào)用對外提供的API訪問接口。根據(jù)業(yè)務(wù)需求,將商城平臺的前后端進(jìn)行分離開發(fā),并將整個系統(tǒng)按照業(yè)務(wù)功能劃分為多個子系統(tǒng),每個子系統(tǒng)仍然遵循MVC三層架構(gòu)設(shè)計(jì),分為界面層Controller、業(yè)務(wù)邏輯層Service和數(shù)據(jù)訪問層Dao,接口遵循RESTful架構(gòu)風(fēng)格對外提供服務(wù)。
系統(tǒng)為了防止網(wǎng)關(guān)故障從而導(dǎo)致整個系統(tǒng)無法響應(yīng)的問題,設(shè)計(jì)了兩個網(wǎng)關(guān),其中一個作為備用網(wǎng)關(guān)。系統(tǒng)前端使用域名訪問,此項(xiàng)目域名使用SwitHosts本地域名解析的方式,端口解析使用Nginx反向代理的方式,提高了網(wǎng)關(guān)的高可用性,網(wǎng)關(guān)與服務(wù)之間還配置了負(fù)載均衡和服務(wù)容錯。為了實(shí)現(xiàn)微服務(wù)之間的數(shù)據(jù)同步,使用RabbitMq消息隊(duì)列實(shí)現(xiàn)消息的異步發(fā)送接收。
在系統(tǒng)架構(gòu)中,所有微服務(wù)在Eureka上進(jìn)行注冊,整個服務(wù)端采用API網(wǎng)關(guān)負(fù)載均衡、服務(wù)路由、請求過濾等功能,運(yùn)用Zuul組件進(jìn)行服務(wù)路由。為了實(shí)現(xiàn)每個服務(wù)的獨(dú)立性,降低系統(tǒng)耦合,對外只提供API接口,http遠(yuǎn)程調(diào)用組件Feign Client。
在此系統(tǒng)中,包括商家運(yùn)營人員使用的后臺管理系統(tǒng)和用戶使用的前端門戶系統(tǒng)??傮w框架圖如圖1所示。
3.2? ?靈耀商城功能設(shè)計(jì)
通過需求分析以及微服務(wù)架構(gòu)設(shè)計(jì)思想,系統(tǒng)按照功能需求分為七個獨(dú)立的微服務(wù)模塊,如圖2所示。
3.3? ?運(yùn)營人員后臺管理系統(tǒng)
運(yùn)營管理人員登錄系統(tǒng)可以實(shí)現(xiàn)商品管理、人員管理、銷售管理以及權(quán)限管理。在商品管理中,通過搭建商品微服務(wù)實(shí)現(xiàn)分類管理、品牌管理、商品列表及規(guī)格參數(shù)管理。在配置文件中使用Eureka訂閱商品服務(wù),每5 s就發(fā)送一次心跳,超時就過期,相關(guān)配置如圖3所示,而后編寫相應(yīng)的代碼進(jìn)行CRUD處理,前端頁面進(jìn)行渲染。
3.4? ?前臺門戶網(wǎng)站
3.4.1? ?搜索
搭建搜索微服務(wù)模塊,實(shí)現(xiàn)用戶搜索某個商品。通過使用注解@EnableFeignClients開啟feign組件,定期在Eureka的注冊中心拉取搜索服務(wù),在resources的配置文件中也需要配置相應(yīng)的Eureka客戶端服務(wù),用于向Eureka訂閱相關(guān)服務(wù)。由于復(fù)雜的業(yè)務(wù)和海量數(shù)據(jù)以及高并發(fā)需求,為了提高搜索速度,搜索功能使用Elasticsearch全文檢索技術(shù),實(shí)現(xiàn)實(shí)時搜索以及分詞搜索并支持多用戶,例如搜索手機(jī),查詢后前端頁面進(jìn)行渲染如圖4所示。
3.4.2? ?購物車
搭建購物車微服務(wù)。如果用戶還未登錄,用戶瀏覽商品添加購物車時,添加到本地瀏覽器的Localstorage中,支付時跳轉(zhuǎn)到登錄頁面;如果用戶已經(jīng)登錄,用戶在選擇到自己心儀的產(chǎn)品時想加入購物車,則在添加商品時會添加到Redis中,并且查看購物車時,會先查看本地瀏覽器中是否有數(shù)據(jù),若沒有數(shù)據(jù)就直接調(diào)用Redis中的數(shù)據(jù);若有數(shù)據(jù)則將二者數(shù)據(jù)合并,最后更新到數(shù)據(jù)層MySQL數(shù)據(jù)庫中。購物車可以添加多個數(shù)量,如果不滿意可以刪除訂單或者移到“我的關(guān)注”中。用戶選擇好之后,系統(tǒng)會自動計(jì)算好選擇商品的總金額,用于用戶進(jìn)行結(jié)算下單,如圖5所示。
3.4.3? ?用戶注冊登錄
搭建用戶注冊微服務(wù),實(shí)現(xiàn)用戶注冊。用戶注冊采用短信驗(yàn)證碼的方式,通過用戶名、密碼、確認(rèn)密碼、手機(jī)號以及短信驗(yàn)證碼的方式進(jìn)行注冊,添加信息到數(shù)據(jù)庫中。為了防止密碼泄露,使用非對稱加密的方式對密碼進(jìn)行加密保存到數(shù)據(jù)庫中。
搭建登錄認(rèn)證微服務(wù),實(shí)現(xiàn)用戶登錄。根據(jù)注冊的用戶名和密碼進(jìn)行登錄,前端獲取用戶名和密碼,后端根據(jù)用戶名查詢到相對應(yīng)的用戶id,使用相同的鹽進(jìn)行加密并與數(shù)據(jù)庫中密碼項(xiàng)進(jìn)行比較,若相同,則登錄成功。
3.5? ?數(shù)據(jù)庫設(shè)計(jì)
根據(jù)業(yè)務(wù)需求進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。(1)用戶注冊相關(guān)信息,便可添加用戶信息到用戶表中,登錄時查詢用戶表是否有響應(yīng)的數(shù)據(jù)信息;(2)用戶登錄網(wǎng)站,瀏覽和查詢商品,商品的顯示按照不同通用規(guī)格參數(shù)和特有規(guī)格參數(shù)進(jìn)行劃分;(3)用戶添加購物車,若登錄,便可添加至購物車信息表中,進(jìn)行下單便可在訂單信息表中添加訂單信息,在訂單頁面進(jìn)行查看。詳細(xì)E-R圖如圖6所示。
4? ?結(jié)論(Conclusion)
本文主要實(shí)現(xiàn)了基于微服務(wù)架構(gòu)的一個B2C商業(yè)模式的靈耀商城的開發(fā),滿足了系統(tǒng)高并發(fā)、高可用、可擴(kuò)展的需求,以及大規(guī)模用戶網(wǎng)上購物下單的基本功能需求。此前,系統(tǒng)的基本功能已開發(fā)完成,在進(jìn)一步調(diào)試改進(jìn)中。
參考文獻(xiàn)(References)
[1] 馮志勇,徐硯偉,薛霄,等.微服務(wù)技術(shù)發(fā)展的現(xiàn)狀與展望[J].計(jì)算機(jī)研究與發(fā)展,2020,57(5):1103-1122.
[2] 吳化堯,鄧文俊.面向微服務(wù)軟件開發(fā)方法研究進(jìn)展[J].計(jì)算機(jī)研究與發(fā)展,2020,57(3):525-541.
[3] 黃顯琛.基于微服務(wù)架構(gòu)的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2020,11(3):16-17.
[4] 劉斌.基于SpringCloud的電信綜合服務(wù)保障系統(tǒng)微服務(wù)改造之路[J].中小企業(yè)管理與科技,2019(11):90-91.
[5] 周永圣,候峰裕,孫雯,等.基于SpringCloud微服務(wù)架構(gòu)的進(jìn)銷存管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2018,31(11):129-130,133.
[6] 謝孝淼.基于JAVA技術(shù)的B2C電子商城網(wǎng)站系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].信息通信,2016(02)102-103.
[7] 秦溧,艾青.基于Redis技術(shù)的頁面緩存研究[J].科技風(fēng),2021(12):74-76.
[8] 張斌,任富彬,沈煒.基于SpringCloud的食品安全溯源系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件工程,2019,22(8):27-30.
作者簡介:
張? 林(1996-),女,碩士,工程師.研究領(lǐng)域:分布式軟件系統(tǒng)開發(fā).