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