基于分布式集群技术的SSM购物商城系统设计

2019-10-08 11:55童二宝彭战军
软件 2019年8期

童二宝 彭战军

摘  要: 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);

Listlist=itemMapper.selectByExample (ex);

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.