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