基于分布式缓存和消息队列的消息推送系统的开发.docx
- 文档编号:3855107
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:76
- 大小:1.84MB
基于分布式缓存和消息队列的消息推送系统的开发.docx
《基于分布式缓存和消息队列的消息推送系统的开发.docx》由会员分享,可在线阅读,更多相关《基于分布式缓存和消息队列的消息推送系统的开发.docx(76页珍藏版)》请在冰豆网上搜索。
基于分布式缓存和消息队列的消息推送系统的开发
硕士学位论文
(专业学位)
Adissertationsubmittedto
TongjiUniversityinconformitywiththerequirementsfor
ThedegreeofMasterofEngineering
September,2014
基于分布式缓存和消息队列的消息推送中心
陈连升
同济大学
学位论文版权使用授权书
本人完全了解同济大学关于收集、保存、使用学位论文的规定,同意如下各项内容:
按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版;在不以赢利为目的的前提下,学校可以适当复制论文的部分或全部内容用于学术活动。
学位论文作者签名:
年月日
同济大学学位论文原创性声明
本人郑重声明:
所呈交的学位论文,是本人在导师指导下,进行研究工作所取得的成果。
除文中已经注明引用的内容外,本学位论文的研究成果不包含任何他人创作的、已公开发表或者没有公开发表的作品的内容。
对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确方式标明。
本学位论文原创性声明的法律责任由本人承担。
学位论文作者签名:
年月日
摘要
在信息爆炸的现在,信息量以指数的规律猛烈增长。
随着手机操作系统的不断更新,手机客户端APP软件的不断推出,运营商通过APP向用户进行推广的需求不断扩大,所以针对手机APP的消息推送系统应运而生。
本文利用Memcached分布式缓存和ActiveMQ消息队列服务,在Oracle数据库基础上进行针对手机端APP的消息推送中心的设计和开发,完成了系统开发的目标。
通过运用本系统,手机APP的运营商可以通过界面来实现图文消息的定制,由本系统后台自动、及时、快速、准确地将消息推送到手机APP中以达到消息推送的目的。
本系统主要包含消息定制功能、消息准备功能、消息推送功能等。
该系统具有实用性、实时性和可靠性,能够满足中国电信手机客户端的消息推送的需求,并且具有很强的移植性,可以经过改造,适用于各种手机终端APP。
本文首先对系统的需求进行了分析,确定了本系统所要使用的框架和技术。
然后按照业务流程对系统进行了模块划分,然后分别对各模块的设计和实现进行了详细的阐述。
本文还对系统完成后的功能测试和压力测试做了阐述。
最后对本系统进行了评价和展望、客观的指出了本系统的优缺点以及下一步的改善和研究方向。
关键词:
分布式缓存;消息队列;消息推送;设计
ABSTRACT
Inthisinformationexplosionera,theamountofinformationhasincreasedintensively.WiththeupdatingoftheMobilePhoneOperatingsystemandtheintroductionofSoftwareAPP,thedemandthatAPPOperatorspromoteinformationtousershasenlarged,andthustheAPPMessagePushsystemcameintobeing.
ThisthesisisconductedtocompletethedesignanddevelopmentoftheAPPMessagePushsystembyusingMemcachedandActiveMQservice,andTextMessageCustomizationisachievedthroughthissystem.ThesystemcanachievethegoaltopushmessagestoAPPautomatically,timely,rapidly,accuratelyinthebackground.Itmainlycontainsfunctionsofmessagecustomization,messagepreparation,messagepushandetc.Itispractical,real-timeandreliable,andcansatisfytheneedsofTelecommobilephoneclient.ItalsohasastrongportabilityandcanbemodifiedforavarietyofAPP.Thethesisfirstanalyzedtheframeworkandtechnologyofthesystem,andthenmadethemodulepartitioninthebusinessprocess,andthendescribedthedesignandimplementofeachmoduleindetailandrespectively.Thestudyalsoelaboratedonthefunctionaltestandthepressuretest.Finally,theadvantagesanddisadvantagesofthissystemwereevaluatedandprospectedobjectively,togetherwiththefurtherimprovementsandresearchingdirections.
Keywords:
Memcached;ActiveMQ;MessagePush;Design
目录
第1章引言1
1.1课题背景1
1.2研究意义1
1.3国内外研究现状1
1.4本课题研究内容3
1.5内容框架4
第2章系统技术介绍4
2.1分布式缓存介绍4
2.1.1分布式缓存的特点4
2.1.2Memcached介绍5
2.2消息队列介绍6
2.2.1ActiveMQ介绍6
2.2.2IOS推送机制介绍9
2.3Oracle数据库介绍13
2.4Spring框架介绍14
第3章消息中心系统的分析17
3.1系统实现目标17
3.2系统流程分析18
3.2.1IOS消息推送流程19
3.2.2Android消息推送流程21
3.3性能需求分析22
第4章系统设计23
4.1框架设计23
4.2数据库设计24
4.3模块详细设计29
第5章各模块的具体实现37
5.1总体框架实现37
5.2消息定制模块39
5.4消息准备模块的实现48
5.5消息发送模块的实现51
5.6反馈处理模块的实现59
5.7日志记录模块的实现61
第6章系统的实现与测试64
6.1测试过程说明64
6.2功能测试说明64
6.2.1开发阶段单元测试64
6.2.2集成阶段集成测试65
6.2.3模拟场景数据和测试用例65
6.3性能测试67
6.4本章小结69
第7章总结与展望70
7.1总结70
7.2展望71
致谢72
参考文献73
个人简历、在读期间发表的学术论文与研究成果75
第1章引言
1.1课题背景
在信息爆炸的现在,信息量以指数的规律猛烈增长。
这时,网上出现了很多ICP(IntemetContentProvider),他们提供各类新闻、金融咨询等信息,用户则使用自己的浏览器在网上搜索浏览检索这些消息。
这种被动的拉的方式-即用户发送服务请求,服务器根据用户请求来在服务器上检索,并将结果返回请求的用户-无疑是低效的,因为用户要花费很多时间去各个网站查找其感兴趣、想了解的信息。
同时,用户还希望他们获得消息的方式能够不受到时间和空间的约束。
为了解决这些问题,信息推送(Informationpush)[1]就这样应运而生了。
1.2研究意义
随着手机智能操作系统技术的发展,手机上的应用已经可以与推送信息相结合,利用推送过来的信息让用户选择程序自身是否启动,移动信息推送技术的应用范围得到了更大的扩展。
信息推送不仅可以实现消息的发送,还能启动手机上的应用,由应用来处理更多的相关信息。
在开发过程中,越来越多的移动应用需要实现这一功能,如果存在一个平台,提供给应用开发人员这一功能的接口,那么将显著减少开发人员的工作量,并且可以减少移动终端的网络连接数量。
目前,谷歌、苹果和黑莓的手机操作系统已经基本实现了该功能。
可以看出,对移动互联网中对移动终端的消息推送机制的研究,使得服务提供者可以迅速,准确地将用户需要的消息传达到移动终端,用户可以通过移动终端接收消息,掌握最新的时事资讯等信息。
因此,研究移动消息推送机制[2]具有重要应用价值。
1.3国内外研究现状
推送技术随着互联网迅速发展的同时,应运而生。
它最早由一家名叫PointCast的公司在1996推出。
PointCast是一家互联网公司,它与一些新闻媒体公司合作,通过为用户定制新闻、经济、体育等频道,将对应频道中最新的消息主动发送给用户,使用户不需要主动地在网上搜索和查看信息,而是像收听广播电视一样,有目的地进行阅读和预取。
其目的是提高用户获取信息的实时性和针对性。
然而在互联网中,有大量容易阅览信息的新闻网站存在,用户在计算机上也习惯于主动获取自己关注的信息,而不想做被动接收者。
所以,在传统计算机上推送技术的使用并没有得到重视。
然而与传统计算机相比,移动设备如触摸屏手机的操作便捷性较差,并不适合输入大量数据。
再加上近几年来通信技术得到了迅速发展,使用手机接入互联网的人越来越多,移动互联网数据传输的速度也越来越快,人们越来越倾向于从移动互联网获取即时信息[3],移动消息推送技术因而得到了更多的关注和应用。
其中较为有名得到广泛使用的就是RIM公司生产的黑莓手机中提供的PushMail服务。
PushMail指的是利用推送技术,将电子邮件直接传输到移动终端。
简单的说,就是系统直接将电子邮箱中刚刚收到的邮件即时发送到用户的手机中,不像传统移动邮件系统那样必须依赖移动终端定期接收邮件或由用户主动检查邮箱,所以手机上时刻都能够维持与所指定的邮箱同步的资料。
随着手机操作系统的发展,Android,IOS等系统上的许多移动应用已经集成了推送服务。
移动推送技术诞生至今,已经取得了长足的发展。
OMA(OpenMobileAlliance开放移动联盟)已经完成并发布了Push1.0、Push2.0、Push2.2标准,其中Push1.0至Push2.2都是基于点到点的推送业务,主要应用为WAPPush标准或其他IP连接方式的推送。
(1)WAPPush
WAPPush是一种在实际中存在已久且广泛使用的推送方式,发送WAPPush信息是使用短信通道,但是手机接收到信息后将它归类到WAP(浏览器信息)收件箱中。
该信息代表的是一条下载链接,用户还需要通过网络下载此条消息,之后就可以像查看普通短信一样查看消息。
WAP的推送协议中定义了服务提示(SI:
ServiceIndication)和服务加载(SL:
ServiceLoad)两种服务,以给用户和网络运营商更多的选择。
服务提示是将信息的摘要和相关的通用资源标识符(URI)发送给用户,由用户选择是否通过URI下载信息。
服务加载是将一项服务的URI推送给用户,然后手机自动地根据URI下载相应信息。
两种服务的区别在于是否需要用户手动下载信息。
SL对推送信息的处理对用户来说是透明的,而SI则在告知用户消息提示时,由用户自行选择是否下载信息。
WAPPush方式的优点在于速度快、不占用宽带、实时性强,缺点在于信息服务提供者需要跟运营商合作,导致推送业务的种类单一,且不能与信息服务提供者的应用相结合。
(2)IPPush
IPPush是指移动终端通过网络与信息服务提供者的服务器建立一个连接,在终端和服务器之间建立连接后,服务端通过此连接实时推送信息。
基于IP连接的推送技术是目前使用广泛的推送技术[4],其原理与传统PC推送服务相同。
苹果公司的
APNS、谷歌公司的GCM服务都是基于该技术完成推送业务。
APNS是苹果公司在2009年发布IOS3.0带来的新功能。
在这一体系中,苹果公司的移动终端如iPhone、iPad和iPodTouch在建立与苹果推送服务器的持续IP连接之后,可以随时接收来自第三方应用服务器经过苹果推送服务器发送的消息。
在消息到达时,即使相应的应用程序处于关闭状态,也可以通过移动设备上的广播通知启动[5]。
GoogleCloudMessaging(GCM,原名为AndroidCloudtoDeviceMessaging)是APNS有着类似机制的一种消息推送服务,它能够帮助应用开发人员从应用服务器转发消息到安装该应用的Android系统手机上。
GCM服务采用一个简单,轻量级的机制使得谷歌推送服务器可以告诉Android系统设备上的相应应用与服务器建立直接的联系,来获取应用开发人员推送的信息。
现今在各种移动智能终端上主要采用IP连接来实现移动消息推送,设备因此会产生了额外的数据流量和电量的消耗。
因此,目前应用开发者多采用统一的移动消息推送平台来完成手机终端的信息推送,自己也就无需实现推送功能,移动终端也就避免了同时为每一个带有推送功能的移动应用维持一个IP连接所带来的资源损耗。
利用推送平台,开发者可以在自己的应用服务器上,根据具体的业务需求,向特定的用户发送消息。
目前的推送平台上并没有根据业务需求为不同种类业务提供不同等级的服务,这样就会造成在消息推送的高峰期,紧急的消息不能迅速到达的情况出现。
传统的优先级队列调度算法并不完全适合推送平台,因此需要加以改进。
并且为了推送功能的需要,永久保持连接会给移动终端带来不必要的资源消耗,找到一个既能满足实时推送又能降低设备资源开销的网络连接策略是有必要的。
1.4本课题研究内容
本课题是作为中国电信电子渠道管理系统中的一个子模块进行研究和开发的,研究内容是立足于建立一个服务于中国电信手机客户端的消息推送系统,中国电信电子渠道管理系统已经有完善的管理员系统和分权分域管理系统,所以分权分域和管理员管理不作为本课题的研究对象。
为了便于中国电信的客服人员更加方便地向手机客户端用户推送活动公告以及客服信息等,建立一个消息定制平台,并且由系统自动向客户端推送消息,以达到减少客服工作量及提高效率的目的。
本系统建立在Oracle数据库基础上,使用的技术主要包括Memcached分布式缓存、ActiveMQ消息队列以及Spring定时任务来完成消息自动推送。
针对现阶段主流的两种操作系统Andriod和IOS,给出两种消息推送的解决方案以实现较全面的服务覆盖率。
本文对整个系统的开发流程做了详细的描述,包括需求分析、数据库设计、流程设计、系统实现以及系统测试。
通过本课题的研究,实现了中国电信客户端
的消息推送需求,并确定了以后研究和改进的方向。
1.5内容框架
本文主要分为六章,各部分主要内容如下:
第一章,主要阐述研究背景和消息推送系统的研究现状。
第二章,介绍本文所用到的相关技术理论概述。
第三章,针对消息推送的需求进行系统分析。
第四章,主要阐述系统的框架设计,数据库设计以及各模块的详细设计。
第五章,结合代码和图片阐述本系统的各模块的具体实现。
第六章,阐述本系统的系统测试。
第七章,对新系统进行评价和展望。
第2章系统技术介绍
2.1分布式缓存介绍
2.1.1分布式缓存的特点
高性能:
传统应用的数据库在大量、高并发访问的情况下,数据库的I/O成为制约性能的最大瓶颈,往往导致非常高的响应延迟。
分布式缓存[6]使用存取数据高的内存作为存储介质,以key/value的形式将数据库存储在内在中,从而获取非常高的存储性能。
动态扩展性:
分布式缓存支持弹性扩展,可以根据访问负载的实时变化情况,动态地增加或减少缓存节点,极大地提高资源利用率,同时提供了可预测的扩展性。
高可用性:
可用性包含两个方面,即数据可用性和服务可用性[9]。
分布式缓存在冗余机制的基础上实现了高可用性、无单点失效(singlepointoffailure)[7],并且能够自动发现故障和实施故障切换,避免由于服务器的故障导致的服务中断和数据的丢失。
能够在动态扩展时自动实现均衡的数据分区,保障了缓存服务持续可用性。
易用性:
分布式缓存提供了数据与管理视图和简单的API接口,并且与拓扑结构分离。
无需人工配置就可以实现动态扩展和失效恢复。
并且大多提供了图形化界面作为管理控制台,便于统一维护。
2.1.2Memcached介绍
Memcached 是一款高性能的将对象缓存在内在中的分布式缓存系统。
多用于缓存动态Web应用的数据来减轻数据库的压力。
有了它,就可以减少读取数据库的次数,从而提高网站或应用服务的访问速度。
Memcached是一套分布式的快取系统,是一套开放源代码软件,以BSDlicense授权协议发布。
(1)Memcached的存储方式
为了达到提高性能的目的,Memcached将数据都保存在内置的内存空间中。
由于缓存数据是存储于内存中的,因此重启Memcached或者服务器故障都会导致缓存数据的丢失。
另外,缓存的容量达到预设值之后,缓存服务器就会基于LRU(LeastRecentlyUsed)[8]算法将不使用的缓存自动删除。
Memcached是专门用做缓存的服务器,因此数据的永久性问题并没有过多的考虑到Memcached的设计中去。
(2)通信分布式
Memcached的API使用32位元的循环冗余校验(CRC-32)[9]计算键值,然后将数据分散存储在不同的服务节点上。
虽然被称为“分布式”缓存服务器,但Memcached服务器端本身并没有实现“分布式”的功能,而是由Memcached的客户端来实现的。
Memcached作为高速运行的分布式缓存服务器具有以下特点。
(1)协议简单
Memcached的客户端通信使用文协议,而不是MXL等复杂格式的协议。
(2)事件处理基于libevent
libevent是一个封装了Linux的epoll和BSD类的kqueuet等时间处理功能的程序库[10]。
由于使用了这个库,所以Memcached能在Linux、BSD、Solaris等操作系统中使用。
(3)内置内存存储方式
为了提高性能,Memcached内置了内存空间用于保存的数据。
因为数据都仅仅被保存在内存中,因此重启Memcached或者服务器故障都会导致缓存数据的丢失。
另外,内容使用的容量到达预设的值后,Memcached会将不使用的缓存自动删除。
(4)Memcached不互通信的分布式
Memcached的分布式是在客户端实现的,应用程序请求到Memcached时,客户端程序库首先对请求基于循环冗余校验算法进行计算,得到key值,然后将数据按照key值分发到不同不服务节点上,同样的请求经过算法得到key值相同,就自动跳到相应的服务节点,由此实现了分布式。
2.2消息队列介绍
“消息”是在两台计算机间传送的数据单位。
消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
消息被发送到队列中。
“消息队列”是在消息的传输过程中保存消息的容器[11]。
消息队列管理器在将消息从它的源中继到它的目标时充当中间人。
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
2.2.1ActiveMQ介绍
ActiveMQ是由Apache出品的,最流行的并且能力最强劲的开源消息总线。
ActiveMQ完全支持JMS1.1和J2EE1.4规范,虽然JMS规范的推出已经过去了很长的时间,但是JMS在J2EE应用中间仍然扮演着特殊的地位。
[12]
JMS是JavaMessageService的简称,用来发送异步消息,在不同系统和不同的模块之间,可以利用它来实现集成。
JMS有两个好处,第一个就是让模块之间或者系统之间的耦合度降低,第二个是异步通信。
JMS的消息机制有2种模型,一种是PointtoPoint,表现为队列的形式。
发送的消息,只能被一个接收者取走;另一种是Topic,可以被多个订阅者订阅,类似于群发。
在JMS中有这样几个重要的核心接口和类[13]:
1.ConnectionFactory,用于jmsclient获取与jmsprovider的连接。
不同的jms产品,对这个接口有不同的实现,比如说ActiveMQ,这个接口的实现类是ActiveMQConnectionFactory
2.Connection,是由ConnectionFactory产生的,表示jmsclient与jmsprovider的连接。
3.Session,是由Connection产生的,表示一个会话。
Session是关键组件,Message、Producer/Consumer、Destination都是在Session上创建的
4.Message,这个组件很好理解,就是传输的消息,里面包括head、
properties、body,其中head是必选的
5.Destination,是消息源,对发送者来说,就是消息发到哪里;对接收者来说,就是从哪里取消息。
Destination有2个子接口,Queue和Topic,分别对应上面提到的2种模型[14]。
6.MessageProducer,是消息发送者,创建这个组件的代码类似:
Destinationdest=session.createQueue("dotaQueue")//消息目的地
MessageProducerproducer=session.createProducer(dest);//消息发送者
可以注意到,这里需要把Destination作为参数,传入createProducer()方法,这说明消息发送者是绑定到Destination上的,这个发送者发送的消息,会发送到这个绑定的Destination上。
7.MessageConsumer,是消息接收者,和MessageProducer是相反的一种组件。
图2.1JMS中各组件及其关系图
(一)ActiveMQ特性:
1、多种语言和协议编写客户端。
语言:
Java,C,C++,C#,Ruby,Perl,Python,PHP。
应用协议:
OpenWire,StompREST,WSNotification,XMPP,AMQP。
2、完全支持JMS1.1和J2EE1.4规范。
3、对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性。
4、通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上。
5、支持多种传送协议:
in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA。
6、支持通过JDBC和journal提供高速的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 分布式 缓存 消息 队列 推送 系统 开发
![提示](https://static.bdocx.com/images/bang_tan.gif)