程書玲,吳丹丹
(1.浙江工貿(mào)職業(yè)技術(shù)學(xué)院,浙江 溫州325000; 2.中國電信股份有限公司溫州分公司,浙江 溫州 32500)
近年來,世界經(jīng)濟(jì)正向數(shù)字化轉(zhuǎn)型,大力發(fā)展數(shù)字經(jīng)濟(jì)成為人們的共識。我國數(shù)字經(jīng)濟(jì)發(fā)展進(jìn)入了新階段[1],數(shù)字經(jīng)濟(jì)與實體經(jīng)濟(jì)有了深度融合。電子商務(wù)是數(shù)字經(jīng)濟(jì)的重要組成部分,是數(shù)字經(jīng)濟(jì)最活躍、最集中的表現(xiàn)形式之一[2]。我國電子商務(wù)交易規(guī)模日益擴(kuò)大,并保持高速增長態(tài)勢,網(wǎng)絡(luò)零售規(guī)模全球最大,產(chǎn)業(yè)創(chuàng)新活力世界領(lǐng)先,基于微服務(wù)架構(gòu)的電商系統(tǒng)應(yīng)運(yùn)而生。
為了使用戶快速地找到商品,獲得有助于決策的消息,方便商品管理,設(shè)計了基于微服務(wù)架構(gòu)的電商系統(tǒng)。該系統(tǒng)屬于B2C電商系統(tǒng),分為網(wǎng)站前臺與管理后臺,采用apache dubbo+ssm集成框架搭建,持久層框架采用現(xiàn)在流行的mybatis通用mapper,前端框架采用主流的vue.js與elementui[3]。業(yè)務(wù)設(shè)計上優(yōu)化了滿減優(yōu)惠計算、秒殺、評論、倉庫物流、統(tǒng)計分析、后臺訂單等相關(guān)業(yè)務(wù)功能開發(fā)及權(quán)限設(shè)置等功能。技術(shù)上融合了jdk1.8,多處代碼發(fā)揮了其特性。
采用流行的前后端分離架構(gòu)開發(fā),由用戶層、UI層、微服務(wù)層、數(shù)據(jù)層等部分組成,為PC、H5等客戶端用戶提供服務(wù)。采用apache dubbo作為服務(wù)發(fā)現(xiàn)及服務(wù)治理框架,采用阿里云oss實現(xiàn)圖片資源的云存儲,使用redis作為緩存中間件,用redis框架操作緩存。采用rabbitmq作為消息中間件,實現(xiàn)工程模塊的解耦、分布式事務(wù)及服務(wù)端推送,用阿里云通信作為短信解決方案,采用cas (版本5)作為單點登錄解決方案,使用微信支付,通過內(nèi)網(wǎng)穿透工具實現(xiàn)回調(diào)測試。使用spring security權(quán)限框架,采用RBAC權(quán)限模型,采用elastichsearch作為搜索中間件,采用thymeleaf技術(shù)實現(xiàn)網(wǎng)頁靜態(tài)化及服務(wù)端渲染,采用vue.js+elementui實現(xiàn)客戶端渲染解決方案,采用任務(wù)調(diào)度解決方案spring task,使用CORS作為跨域解決方案。
圖1 技術(shù)架構(gòu)
客戶可通過手機(jī)端及電腦登錄,登錄方式采用手機(jī)號快速登錄,還可以通過用戶名密碼登錄。前端功能模塊有支付服務(wù)、訂單服務(wù)、用戶服務(wù)、商品服務(wù)、運(yùn)營服務(wù)、系統(tǒng)服務(wù)、短信服務(wù)等。服務(wù)模塊采用Dubbo微服務(wù)架構(gòu),輕量級部署,以平衡每臺服務(wù)器的壓力,使業(yè)務(wù)更好地運(yùn)行[4-5]。支付服務(wù)根據(jù)微信支付的開發(fā)文檔調(diào)用,使用QRcode.js在頁面生成二維碼。訂單服務(wù)勾選需要發(fā)貨的訂單,點擊批量發(fā)貨按鈕。用戶服務(wù)是對于用戶密碼的保護(hù),通常會進(jìn)行加密,存放在數(shù)據(jù)庫中,用戶登錄時,將其輸入的密碼加密,再與數(shù)據(jù)庫中存放的密文進(jìn)行比較,以驗證用戶密碼是否正確。商品服務(wù)包括商品審核與商品上架。消息服務(wù)運(yùn)用的組件是WebSocket,是HTML5 中一種新的通信協(xié)議,能夠?qū)崿F(xiàn)瀏覽器與服務(wù)器之間的全雙工通信。如果瀏覽器與服務(wù)端都支持WebSocket協(xié)議,該方式實現(xiàn)的消息推送是最高效、簡潔的。
前端框架框使用ElementUI與Vue.js,網(wǎng)站后臺使用Vue.js+ElementUI,網(wǎng)站前臺采用Vue.js 與模板技術(shù)thymeleaf。前端頁面與后臺服務(wù)器使用ajax異步請求模型,ajax可以異步請求數(shù)據(jù),快速響應(yīng)頁面請求,用戶感知良好。
后端后臺包括商品、訂單、庫存、用戶、運(yùn)營、統(tǒng)計、財務(wù)、設(shè)置等功能。采用Spring Security技術(shù)限制,用戶只能登錄且必須是管理員訪問權(quán)限才可以訪問資源。如果用戶沒有登錄訪問主頁,將執(zhí)行攔截跳轉(zhuǎn)到登錄,登錄后將跳轉(zhuǎn)到主頁。使用RabbitMQ可實現(xiàn)延遲消息,底層采用數(shù)據(jù)庫集群,為了提高查詢性能,將一個數(shù)據(jù)庫的數(shù)據(jù)分散到不同數(shù)據(jù)庫中存儲,即數(shù)據(jù)庫分片。MyCat是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實現(xiàn)了MySQL協(xié)議的服務(wù)器,用MySQL客戶端工具及命令進(jìn)行訪問,后端可用MySQL原生協(xié)議與多個MySQL服務(wù)器通信,其核心功能是分表分庫,即將一個大表水平分割為n個小表,存儲在后端 MySQL服務(wù)器或其他數(shù)據(jù)庫中,系統(tǒng)數(shù)據(jù)合并或數(shù)據(jù)庫變更等情況下方便數(shù)據(jù)遷移和合并。
該系統(tǒng)涉及的主要數(shù)據(jù)庫表有訂單日志表(t_orderlog)、退貨退款原因表(t_returncause)、套餐表(t_setmeal)、訂單表(t_order)、預(yù)約設(shè)置表(t_ordersetting)。其中,檢查項表存儲檢查項基本信息,包括檢查項編碼、檢查項名稱、該檢查項適用的性別及年齡、價格、注意事項。訂單日志表如表1所示。
表1 訂單日志基本信息
退貨退款原因表包括原因、排序、退貨退款狀態(tài),如表2所示。
表2 退貨退款原因
表3 退貨退款申請表
退貨退款申請表根據(jù)id修改退貨退款訂單的狀態(tài)為1,記錄當(dāng)前管理員id及當(dāng)前時間。需要做一些必要的驗證,退款的金額不能大于原訂單的金額。若駁回退款,根據(jù)id修改退貨退款訂單的狀態(tài)為2,記錄當(dāng)前管理員id、當(dāng)前時間及駁回理由。將原訂單明細(xì)的退款狀態(tài)改為未申請。
采用滿減規(guī)則進(jìn)行優(yōu)惠金額計算,需對購物車的商品按照品類進(jìn)行分組,某個品類如果達(dá)到了優(yōu)惠設(shè)置的消費(fèi)額度,則按照設(shè)置優(yōu)惠金額進(jìn)行減免。對應(yīng)的滿減優(yōu)惠如表4所示。
表4 滿減優(yōu)惠表
表5 廣告表
廣告表用于首頁廣告輪播圖渲染的實現(xiàn),廣告基本信息存于數(shù)據(jù)庫表中(如廣告名稱、廣告詳情、廣告地址),廣告圖片存于面向?qū)ο蠓?wù)器中。
訂單表及訂單明細(xì)表數(shù)量很多,如果每次都對訂單表及訂單明細(xì)表進(jìn)行實時統(tǒng)計,查詢效率低下,故通常是每天定時統(tǒng)計上一天的數(shù)據(jù),將統(tǒng)計結(jié)果存儲在一張表中,當(dāng)用戶執(zhí)行管理后臺統(tǒng)計功能時再對這張表進(jìn)行統(tǒng)計,給前端返回統(tǒng)計結(jié)果。存儲統(tǒng)計結(jié)果的表結(jié)構(gòu)如表6。
表6 存儲統(tǒng)計結(jié)果
隨著系統(tǒng)業(yè)務(wù)復(fù)雜度及用戶并發(fā)量的增加,人們對系統(tǒng)的要求越來越高。傳統(tǒng)應(yīng)用架構(gòu)靈活性不夠,難以迭代開發(fā)基于微服務(wù)架構(gòu)的電商系統(tǒng)開發(fā)效率高,在高并發(fā)時服務(wù)器承載能力均衡,能夠?qū)崿F(xiàn)業(yè)務(wù)的正常運(yùn)行。