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