关于消息中间件的一些困惑_JAVA_编程开发_程序员俱乐部
中国优秀的程序员网站
程序员频道
CXYCLUB技术
地图
最新资讯
|
百度新闻
|
GOOGLE地图
|
RSS订阅
|
更多
职场话题
生活休闲
恋爱交友
程序人生
学习进修
职业发展
项目管理
求职面试
程序员创业
JAVA
.NET
C/C++
Ruby
Delphi
JavaScript
PHP
ASP
JSP
HTML
XML
移动开发
开发工具
其他
编程开发
数据库
操作系统
新闻资讯
互联网
非技术区
非技术区
生活休闲
恋爱交友
职业发展
求职面试
程序人生
移动开发
开发工具
DB2
MySql
Sybase
开发
JAVA
.NET
PHP
C/C++
数据库
SQL Server
Oracle
互联网
运营
推广
营销
SEO
系统
Linux
Unix
Windows
资讯
动态
产品
人物
创业
职场
学习
管理
热搜:
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
Flex
Play框架
加密解密
J2EE
缓存
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
更多>>
您所在的位置:
程序员俱乐部
>
编程开发
>
JAVA
> 关于消息中间件的一些困惑
关于消息中间件的一些困惑
2010/12/29 8:11:02 taolei0628 http://taolei0628.javaeye.com
我要评论(
0
)
摘要:
我现在正参与我们的java平台的消息中间件的开发,由于工作的关系,最近经常在思考消息中间件各种特性的应用价值在哪里。这其中有个困惑,传统的MQ(把MQ作为消息中间件的简称,比MOM更容易理解)定义了一些MQ的基本特性包括持久、离线、可靠(这里特指有序、不重复不丢失、可恢复)等特性,而这些特性在一些典型的系统中是必需的吗?一个比较典型的应用是在线交易系统。首先离线特性不是必要的。其次,在大规模的集群环境中局部故障也被认为是一种常态,况且MQ不会是交易系统的瓶颈,如果一个交易请求长时间没有响应的话
标签:
困惑
我现在正参与我们的java平台的消息中间件的开发,由于工作的关系,最近经常在思考消息中间件各种特性的应用价值在哪里。
这其中有个困惑,传统的MQ(把MQ作为消息中间件的简称,比MOM更容易
理解
)定义了一些MQ的基本特性包括持久、离线、可靠(这里特指有序、不重复不丢失、可恢复)等特性,而这些特性在一些典型的系统中是必需的吗?
一个比较典型的应用是
在线
交易系统。
首先离线特性不是必要的。其次,在大规模的集群环境中局部故障也被认为是一种常态,况且MQ不会是交易系统的瓶颈,如果一个交易请求长时间没有响应的话,有时宁愿这个交易请求消息被丢失了,而不是在几个小时之后又被提交给交易服务器。我甚至认为在线交易系统并不需要MQ提供消息持久化及其故障恢复等能力,而只需要MQ的
异步
、分布、异构、集群(负载均衡能力)特性就足够了。
实际上相对传统的MQ,还存在着一些其他的MQ产品,比如ZeroMQ(0MQ),它们不支持消息持久存储、
队列
深度有限、前端阻塞。而这中MQ的吞吐量是惊人的,单服务器每秒钟可以处理几十万个消息,而传统的基于消息存储的MQ只能是几千的数量级。象0MQ这样的产品非常适用于分布式的消息(事件)驱动系统、在线方式的业务整合,也适合于数据集成应用(后面会讲),甚至我认为何以满足在线交易系统的应用。
关于前端阻塞,这个是我发明的词,类似BlockingQueue的特性,到达队列深度
限制
时会阻塞
消息发送
,可以起到平衡整个网络系统的作用,这个特性对在线交易系统非常有用。IBMMQ是不具备的,队列深度很大,有多少消息照收不误,直到把MQ或交易服务器撑爆,还美其名曰时间无关,真是扯淡。
淘宝网
把
银行
交易系统搞宕机就是个典型的反面案例。关于这个特性也有其负面因素,如果在一个XA事务内发送消息,可能由于发送被阻塞而延长事务处理时间。但这种情况是发生在超过队列深度限制的时候,象IBMMQ就直接拒绝发送,更不是个好的
解决方法
。
另一个比较典型的应用是数据集成系统
数据集成系统比较理想的方式是文件传输,即数据采集成本地文件,利用消息系统或其他文件传输系统发送文件,最后从文件集成数据。置于为什么不把采集到的数据记录直接以消息的形式传输并集成,这里就不解释了,总之后者被我认为是最差实践。
MQ
内核
本身并不具备文件传输的功能,同时传统MQ自身的一些消息有序、消息可靠性保障机制(存储、不重、不丢)对文件传输来说不是必需的,因为MQ(即使是IBMMQ)本身无法做到完全的可靠,一个大规模的文件会被拆分成多个消息发送然后合并接收,这种情况下可靠性会更低,同时为了提供这种不太可靠的可靠性,势必也会极大地影响性能(又是传统MQ和0MQ的差异)。那么可靠的传输文件要文件传输模块自己保证,至于怎么做,这里不说。但很简单,比MQ保证可靠传输要简单得多、可靠得多。那么在文件传输的应用上,某些传统MQ的特性又成了鸡肋。
还有一种典型的应用是
交易平台
或是交易网关
这种系统和在线交易系统的差别是系统本身不处理交易,而是提供转换、交换、认证、公证的能力。这种系统应用MQ是分别针对每个客户端的,MQ不会贯穿整个交易过程。况且象人行交易网关这样的系统,任何MQ的可靠性保障都无法满足系统地要求,据说最开始的交易数据的传输是用FTP的。这种情况下,传统MQ的某些特性再一次成为鸡肋。
还有一种比较特殊的交易系统,规模非常大、实时性非常高、非集群集中交易、交易数据高可靠(不重复、不丢失、可恢复)。典型的系统是上海和深圳的证券交易中心的交易系统,不过这种系统是定制化开发的,对于一个通用的MQ产品来讲并不具有代表性的
意义
。MQ产品也不需要是万能的,能满足和适合多数(甚至是有限几种典型的)应用就可以了。
回到我一开始就说到的,这是我的困惑,我也怀疑我的观点的正确性,所以也希望对消息系统感兴趣的朋友批评指教或是讨论交流。
上一篇:
Groovy学习笔记之JDBC编程篇
下一篇:
jmeter 压力测试各种值的意思 --吞吐量 样本
相关文章
·
IT职场:一位36岁软件工程师的困惑
·
解读职场新人困惑:毕业生职业生涯4步曲
·
职场新人的困惑:如何摆脱“拍马屁”的嫌疑
·
关于消息中间件的一些困惑
·
android Canvas让我很困惑
·
一位30岁软件工程硕士的困惑
查看所有评论(
0
)
我要评论
发表评论
用户名:
匿名
最新文章
J..
h..
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
·
同步与异步--阻塞与非阻塞
·
JDBC连接各种数据库
·
Java 对象句柄
·
jna调用dll文件遇见问题
·
hadoop0.20.1在c
·
JSTL一些详细解析
·
Java多线程 Web服务
·
word,ppt,excel
最新标签
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
今日热点
·
全面认识Eclipse中JVM内存设置
·
struts标签实现菜单动态级联
·
JDK1.6官方下载地址
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
推荐文章
unable ..
老..
·
The last pack
·
unable to find valid
·
老三携剑出山,Swing法力
·
java poi 创建exc
·
Errors occurre
·
[linux]ubuntu下
·
java 两数相除 四舍五入
·
Java 调用远程webservice接
·
Hadoop学习全程记录——
·
JAVA 比较两张图片的相似
·
J2EE、JAVA开源版OA发布了(JO
·
在linux下用tomcat
·
异常ognl.OgnlExc
·
Eclipse设置Tomcat启动超时时
·
org.springfra
English
|
关于我们
|
诚聘英才
|
联系我们
|
网站大事
|
友情链接
|
意见反馈
|
网站地图
Powered by
程序员俱乐部
程序提供: HugoCMS 2.0
网站备案:苏ICP备11048748号-1