吳倩 應(yīng)捷 韓旭
摘要:為了解決電子商務(wù)平臺中高并發(fā)帶來的難題,改善用戶體驗,本文融入當(dāng)前業(yè)界的主流技術(shù)Nginx負(fù)載均衡、Redis緩存和MySQL數(shù)據(jù)庫的主從復(fù)制等,搭建了一個具有推薦功能的電商平臺。該平臺整體采用SSM框架:后端使用高性能服務(wù)器Tomoat處理用戶請求,形成分布式系統(tǒng):數(shù)據(jù)存儲采用MySQL數(shù)據(jù)庫,持久存儲用戶數(shù)據(jù);同時利用Luceflce和Solr完成網(wǎng)站搜索功能。此外,還利用基于用戶的協(xié)同過濾算法實現(xiàn)該電商平臺的推薦功能。本文設(shè)計的電子商務(wù)平臺具有相應(yīng)速度快、系統(tǒng)吞吐量大和穩(wěn)定性能好的特點,能夠為用戶提供良好的網(wǎng)絡(luò)購物服務(wù)。
關(guān)鍵詞:電子商務(wù)平臺,SSM,高并發(fā),協(xié)同過濾算法
引言
隨著互聯(lián)網(wǎng)發(fā)展的浪潮,互聯(lián)網(wǎng)產(chǎn)業(yè)已經(jīng)成為全球經(jīng)濟增長的主要驅(qū)動力,而電子商務(wù)作為互聯(lián)網(wǎng)產(chǎn)業(yè)中拉動消費的重要引擎,發(fā)展格外迅速。這些年來,人們在電子商務(wù)平臺開發(fā)研究方向進(jìn)行了大量的研究工作。2014年,杜林芝、孫小曼等人實現(xiàn)了基于B,s結(jié)構(gòu)的智能營銷系統(tǒng)。2016年,但牛和春明安設(shè)計了基于J2EE的財務(wù)管理系統(tǒng)。2017年,周銳設(shè)計了基于HIbernate和Spring MVC的旅游電子商務(wù)平臺。但目前的研究還不能很好的解決高并發(fā)帶來的系統(tǒng)癱瘓和響應(yīng)時間過長等問題。本文通過研究負(fù)載均衡、數(shù)據(jù)庫讀寫分離和主從復(fù)制等技術(shù),旨在解決訪問量急速增加時系統(tǒng)癱瘓問題。
1、電子商務(wù)平臺總體設(shè)計方案
1.1SSM框架介紹
系統(tǒng)開發(fā)采用SSM框架,它由SpringMVC、Spring、MyBatis三個開源框架整合而成。SpringMVC是一個前臺的控制框架,能夠做到自動的值的封裝。請求訪問過來被Dispatch-erservlet攔截,并且調(diào)用controllet層中相應(yīng)的方法,最終把結(jié)果返回給用戶,并且返回相應(yīng)的頁面。Spring是一個輕量級的控制反轉(zhuǎn)(1nversion of Control,loC)和面向切面(AspectOriented Programming,AoP)的容器框架,通過使用其獨特的配置文件以及注解方式進(jìn)行開發(fā)簡化。Mybatis是一款輕量級的持久層框架,由ibatis演化而來。本文構(gòu)建的基于SSM框架的電子商務(wù)平臺調(diào)用關(guān)系如圖1所示。
針對電子商務(wù)平臺的高并發(fā)問題,本文利用Nginx負(fù)載均衡加上tomcat集群實現(xiàn)分布式系統(tǒng),并且利用數(shù)據(jù)庫MySql的主從復(fù)制和讀寫分離減輕數(shù)據(jù)庫壓力,對首頁商品詳情頁數(shù)據(jù)進(jìn)行Redis緩存來提高訪問速度。根據(jù)用戶需求,該電商平臺系統(tǒng)總體可分為前臺系統(tǒng)和后臺系統(tǒng),其具體功能模塊如圖2所示。
1.2數(shù)據(jù)庫的設(shè)計
1.2.1后臺系統(tǒng)數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計
數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計是開發(fā)數(shù)據(jù)庫系統(tǒng)和web應(yīng)用的基礎(chǔ),根據(jù)應(yīng)用需求建立合理的數(shù)據(jù)模型。本文所涉及的商品分類表包含以下字段,首先創(chuàng)建商品類目表有類目,父類目ID,狀態(tài),排序號,是否為父類目,創(chuàng)建時間,修改時間。其次創(chuàng)建商品表,如商品lD,商品標(biāo)題,價格,庫存,條形碼,圖片,所屬類目,狀態(tài),如表1所示。
在設(shè)計這兩張表的時候考慮到只要創(chuàng)建主鍵就會自動創(chuàng)建索引。一般將where條件中頻繁出現(xiàn)的字段設(shè)為索引,添加索引的意義是將字段分開,進(jìn)行排序,查詢速度非???,但是索引越多越占磁盤空間。
1.2.2前臺系統(tǒng)數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計
本文所涉及的用戶數(shù)據(jù)表包含以下字段,用于唯一標(biāo)識的用戶ID,用戶名,密碼,電話號碼,郵箱。用戶表對user-name、phone、email這三個字段都創(chuàng)建了唯一索引,保證其值唯一性。在購物車系統(tǒng)中建立一個復(fù)合關(guān)鍵字索引,支持查詢用戶ID以及用戶ID+商品ID,并且增加幾個字段來進(jìn)行商品數(shù)量價格等的修改。其中購物車表結(jié)構(gòu)如表2所示。
1.3系統(tǒng)主要功能設(shè)計
1.3.1用戶注冊功能
網(wǎng)頁瀏覽器編碼和解碼方式必須一致,否則會遇到請求參數(shù)亂碼問題。ServletRequest中提供了setCharacterEncod-ing方法,可以通知服務(wù)器在處理請求時使用哪個指定編碼,本文采用utf-8編碼。參數(shù)驗證采用Hibernate validator提供的校驗注解,數(shù)據(jù)合法性的驗證時,將用戶輸入的密碼進(jìn)行MD5算法加密。
1.3.2推薦功能
1.3.3購物車功能
本設(shè)計將購物車系統(tǒng)放在后臺系統(tǒng)中,整個系統(tǒng)的數(shù)據(jù)操作全部提供API,其他系統(tǒng)在需要時就調(diào)用這些API,不僅實現(xiàn)數(shù)據(jù)共享,還實現(xiàn)數(shù)據(jù)一致。商品添加、修改維護(hù)、刪除都在后臺,其他系統(tǒng)要數(shù)據(jù)時,只需要調(diào)用接口。
首先創(chuàng)建Maven工程,增加依賴的開發(fā)包:json處理工具包,jsp相關(guān)依賴,apache工具組件單元測試包,連接池,分頁插件,配置tomcat插件。再創(chuàng)建運行菜單。添加商品到購物車時,首先判斷用戶是否登陸,若用戶未登錄則將商品保存到cooMe中,若用戶已登陸則將商品加入購物車。再判斷商品是否已在購物車中,若存在則數(shù)量加1,傳人userld,itemId,hum執(zhí)行update動作,若返回值為null則該商品不在購物車中。
1.3.4訂單和支付功能
訂單系統(tǒng)是一個單獨的系統(tǒng),對外提供接口,可以通過這接口來操作訂單。用戶在前臺系統(tǒng)點擊立即購買,它會請求后臺的contrailer,controller會調(diào)用service,service就會調(diào)用訂單系統(tǒng)的接口去下單,下單成功就返回一些數(shù)據(jù),最后提示用戶下單成功。
2、高并發(fā)解決方案
高并發(fā)是指通過設(shè)計保證系統(tǒng)能夠同時并行處理很多請求。高并發(fā)的指標(biāo)有響應(yīng)時間,吞吐量,每秒查詢率QPS,并發(fā)用戶數(shù)等。為了應(yīng)對系統(tǒng)高并發(fā)的狀況,本文利用分布式系統(tǒng)以及減輕數(shù)據(jù)庫壓力等技術(shù)來解決。
2.1 Nginx負(fù)載均衡和Tomcats集群
Nginx(engineX)是一個高性能HTTP和反向代理服務(wù)器,Nginx負(fù)載均衡加上Tom cats集群實現(xiàn)分布式系統(tǒng),使得應(yīng)用程序、數(shù)據(jù)庫、配置文件分別部署在獨立的資源上,并發(fā)能力和數(shù)據(jù)存儲能力會得到前所未有的提升。系統(tǒng)后臺采用輪詢的配置方法配置二臺tomcat服務(wù)器,這兩臺服務(wù)器訪問同一個數(shù)據(jù)庫。本系統(tǒng)的按照默認(rèn)的配置,如果有N個tomcat服務(wù)器,請求就會被輪流平均的分配到這N個tomcat服務(wù)器上。例如:3-t-tomcat,其具體配置為:
2.2 MySQL數(shù)據(jù)庫的主從復(fù)制
本文采用一主一從的數(shù)據(jù)庫主從配置方式:首先安裝兩個版本一致的MysQL數(shù)據(jù)庫,安裝完成后分別修改兩個數(shù)據(jù)庫的my.ini文件的端口號為3308和3309,并且修改datadir目錄為制定端口的目錄。分別注冊兩臺數(shù)據(jù)庫服務(wù)在/bin/目錄下執(zhí)行,修改注冊表,配置主從數(shù)據(jù)庫時兩個Mysql的版本必須一致,若IO_Running和SQL_Running狀態(tài)都為yes,則配置成功。
2.3 Amoeba實現(xiàn)數(shù)據(jù)庫的讀寫分離
讀寫分離路由需要JDK的支持,首先配置JDK環(huán)境變量,其次安裝并配置amoeba。設(shè)置amoeba要連接的mysql數(shù)據(jù)庫端口,默認(rèn)是3306,設(shè)置缺省的數(shù)據(jù)庫,當(dāng)連接amoeba時,操作表必須顯示制定的數(shù)據(jù)庫名。設(shè)置需要連接的數(shù)據(jù)庫服務(wù)器的賬號和密碼。在dbServer.xml中設(shè)置后端分別用于讀寫的數(shù)據(jù)庫名,本系統(tǒng)將主庫設(shè)置成專門用于寫的數(shù)據(jù)庫,從庫被配置成專門用來讀的數(shù)據(jù)庫。
2.4 Redis實現(xiàn)商品詳情頁緩存
商品詳情頁面的數(shù)據(jù)基本不變,并且訪問最頻繁,詳情頁添加緩存可解決高并發(fā)帶來的問題,本系統(tǒng)設(shè)置頁面緩存功能流程圖如圖3所示,但是因為在首次訪問是緩存中沒有數(shù)據(jù),只能從數(shù)據(jù)庫中查詢并放入緩存中,經(jīng)過測試發(fā)現(xiàn)速度是有很大的提升,原來的響應(yīng)時間為200ms左右,加上緩存后響應(yīng)時間在40ms左右。
3、實驗結(jié)果
3.1系統(tǒng)運行結(jié)果
本系統(tǒng)采用的服務(wù)器CPU參數(shù)為:1processor,3.3GHZ,i7。內(nèi)存容量為16GB。在前臺系統(tǒng)中,用戶可以訪問商城首界面,注冊和登錄賬戶,查看不同分類下的商品,查詢并瀏覽商品的詳細(xì)信息,將商品加入購物車,最終提交訂單,并且可以查詢訂單、修改訂單狀態(tài)。系統(tǒng)的搜索功能和推薦功能如圖4所示。
在前臺系統(tǒng)中,用戶可以訪問商城首界面,注冊和登錄賬戶,查看不同分類下的商品,查詢并瀏覽商品的詳細(xì)信息,將商品加入購物車,最終提交訂單,并且可以查詢訂單、修改訂單狀態(tài)。其注冊功能效果圖如圖5所示。
當(dāng)用戶決定要購買所選定商品時,點擊購物車,去結(jié)算并且輸入收件人姓名以及地址就可以完成下單。生成訂單以后可以選擇刪除訂單或者在線支付,本系統(tǒng)的在線支付功能通過第三方交易平臺易寶實現(xiàn)。訂單界面運行效果圖如圖6所示。
本文設(shè)計的后臺能夠?qū)崿F(xiàn)商品分類管理、商品信息管理、商品規(guī)格屬性、注冊用戶管理以及CMS內(nèi)容發(fā)布管理等功能。其中商品分類樹形結(jié)構(gòu)圖和信息管理運行圖如圖7所示,主要功能為商品的上架和下架,新增商品時點擊選擇類目,彈出窗口按照商品分類樹形結(jié)構(gòu)圖選擇商品類目。
3.2系統(tǒng)兼容性測試結(jié)果
本系統(tǒng)各子系統(tǒng)都為網(wǎng)站系統(tǒng),眾所周知,因為瀏覽器版本、類型、內(nèi)核等不一樣可能會導(dǎo)致相同的頁面在不同的瀏覽器中顯示不同的結(jié)果。所以測試要檢查全部種類內(nèi)核的瀏覽器,并給出不能夠適配瀏覽器的解決方案。測試結(jié)果如表3所示:
通過以上測試,在國內(nèi)常用的瀏覽器上對電商系統(tǒng)的前臺系統(tǒng)頁面做檢查可得出結(jié)論:產(chǎn)品在各個瀏覽器中均可正常顯示,并且js代碼和CSS樣式均能正常運行。
4、結(jié)語
本文研究了網(wǎng)站搭建的理論知識并結(jié)合業(yè)界較新的技術(shù),針對當(dāng)前電子商務(wù)平臺的高并發(fā)情況設(shè)計并實現(xiàn)了一個功能完善且十分穩(wěn)定的電商網(wǎng)站,該電商網(wǎng)站能夠很好的完成日常網(wǎng)上購物的相關(guān)功能。相比與其他電商平臺而言,該電商平臺最突出的特點就是能夠抵抗高并發(fā),在訪問量瞬間增加時不會出現(xiàn)系統(tǒng)崩潰或者遲遲刷新不出界面的情況,并且通過實踐證明了該平臺的穩(wěn)定性,能達(dá)到日常生活需求并且能投入使用。