吳倩 應捷 韓旭




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