程書(shū)玲,吳丹丹
(1.浙江工貿(mào)職業(yè)技術(shù)學(xué)院,浙江 溫州325000; 2.中國(guó)電信股份有限公司溫州分公司,浙江 溫州 32500)
近年來(lái),世界經(jīng)濟(jì)正向數(shù)字化轉(zhuǎn)型,大力發(fā)展數(shù)字經(jīng)濟(jì)成為人們的共識(shí)。我國(guó)數(shù)字經(jīng)濟(jì)發(fā)展進(jìn)入了新階段[1],數(shù)字經(jīng)濟(jì)與實(shí)體經(jīng)濟(jì)有了深度融合。電子商務(wù)是數(shù)字經(jīng)濟(jì)的重要組成部分,是數(shù)字經(jīng)濟(jì)最活躍、最集中的表現(xiàn)形式之一[2]。我國(guó)電子商務(wù)交易規(guī)模日益擴(kuò)大,并保持高速增長(zhǎng)態(tài)勢(shì),網(wǎng)絡(luò)零售規(guī)模全球最大,產(chǎn)業(yè)創(chuàng)新活力世界領(lǐng)先,基于微服務(wù)架構(gòu)的電商系統(tǒng)應(yīng)運(yùn)而生。
為了使用戶(hù)快速地找到商品,獲得有助于決策的消息,方便商品管理,設(shè)計(jì)了基于微服務(wù)架構(gòu)的電商系統(tǒng)。該系統(tǒng)屬于B2C電商系統(tǒng),分為網(wǎng)站前臺(tái)與管理后臺(tái),采用apache dubbo+ssm集成框架搭建,持久層框架采用現(xiàn)在流行的mybatis通用mapper,前端框架采用主流的vue.js與elementui[3]。業(yè)務(wù)設(shè)計(jì)上優(yōu)化了滿(mǎn)減優(yōu)惠計(jì)算、秒殺、評(píng)論、倉(cāng)庫(kù)物流、統(tǒng)計(jì)分析、后臺(tái)訂單等相關(guān)業(yè)務(wù)功能開(kāi)發(fā)及權(quán)限設(shè)置等功能。技術(shù)上融合了jdk1.8,多處代碼發(fā)揮了其特性。
采用流行的前后端分離架構(gòu)開(kāi)發(fā),由用戶(hù)層、UI層、微服務(wù)層、數(shù)據(jù)層等部分組成,為PC、H5等客戶(hù)端用戶(hù)提供服務(wù)。采用apache dubbo作為服務(wù)發(fā)現(xiàn)及服務(wù)治理框架,采用阿里云oss實(shí)現(xiàn)圖片資源的云存儲(chǔ),使用redis作為緩存中間件,用redis框架操作緩存。采用rabbitmq作為消息中間件,實(shí)現(xiàn)工程模塊的解耦、分布式事務(wù)及服務(wù)端推送,用阿里云通信作為短信解決方案,采用cas (版本5)作為單點(diǎn)登錄解決方案,使用微信支付,通過(guò)內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)回調(diào)測(cè)試。使用spring security權(quán)限框架,采用RBAC權(quán)限模型,采用elastichsearch作為搜索中間件,采用thymeleaf技術(shù)實(shí)現(xiàn)網(wǎng)頁(yè)靜態(tài)化及服務(wù)端渲染,采用vue.js+elementui實(shí)現(xiàn)客戶(hù)端渲染解決方案,采用任務(wù)調(diào)度解決方案spring task,使用CORS作為跨域解決方案。

圖1 技術(shù)架構(gòu)
客戶(hù)可通過(guò)手機(jī)端及電腦登錄,登錄方式采用手機(jī)號(hào)快速登錄,還可以通過(guò)用戶(hù)名密碼登錄。前端功能模塊有支付服務(wù)、訂單服務(wù)、用戶(hù)服務(wù)、商品服務(wù)、運(yùn)營(yíng)服務(wù)、系統(tǒng)服務(wù)、短信服務(wù)等。服務(wù)模塊采用Dubbo微服務(wù)架構(gòu),輕量級(jí)部署,以平衡每臺(tái)服務(wù)器的壓力,使業(yè)務(wù)更好地運(yùn)行[4-5]。支付服務(wù)根據(jù)微信支付的開(kāi)發(fā)文檔調(diào)用,使用QRcode.js在頁(yè)面生成二維碼。訂單服務(wù)勾選需要發(fā)貨的訂單,點(diǎn)擊批量發(fā)貨按鈕。用戶(hù)服務(wù)是對(duì)于用戶(hù)密碼的保護(hù),通常會(huì)進(jìn)行加密,存放在數(shù)據(jù)庫(kù)中,用戶(hù)登錄時(shí),將其輸入的密碼加密,再與數(shù)據(jù)庫(kù)中存放的密文進(jìn)行比較,以驗(yàn)證用戶(hù)密碼是否正確。商品服務(wù)包括商品審核與商品上架。消息服務(wù)運(yùn)用的組件是WebSocket,是HTML5 中一種新的通信協(xié)議,能夠?qū)崿F(xiàn)瀏覽器與服務(wù)器之間的全雙工通信。如果瀏覽器與服務(wù)端都支持WebSocket協(xié)議,該方式實(shí)現(xiàn)的消息推送是最高效、簡(jiǎn)潔的。
前端框架框使用ElementUI與Vue.js,網(wǎng)站后臺(tái)使用Vue.js+ElementUI,網(wǎng)站前臺(tái)采用Vue.js 與模板技術(shù)thymeleaf。前端頁(yè)面與后臺(tái)服務(wù)器使用ajax異步請(qǐng)求模型,ajax可以異步請(qǐng)求數(shù)據(jù),快速響應(yīng)頁(yè)面請(qǐng)求,用戶(hù)感知良好。
后端后臺(tái)包括商品、訂單、庫(kù)存、用戶(hù)、運(yùn)營(yíng)、統(tǒng)計(jì)、財(cái)務(wù)、設(shè)置等功能。采用Spring Security技術(shù)限制,用戶(hù)只能登錄且必須是管理員訪(fǎng)問(wèn)權(quán)限才可以訪(fǎng)問(wèn)資源。如果用戶(hù)沒(méi)有登錄訪(fǎng)問(wèn)主頁(yè),將執(zhí)行攔截跳轉(zhuǎn)到登錄,登錄后將跳轉(zhuǎn)到主頁(yè)。使用RabbitMQ可實(shí)現(xiàn)延遲消息,底層采用數(shù)據(jù)庫(kù)集群,為了提高查詢(xún)性能,將一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)分散到不同數(shù)據(jù)庫(kù)中存儲(chǔ),即數(shù)據(jù)庫(kù)分片。MyCat是一個(gè)開(kāi)源的分布式數(shù)據(jù)庫(kù)系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,用MySQL客戶(hù)端工具及命令進(jìn)行訪(fǎng)問(wèn),后端可用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,其核心功能是分表分庫(kù),即將一個(gè)大表水平分割為n個(gè)小表,存儲(chǔ)在后端 MySQL服務(wù)器或其他數(shù)據(jù)庫(kù)中,系統(tǒng)數(shù)據(jù)合并或數(shù)據(jù)庫(kù)變更等情況下方便數(shù)據(jù)遷移和合并。
該系統(tǒng)涉及的主要數(shù)據(jù)庫(kù)表有訂單日志表(t_orderlog)、退貨退款原因表(t_returncause)、套餐表(t_setmeal)、訂單表(t_order)、預(yù)約設(shè)置表(t_ordersetting)。其中,檢查項(xiàng)表存儲(chǔ)檢查項(xiàng)基本信息,包括檢查項(xiàng)編碼、檢查項(xiàng)名稱(chēng)、該檢查項(xiàng)適用的性別及年齡、價(jià)格、注意事項(xiàng)。訂單日志表如表1所示。

表1 訂單日志基本信息
退貨退款原因表包括原因、排序、退貨退款狀態(tài),如表2所示。

表2 退貨退款原因

表3 退貨退款申請(qǐng)表
退貨退款申請(qǐng)表根據(jù)id修改退貨退款訂單的狀態(tài)為1,記錄當(dāng)前管理員id及當(dāng)前時(shí)間。需要做一些必要的驗(yàn)證,退款的金額不能大于原訂單的金額。若駁回退款,根據(jù)id修改退貨退款訂單的狀態(tài)為2,記錄當(dāng)前管理員id、當(dāng)前時(shí)間及駁回理由。將原訂單明細(xì)的退款狀態(tài)改為未申請(qǐng)。
采用滿(mǎn)減規(guī)則進(jìn)行優(yōu)惠金額計(jì)算,需對(duì)購(gòu)物車(chē)的商品按照品類(lèi)進(jìn)行分組,某個(gè)品類(lèi)如果達(dá)到了優(yōu)惠設(shè)置的消費(fèi)額度,則按照設(shè)置優(yōu)惠金額進(jìn)行減免。對(duì)應(yīng)的滿(mǎn)減優(yōu)惠如表4所示。

表4 滿(mǎn)減優(yōu)惠表

表5 廣告表
廣告表用于首頁(yè)廣告輪播圖渲染的實(shí)現(xiàn),廣告基本信息存于數(shù)據(jù)庫(kù)表中(如廣告名稱(chēng)、廣告詳情、廣告地址),廣告圖片存于面向?qū)ο蠓?wù)器中。
訂單表及訂單明細(xì)表數(shù)量很多,如果每次都對(duì)訂單表及訂單明細(xì)表進(jìn)行實(shí)時(shí)統(tǒng)計(jì),查詢(xún)效率低下,故通常是每天定時(shí)統(tǒng)計(jì)上一天的數(shù)據(jù),將統(tǒng)計(jì)結(jié)果存儲(chǔ)在一張表中,當(dāng)用戶(hù)執(zhí)行管理后臺(tái)統(tǒng)計(jì)功能時(shí)再對(duì)這張表進(jìn)行統(tǒng)計(jì),給前端返回統(tǒng)計(jì)結(jié)果。存儲(chǔ)統(tǒng)計(jì)結(jié)果的表結(jié)構(gòu)如表6。

表6 存儲(chǔ)統(tǒng)計(jì)結(jié)果
隨著系統(tǒng)業(yè)務(wù)復(fù)雜度及用戶(hù)并發(fā)量的增加,人們對(duì)系統(tǒng)的要求越來(lái)越高。傳統(tǒng)應(yīng)用架構(gòu)靈活性不夠,難以迭代開(kāi)發(fā)基于微服務(wù)架構(gòu)的電商系統(tǒng)開(kāi)發(fā)效率高,在高并發(fā)時(shí)服務(wù)器承載能力均衡,能夠?qū)崿F(xiàn)業(yè)務(wù)的正常運(yùn)行。