- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MOM方案中中间件选择研究
MOM方案中中间件选择研究
摘要:本文在实际测试的基础上,对一些可能是高吞吐率的MOM中间件进行了比较分析,为中间件的实际应用提供选择依据。
关键词:面向消息的中间件;MOM;中间件选择;消息;中间件
一、研究背景
普通的通信信道可传输完整的消息。面向消息的中间件(MOM)是一个基础架构, 它使用普通的通信信道在应用之间传送数据。在基于MOM的通信环境中,通常异步地发送和接收消息。使用基于消息的通信,可将应用抽象地划分为发送者与接收者,它们之间无须彼此了解,仅仅通过消息传送系统,完成发送和接收消息。
在客户/服务器体系结构中,MOM位于客户端和服务器之间,并处理客户端和服务器之间的异步调用。为了支持异步模型,MOM产品通常使用消息队列临时存储调用,并允许客户端和服务器分别在不同的时候运行。队列中的消息通常由格式化数据、操作请求或这两者组成。
笔者正在参与一个基于Web的考试系统开发,该考试系统采用两层服务器的形式,即考试现场服务器既充当考试机客户端的服务器,同时,又充当远程总服务器的客户端。
系统中,考试现场服务器和客户端采用SQL Server数据库,远程总服务器采用Oracle处理大量数据,而且同步数据需要分布式事务,所以考虑采用MOM提供分布式事务、解决异构数据库之间的事务问题。为了给正在开发的该考试系统选择MOM中间件,对一些可能是高吞吐率的MOM中间件进行了比较。
二、系统对MOM中间件的要求
1) 高吞吐率。
本系统中,MOM中间件用于远程总服务器连接考试现场服务器。远程总服务器和现场考试服务器是通过互联网来进行连接而不是局域网,所以,为了解决互联网上可能存在的过滤非互联网协议(比如HTTP、SMTP、FTP…)的防火墙,本MOM应用中采取将消息通过HTTP“遂道”的方式。但是HTTP不能支持“推”数据,只能支持“拉”数据,即必须有个类似浏览器的客户发请求才能得数据,不能在不发请求的情况下由服务器主动联系客户,因此远程总服务器将会以2秒一次的速度轮询现场服务器,保证考试数据的实时同步上传,同时,严格控制现场考试的开始、结束时间,也能在考试结束时,及时收回考卷,有效避免作弊、丢失等现象;而且系统将会接入高并发的客户量。因此MOM必须有极高的数据吞吐能力。
其次,考试过程中,要求能及时将所有考试机器的数据保存入库,而且,对于考试意外终止、客户端退出、死机等现象,也能及时得到处理;对于定期保存的历史数据、由考试机器数据传送事件触发的保存操作数量也极大,需要及时处理;对于持久消息,由于不涉及用户响应的问题,所以只要保证队列中的数据能得到处理,无需与非持久消息一样的吞吐率。由此可见,系统对操作的响应速度的决定因素是对于非持久消息的吞吐率。
2) 事务。
中心服务器与现场的考试服务器采用了不稳定的Internet连接,为了保证考试的实时性,现场的考试服务器是有本地数据库的,现场的考试数据要同步发送到中心服务器;中心的数据、指令要下达到考试现场。为了保证数据的完整性与一致性,中心与现场之间的数据交换必须支持分布式事务。如果使用数据库同步复制的方法,则必须是同种数据库,且灵活性差、部署不便。使用MOM并使用Java EE作为事务逻辑处理的平台,可以与数据库无关,且开发、部署简单,可以随时建立、拆除连接。
当现场服务器要发送数据时,是作为消息的生产者,中心服务器是消息的消费者;中心要下达指令、下传数据时,作为消息的生产者,现场服务器作为消息的消费者。在现场服务器与中心服务器上部署基于Java EE的消息驱动Bean(MDB,Message Driven Bean)来消费消息,并使用本地数据库保存处理结果。
对于业务逻辑而言,消息队列与数据库一样属于数据资源。无论是消息生产者还是消费者,仅需处理其本地数据库与消息队列之间的分布式事务。对于违反ACID属性的事务将会被撤消,当前被处理的消息也会因事务回滚而返回队列。返回队列的消息又会立即重新得到处理,因此对于无法处理的消息会产生这样的循环,直到最大重试次数达到为止,这类消息被称为毒消息。达到最大重试次数的消息会进入死信队列(或类似名称的队列)。这样的消息需要人工干预,撤消或修改条件后重做。
3) 持久性。
涉及事务的消息必须象数据库中的表一样持久保存,否则将会因停电、网络不可靠而丢失数据。消息被消费掉之前一直保存在MOM系统中,并持久化至磁盘文件,停电也不会丢失,因此可以确保因网络断开、关机等原因丢失数据。当系统重新上电,网络恢复后,消费者会自动连接上队列,处理消息。消息被消费掉之后,将会被从队列中移除。
4) 伸缩性。
一般分为两种:垂直伸缩性与水平伸缩性
文档评论(0)