system: [SYSTEM]

user: 3. 海田在线商城的设计与实现 由于移动互联网的兴起，海田在线商城需要满足PC端、PAD和智能手机端的跨屏兼容；满足海田物流产业园18个专业市场实现商品的线上管理、线上销售、在线支付等。系统架构图体现的是整个系统的层次性和技术体现，系统架构图见图9。 如图9所示，海田商城采用基于B/S的三层体系架构模式，并利用Dubbo分布式架构，将系统把模块拆分并使用接口通信，降低模块之间的耦合度。可拓展性和分布式部署都相对与传统架构来的灵活。 3.1. 开发技术 3.1.1. Dubbo分布式解决多用户高并发问题 Dubbo是阿里巴巴开源的分布式服务框架，它最大的特点是按照分层的方式来架构，使用这种方式可以使各个层之间解耦合。透明化的远程方法调用，就像调用本地方法一样调用远程方法，只需要简单API侵入。架构如图10所示。 海田在线商城的开发过程中存在这种情况，服务提供方(Provider)发布服务以后，服务消费方(Consumer)发出一次调用请求，恰好这次由于网络问题调用失败，虽然可以采用重试这种策略，但是存在发布服务所在节点出现故障无法提供服务。所以我们搭建Dubbo集群解决了多用户同时访问网站某一个服务容易发生冲突的问题，在出现节点故障无法提供服务的时候，通过调用其它服务节点来解决，这就提高了服务的可用性。 3.1.2. Solr集群实现商品快速搜索 Solr是基于Lucene的全文搜索服务器，同时对其进行了扩展，提供了比Lucene更为丰富的查询语言同时实现了可配置、可扩展并且优化了查询性能。SolrCloud是Solr提供的分布式搜索方案，原理是由多台Solr服务器集中部署，共同来完成搜索和所索引库的任务。使用Solr集群的方式能更好的解决海田在线商城的多用户高并发、海量数据的搜索需求。 搭建Solr集群主要用途是降低单机的处理压力，将海田商城的搜索服务项目切换到这个集群，商城 图6. 商品系统思维导图 图7. 订单系统思维导图 图8. 仓储系统思维导图 图9. 海田在线商城系统架构图 图10. Dubbo架构图 中的所有商品信息导入到Solr的索引库中，在java后台通过SolrJ对Solr集群进行搜索相关的操作。最终实现对商品快速的全站搜索服务。 3.1.3. Redis提升数据访问速度 Redis 即为Remote Dictionary Server (远程数据服务)的缩写是一个开源的，支持网络、可基于内存亦可持久化的日志型、Key-Value的Nosql数据库，并提供java等多种语言的API。 Redis的主要特点是以内存空间来换数据读取时间，在海田商城的开发中，对于商品信息、商城活动、会员信息等一些短时间内不需要改变数据的，但是又要多次被用户点击访问。Redis即可缓解这类数据库的压力，降低商城的数据库负荷，海田商城将发布的商品信息保存到Redis数据库，用户可以立即查看到，然后将内存中的数据同步到关系型数据库。相对与Memcached分布式内存对象缓存系统，Redis支持存储的value类型相对更多，可靠性上比Memcached来的强 [ 4 ] 。更适合海田商城这种多位一体的电商平台。 3.2. SSM框架的研究 SSM框架整合即为Spring、SpringMVC、MyBatis三个开源框架的整合。商城主要是采用Spring (4.2.4.RELEASE)，MyBatis (3.2.8)进行SSM整合。 3.2.1. Spring框架 Spring是一个开放源代码、轻量级的Java开发框架。通过Spring提供的IoC容器，我们可以将对象之间的依赖关系交由Spring进行控制，避免硬编码所造成的过度程序耦合。在这里举个例子来说明IoC的核心思想，支付宝在整个淘宝体系里就是庞大的IoC容器，交易双方之外的第三方，提供可靠性可依赖可灵活变更交易方的资源管理中心。我们在设计商城的时候：先设计商家，然后根据商家设计商品，接着根据商品设计买家，最后根据买家设计仓储。这里就出现了一个“依赖”关系：商品依赖商家，买家依赖商品，商品依赖库存。商品、买家、卖家、仓储之间的资源不由使用资源的双方管理，而由不使用资源的第三方即Spring的IoC容器来管理，这可以带来很多好处。第一，资源集中管理，实现资源的可配置和易管理。第二，降低了使用资源双方的依赖程度，也就是我们说的耦合度。这样以后我们在对商品、卖家、买家、仓储的服务上增加或者增强功能模块的时候就不必要在商品、买家、卖家、仓储每个服务去修改，提高了后期维护的效率。 Spring还有一个很重要的特性，就是可以方便集成各种优秀的框架。海田在线商城主要集成了Dubbo服务框架、Redis缓存服务、Solr搜索服务、ActiveMQ消息队列服务。Spring集成海田商城要用到的第三方框架后，就可以通过简单的配置调用第三方框架提供的API，实现商城的业务服务。具体整合及特性如下： 1) 在商城SOA业务服务层集成了分布式的Dubbo服务框架，例如使用Dubbo实现分布式服务框架来提供相关商品的展示、商品搜索等服务时，只需在提供这些服务的web程序的SSM配置文件上加上Dubbo的关键配置 这样就可以把商品服务注册到服务中心，当要使用这些商品服务的web程序，如商城主页，就可以透明化的远程方法调用，就像调用本地方法一样调用远程方法。 2) 在商城的系统服务层整合了用来做缓存的Redis缓存库和用来提供搜索服务的Solr集群，使得整个系统数据库的负载大大降低，提高运行速度。数据库则整合了MyBatis，下面详述。 3) Spring系统中我们还内嵌了ActiveMQ，ActiveMQ是强劲的消息总线，不论是在海田商城分布式开发过程中还是在运维上都扮演着重要的角色，ActiveMQ的特点主要是，可以建立网络通信的通道，进行数据的可靠传送。在传输中保证了数据传输的完整性，而且能够跨平台传输。 3.2.2. SpringMVC SpringMVC属于Spring框架的衍生模块，SpringMVC通过DispatcherServlet这个前端控制器(也叫中央调度器，笔者认为中央调度器更能体现其作用)，来调用MVC的三大件：Controller、Model、View。这样就保证MVC的每一个组件只与DispatcherServlet耦合，而彼此之间独立运行，大大降低了程序的耦合性。使得海天商城的设计复合程序的开发之道，高内聚底耦合的设计原则。 3.2.3. MyBatis的选用 MyBatis是集合多种操作型关系数据库的概念和方法，它是一个强大的数据访问工具和解决方法 [ 5 ] 。对比Hibernate，MyBatis是一个半自动框架，Hibernate则是一个全自动框架，无法直接维护SQL。MyBatis在书写SQL的灵活性很好，Hibernate就不行，会比较麻烦。本文使用MyBatis作为海田在线商城这种多变性的项目，Hibernate比较适合稳定的项目。而且MyBatis速度相对于Hibernate的速度要快些。 3.3. 功能页面结构实现 3.3.1. 前端系统架的搭建 前端系统的搭建(如图11所示)主要是实现前后端分离开发的，只在数据库层面进行交互上，这样前端能够缓解多用户、高并发的问题。有利于整个平台的性能能够更高效的运行。后台则通过发布服务，供PC端和移动端公用，提高了代码的复用度，降低了系统之间耦合度。 3.3.2. 前端页面的实现 基于SSM框架的后台系统，前台系统主要实现了功能模块页面有：首页信息模块、商品展示信息模块、购物车信息模块、商品展示信息模块、用户管理模块、订单管理模块等12个模块。所有模块都能够实现PC端(如图12所示)、PAD端和智能手机端(如图13所示)的分辨率自适应，满足绝大部分的用户需求。 图11. 前端系统架构图 图12. 海田在线商城PC端页面结构 图13. 海田在线商城智能手机端页面结构 Table 1 Data sheet list summar 表名 描述 zjhtshop_content 内容管理表 zjhtshop_content_category 内容分类表 zjhtshop_item 商品详情表 zjhtshop_item_cat 商品分类表 zjhtshop_item_desc 商品描述表 zjhtshop_item_param 商品规则参数表 zjhtshop_item_param_item 商品规格和商品的关系表 zjhtshop_order 订单详情表 zjhtshop_order_item 订单商品表 zjhtshop_order_shipping 订单收货详情表 zjhtshop_user 用户表 表1. 数据表清单内容汇总 图14. 数据表字段设计 3.4. 数据库设计 海田在线商场依照初定的项目需求设计了表1所示数据表。 海田在线商城的数据表字段及类型的具体设计如图14所示。