童二寶 彭戰軍



摘 ?要: aiBuy商城是一個基于J2EE的綜合性B2C電商平臺,用戶可以在商城內瀏覽和購買商品。aiBuy商城采用分布式集群技術,整合SSM框架來實現。使用Nginx作為圖片服務器、搭建Solr集群作為搜索服務器、Redis做緩存、ActiveMQ做消息中間件、Dubbo做服務中間件,SSO來實現單點登錄。aiBuy商城可以解決高并發、高可用和高性能等諸多問題。經過測試,該系統可以基本滿足用戶購物需求。
關鍵詞: J2EE;分布式集群;SSM;Redis;高并發
中圖分類號: TP391 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.08.029
本文著錄格式:童二寶,彭戰軍. 基于分布式集群技術的SSM購物商城系統設計[J]. 軟件,2019,40(8):123126
【Abstract】: aiBuy Mall is a comprehensive B2C e-commerce platform based on J2EE, users can browse and purchase goods in the mall. aiBuy Mall adopts distributed cluster technology and integrates SSM framework to achieve. Use Nginx as the image server, build the Solr cluster as the search server, Redis as the cache, ActiveMQ as the message middleware, HttpClient as the service middleware, and SSO to implement single sign-on. aiBuy Mall can solve many problems such as high concurrency, high availability and high performance. After testing, the system can basically meet the user's shopping needs.
【Key words】: J2EE; Distributed Cluster; SSM; Redis; High Concurrency
0 ?引言
隨著生活水平的提高,網上購物逐漸成為當下人們追求潮流的方式之一。購物大潮導致的直接問題就是購物網站系統的崩潰,這是由于服務器在高并發情況下承受的負載壓力過大,導致出現宕機現象。在如此環境下,設計可以承受高并發的電商平臺就顯得十分重要。
J2EE(Java2 Platform Enterprise Edition)[1]是SUN公司使用Java技術開發的一套企業級應用規范,它是為了簡化企業應用開發、管理和部署。J2EE采用了MVC分層設計模式[2],降低了組件之間的耦合度,大大減輕了客戶端和服務端的壓力。MVC包括了三大層:Model層(模型層)、View層(視圖層)、Controller層(控制層)。該系統以當前較為流行的輕量級SSM[3-5]框架(SpringMVC、Spring和MyBatis)為核心框架,摒棄了原始的SSH框架(Struts2、Spring和Hibernate),提高了開發效率,簡化了程序開發步驟。在MVC基礎上,再添加服務層(Service層)以及數據訪問層(Dao層),Controller層負責接收和處理來自View層的請求轉發,Service層負責業務邏輯處理,Dao層負責與數據庫交互,實現持久化操作。將SSM框架與目前火熱的分布式集群技術整合在一起,可以將各個功能模塊獨立出來,降低模塊之間的耦合性,方便進行分布式部署,就有望設計出一個可使用的大型網上購物平臺。
1 ?系統介紹
采用分布式系統架構的aiBuy商城系統的模塊劃分主要由以下幾部分組成:后臺管理模塊、前臺管理模塊、訂單生成模塊、商品搜索模塊、登錄(注冊)模塊以及訂單支付模塊等。后臺管理模塊主要完成對商品的管理(包含商品的增加)刪除、修改、查詢),以及用戶信息管理等;前臺系統包含商城的首頁顯示、用戶的注冊、登錄以及商品瀏覽等;訂單生成模塊主要是提供下單、訂單查詢、訂單修改以及訂單提交等服務;商品搜索模塊即提供商品的搜索功能,方便用戶;登錄(注冊)模塊實現用戶的注冊和登錄操作;訂單支付模塊提供支付服務。典型的分布式架構如圖1所示。
2 ?系統設計
2.1 ?開發環境
操作系統:Windows 7;數據庫服務器:MySQL 5.7,Redis 3.0.0;Web服務器:Tomcat 8.0,Nginx 1.8.0;開發工具:MyEclipse(自帶Maven 3.3.3插件);版本控制工具:SVN 1.8.0;JDK版本:JDK1.8.0。配置:主頻2.0 GHZ以上;內存:4G以上;硬盤:100G以上。
2.2 ?相關技術
系統后端是通過整合J2EE和SSM輕量級框架來實現,前端用戶界面采用EasyUI[6-7]框架實現。前后端是通過RESTful[8]架構來實現分離的。
(1)Spring框架。Spring為現代基于Java的在任何類型的部署平臺上的企業應用程序提供了全面的編程和配置模型。Spring的一個關鍵要素是應用程序級別的基礎架構支持:Spring專注于企業應用程序的“管道”,以便團隊可以專注于應用程序級業務邏輯,而無需與特定部署環境建立不必要的聯系。Spring框架包含兩大理念:IoC(控制反轉)和AOP(面向切面編程),這兩個理念大大簡化了Java的開發。
(2)SpringMVC框架。SpringMVC是Spring的一部分,SpringMVC旨在運用MVC架構的思想,來實現Web MVC設計模式,將Web層進行解耦,簡化日常的Web開發。MVC的模式圖如圖2所示。
(3)MyBatis框架。MyBatis是一款持久層框架,MyBatis相對于Hibernate,最明顯的優勢是避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集,只需要簡單的XML或者注解配置就可以實現持久化。
(4)Redis數據庫。Redis數據庫是一個Nosql數據庫,是以Key-Value鍵值對的方式保存數據,主要應用于數據緩存、高并發下負載均衡和Session共享。aiBuy商城使用的是Redis的集群版,啟動了6個Redis實例,三主三從,這樣做的目的是在宕機情況下,最大可能地保證數據正確性和安全性。
(5)Nginx服務器。Nginx是一款開源的HTTP服務器和反向代理服務器,在aiBuy商城中,Nginx主要是作為圖片服務器、反向代理服務器以及負載均衡服務器使用。
(6)Solr集群。Solr是Apache下的一個開源 ?項目,它是基于Lucene的全文搜索服務器。Solr的集群版使用的是基于Solr和Zookeeper的集群方案SolrCloud,其中Zookeeper是作為集群的信息中心。SolrCloud有諸多優點,如:集中式的配置信息、自動容錯、查詢時自動負載均衡等。
2.3 ?系統功能模塊設計
整個系統的設計采用分布式系統架構實現,即把系統按照不同的模塊拆分成多個子系統,各個子系統之間通過調用接口來通信,增加或者刪除某個模塊不會對其它模塊產生影響,可以實現靈活的分布式部署。系統的架構設計如圖3所示,服務層按照執行模塊的不同,分別提供不同的接口服務,如商品服務、登錄服務、訂單服務以及支付服務等,這樣做的好處是降低了各個服務之間的耦合,當要增加一個服務模塊時,可以直接添加,不會對其它模塊產生影響;而用戶所要做的就是直接調用這些服務來完成購物操作,這個過程的實現要依靠RPC遠程調用服務,這里選擇Dubbo來實現。這些服務是以接口的形式表現,這些接口都統一采用RESTful格式。持久層的工作主要是對數據庫的數據進行操作(增刪改查),系統采用Mysql數據庫集群和讀寫分離(MyCat實現)來減輕數據庫的壓力,集群和讀寫分離均在Linux[9]環境下進行配置和運行,使用的是CentOS[10]版本。使用Redis集群來作為緩存,也可以大大減輕數據庫的壓力。
2.4 ?數據庫表結構設計
根據設計需求系統所需要的表有商品表、商品內容表、商品類目標、商品描述表、商品規格參數表、訂單表、用戶表等11個表。這些表均對應于程序中的實體類,以下列舉商品表相關信息,如表1所示:
3 ?系統實現
由于系統的模塊和功能較多,以下只介紹其中一些模塊的設計和實現。
3.1 ?后臺管理模塊
后臺管理模塊主要涉及的是對商品的信息進行管理,即對商品和商品規格進行CRUD(增刪改查)操作以及對用戶訂單進行處理。在設計商品表和商品規格表時,已經為不同的商品設置了不同的id,因此在對商品進行增刪改查時,只需要將指定商品的id設置到SQL語句中,在Dao層中對數據庫進行操作,就可以實現這一目的。以下程序段的功能是根據商品id查詢商品信息并返回。
public Item getItemById (long id) {
ItemExample ex = new ItemExample();
Criteria cri = ex.createCriteria();
cri.andIdEqualTo (id);
List
if(list!=null && list.size() > 0){
Item item = list.get (0);
return item;
}
return itemMapper.selectByPrimaryKey (id);
}
3.2 ?購物車模塊
在購物車模塊設計中,首先要考慮的問題是用戶在登錄和未登錄兩種情況下將商品加入購物車(購物車在程序中是一個類),后臺應該怎樣保存商品信息。在用戶將商品加入到購物車時,通過在程序中加入攔截器來判斷用戶是否登錄,如果已登錄,則直接將購物車放入Redis緩存中;未登錄則將購物車放入cookie[11]中,待登錄后再放入Redis緩存中,這樣的設計類似于京東商城,可以確保用戶在登錄和未登錄情況下,均可以將商品加入購物車,購物車的設計框架如圖4所示。
3.3 ?支付模塊
支付模塊使用的是阿里巴巴旗下的Alipay(支付寶)技術實現,為了測試方便,整個支付操作是在支付寶的沙箱環境下進行,上線時會用真實環境。沙箱環境下可以不用提供真實的商戶appid(用于識別商戶的唯一ID)、商戶公鑰、私鑰等參數,支付寶的沙箱環境可以模擬出這些數據供使用。沙箱環境也會提供相關的Demo供測試,在把支付程序整合到整個項目中時,把支付作為一個單獨的服務,并對外提供調用接口。當用戶在商城中提交訂單并點擊支付時,程序會調用支付服務接口,并把訂單號、訂單名稱、付款金額、商品描述等信息作為參數傳遞給支付服務程序,用戶在支付時,可以選擇PC支付也可以使用移動端掃碼支付,且支付速度很快。以下是程序跳轉到支付寶界面進行支付的部分代碼,程序的首要任務是要根據傳遞過來的訂單號來獲得訂單信息,即獲得Order這個訂單對象。
@RequestMapping (value = “/goAlipay”, produces = “text/html; charset = UTF-8”)
@ResponseBody
public String goAlipay (String orderId, HttpServletRequest request, HttpServletRequest response) throws Exception {
Orders order = orderService.getOrderById (orderId);
Product product = productService. getProductById (order.getProductId());
4 ?結論
本文通過流行的SSM(SpringMVC、Spring和MyBatis)框架實現了一個網上商城系統設計,該系統實現了基本的網上購物操作,具有一定的實用價值。在系統設計上,采用了分布式架構設計,使得相互獨立的模塊能夠緊密聯系在一起,降低了系統之間的耦合性,提高了程序運行效率。經測試,系統能夠穩定運行,各個功能模塊的設計都很成功,達到了預期目的且系統的可擴展性很強,方便后續的改良和完善。
參考文獻
[1] 唐權. SSM框架在JavaEE教學中的應用與實踐[J]. 福建電腦, 2017(12): 93-94.
[2] 王金朔, 孫延輝. 基于SSM和Java的網上訂餐系統設計[J]. 信息通信, 2018, 190(10): 104-105.
[3] 錢春陽. 基于SSM的“互聯網+”數據銀行的設計與實現[J]. 電腦知識與技術, 2018, 14(18): 70-72.
[4] 龔夢星, 劉波, 黃天天, et al. 基于SSM框架與嵌入式系統的農村應急廣播系統設計[J]. 軟件, 2017(5): 51-56. .
[5] 吉豪杰. 大數據時代下基于SSM框架的高校畢業生檔案管理系統的研發設計[J]. 軟件, 2018, 39(11): 159-166.
[6] 謝孝淼. 基于JAVA技術的B2C電子商城網站系統設計與實現[J]. 信息通信, 2016(2).
[7] 戈家龍, 吳紅亞, 楊保華. 基于SSM的前后端分離電商網站的設計與實踐[J]. 電腦知識與技術, 2018, 14(13): 282-283.
[8] 王寬, 李紅信. 基于SSM的同城電商平臺的設計與實現[J]. 電腦知識與技術, 2018, 14(17) : 301-302.
[9] 文靜, 杜柯柯, 達文姣. 基于SSM的網上商城的開發與設計[J]. 電腦知識與技術: 學術交流, 2018, 14(3): 86-87.
[10] 江志剛. 基于SSM框架的網上題目錄入答題系統設計[J]. 無線互聯科技, 2017(20): 62-63.
[11] 龍文佳, 肖敏, 劉義. 基于分布式集群架構下的SSM電商購物平臺設計[J]. 電腦編程技巧與維護, 2019, 403(01): 45-47.