基于Dubbo框架的秒杀系统设计与实现-2

1.1         论文的目标与研究内容

1.1.1        研究目标

针对电影院线实际业务需求,设计出一套功能完整、性能高效稳定的秒杀系统。根据目标业务需求,将分布式框架Dubbo、Redis内存数据库、分布式消息队列RocketMQ、Spring框架集成应用于秒杀系统,实现秒杀系统功能模块化,有效快速的利用闲置的硬件资源提高秒杀系统活动时系统的稳定性。秒杀活动上线时可以快速水平拓展秒杀系统的服务提供者,活动结束时易于收缩系统,不会造成不必要的硬件资源浪费。在高并发下系统负载超过系统处理极限时保证系统不宕机,有部分用户可以正常使用。故本文确立如下研究目标:


(1)业务功能完整的影票秒杀系统。

(2)秒杀系统所必须的非功能性需求。


根据以上两点研究目标确定相应的研究内容如下:


(1)研究如何使用Nginx和Dubbo分布式框架针对秒杀系统进行合理的限流。

(2)研究如何使用Redis内存数据库提升系统整体性能。

(3)研究如何使用分布式消息队列RocketMQ对秒杀请求进行削峰填谷保证系统的稳定性。


1.1.2        研究内容

本系统预计准备要实现的目标是开发一个功能相对完整的影票秒杀系统,让用户可以方便地使用公司APP进行“秒杀”活动,让后台管理人员可以自由发布想要的秒杀信息和产品,使管理员可方便地管理和监控网上秒杀现状。一个典型的秒杀系统分为前端秒杀系统和后台管理系统,两个子系统分工不同,功能明确,针对不同的服务对象,前台秒杀系统主要面向用户,后端管理系统主要面向管理员,其中管理员角色分为商品管理员和秒杀活动管理员。针对线上院线业务需要构建业务需要的秒杀交易功能,该功能具有可靠、易用、易拓展等特点。将Dubbo框架应用于秒杀系统,实现秒杀系统服务化;融合了Spring框架使得各个功能模块化,降低功能模块耦合度,提交了开发效率,降低了维护和修改业务逻辑的成本,有效快速的利用闲置资源提高秒杀系统活动时的稳定性。高并发下系统负载超过极限时保证系统不宕机。


1.2         论文组织结构


第一章:根据课题的内容研究了论文的背景和意义,并且着眼国内外系统的现状,进行了系统的说明以及背景和意义,针对业务需求内容提出了论文的系统目标主要需求功能点,根据需求整理出了论文的整体框架


第二章:系统相关技术的研究与介绍。介绍影票秒杀系统使用的相关技术,Dubbo分布式服务框架核心功能、Dubbo 分布式服务框架组成、Nginx工作原理进程解析、Redis数据类型等系统核心技术。


第三章:基于Dubbo框架的秒杀系统需求分析。此章根据影票秒杀的具体业务进行了分析,分析的内容包括:(1)功能性需求秒杀用户用例、商品管理员用例、秒杀活动管理员用例。(2)非功能性需求系统安全性需求、系统稳定性需求、系统的优化。针对系统角色对用户进行了划分:秒杀用户、商品管理员、秒杀活动管理员等角色和功能。


第四章:基于Duboo框架的秒杀系统整体设计。此章根据需求分析的结果,对系统进行了设计,具体分为影票秒杀业务流程设计、秒杀业务负载均衡设计、核心秒杀接口的设计,针对系统进行了模块划分,秒杀模块、查询活动信息模块、活动管理模块等几个部分。


第五章:影票秒杀系统的设计与实现。此章根据以上两章的分析和设计,具体的描述了核心功能的实现,并针对秒杀接口的缓存和异步、防刷过载保护,以及实际的nginx和rocketMQ优化等功能进行了详细的阐述。针对实际内容进行了业务分析,提供了各个功能模块的类图和流程图,并且针对非功能性需求防刷功能、过载保护、以及整体系统的优化进行了详细的阐述。


第六章:影票秒杀系统的测试。此章对实现的功能进行测试,详细的描述了测试环境的硬件软件和部署情况,根据业务进行了测试用例的编写,针对核心秒杀接口进行了功能测试和压力测试。


结论:本章概括全文,对本论文的研究成果及完成的工作进行总结,分析目前存在的问题,并对进一步的工作方向进行了展望。



第一章          系统相关技术的研究与介绍

本章节会介绍在“秒杀”系统中使用的相关技术,为了后面章节里的需求设计和功能实现阐述奠定了技术基础。影票秒杀系统基于Jave平台开发,使用SpringMVC、Dubbo框架、Redis内存数据库、RocktMQ分布式消息队列等技术进行的开发与实现。Dubbo框架使用了很简洁的模型,服务提供者(Provider)、消费者(Consumer)、注册中心(registry)、监控中心(monitor)。应对高并发访问需要系统采用负载均衡技术来分发网络请求,Nginx是一个很好的选择。负载均衡的优点是,分担请求到多台服务器,解决并发高的问题,提高系统拓展性。消息队列可以在秒杀系统中起到削峰填谷作用的作用。Redis是基于内存的存储数据缓存,确保了程序数据快速的读写速度。同时Redis提供了丰富的数据类型字符串(string)、哈希(hash)、双向链表(list)、不重复集合(set)等[12]


1.1         常见互联网电商技术架构

普通的网站应用面对的主要问题是复杂的使用场景、不断变更需求有时还要面对历史数据问题,高并发系统主要面对的不单单是以上描述的问题,还要面对极高的用户并发量和快速的业务处理。按照常规的划分方法分为业务逻辑的功能性需求和性能数量、安全挑战的非功能性需求。


常见的互联网站点设计通常遵循MVC(Model View Controller),模型视图控制。各个模块单独处理自己负责的内容,相互独立。控制层负责根据业务场景进行业务处理,模型层负责持久化的访问和存储;视图层根据返回的业务数据展示给前端内容。通常这种模式可以满足大多数业务场景,但是在秒杀的业务场景下,这个模式需要更细节的抽象和替换,但是大致还是按照这种模式划分的,如图2所示。应用层提供可视化服务给秒杀用户、商品管理员、秒杀活动管理员。一般情况下都是已HTML、JSP等方式进行展示,主要负责显示秒杀商品信息,把前端操作人的信息发送给后边的服务层,然后接收由服务层返回的HTML、JSP等页面信息展现给前端操作员浏览。应用层整体架构上使用了Dubbo框架的消费者模块,具体实现使用了Spring框架中的SpringMVC的View模块实现,本系统内使用HTML静态页面和JSP动态页面组成。应用层和服务层、数据层是相互独立开的,应用层和只关心后端传输过来的数据如何进行展示,不关心具体服务层、数据层具体是如何存储和计算的,只展示后端信息给前端操作用户[13]


基于Dubbo框架的秒杀系统设计与实现-2_第1张图片


服务层,秒杀系统的服务层主要负责接收展现层传输过来的用户请求,并且把相应的数据内容请求转发给对应的业务逻辑模块中去,根据不同业务模块的处理结果,然后再返回给展现层,最终已JSP的形式展示给前端用户浏览。服务层相当于Dubbo框架的服务提供者,具体功能也是使用了Spring框架实现。服务提供者收到展示层的用户请求,会对业务数据进行初步判断,并且调用相应的实现模块去执行具体的业务需求,最终接收实现功能模块的返回,并且把信息封装好返回给应用层显示出来。


数据层,经过消息队列削峰填谷后的数据,最终会持久化到Mysql数据库中,数据层使用Mybatis框架来提供数据库的访问服务。使用Mybatis提供的Bean和库表映射机制,使开发可以用Java面向对象的方式来操作Mysql关系型数据库。数据持久层采用DAO(Data Access Object)抽象和封装了一些对数据库中数据的基本操作,减少了业务逻辑代码和数据库之间的耦合度,如果数据源发生转换或者改变,只需要修改系统相应配置文件中的对象配置信息即可,而业务逻辑代码不需要改变。Mysql数据库进行了主从复制,可以实现读写分离等功能提高系统整体性能。


1.1         Dubbo分布式服务框架

Dubbo分布式框架是阿里巴巴开源分布式解决方案,该框架一大特色是按照不同角色来划分系统功能,系统采用这种方式可以使各个模块之间松耦合,但是功能模块之间还是高内聚,Dubbo框架是具有易拓展、性能高、易监控、服务化、模块化等优点的RPC框架。按照服务角色划分,Dubbo框架使用了很简洁的模型,服务提供者(Provider)、消费者(Consumer)、注册中心(registry)、监控中心(monitor);服务提供者顾名思义给系统其它模块提供服务,消费者负责调用系统其他的服务,注册中心负责维护消费者和服务提供者的调用关系,监控中心负责监控服务提供者、消费者、注册中心等各个子模块的运行情况[14]。Dubbo经过实际线上测试,并且是纯Java开发支持多种协议。给开发者提供了成熟的远程调用框架其核心部分包含如表1所示Dubbo功能在系统中的应用表:


(1) RPC分布式调用:提供Socekt级别的调用框架,默认使用Netty进行远程通讯,还支持mima、grizzly等方式的实现,使用client-server模式进行数据的传输。


(2)负载均衡:提供了多种远程调用的方式可以选择,去中心化极大的提升了系统的健壮性;默认提供了随机、权重、Hash的负载均衡方式,后台可动态修改,也可以根据框架提供的接口自己实现和自己业务相关的负载均衡方案。


(3)注册中心:本身Dubbo框架是去中心化的,所有服务提供者和消费者都定时在注册中心注册,通过对注册中心的监控非常方便服务的具体调用关系,系统平行拓展收缩非常简便且不影响正常业务的运行[15]






你可能感兴趣的:(java,web,负载均衡,架构设计)