- 浏览: 1015044 次
- 性别:
- 来自: 福州
最新评论
-
guanxin2012:
大神,您好。非常感谢您贡献了IKExpression。我们现在 ...
分享开源表达式解析器IK-Expression2.0 -
qqgigas:
LZ,public boolean createUser(LD ...
Sun Directory Server/LDAP学习笔记(二)——API说明及代码样例 -
gao_shengxian:
Hibernate: update T_GX_TEST set ...
优雅Java编程 之 使用Hibernate存储Oracle Spatial对象 -
a78113534:
感谢大神,在安卓里面调用成功了。
发布IK Expression开源表达式解析器 V2.1.0 -
majiedota:
加油
来自开源支持者的第一笔捐赠
最近,开始引入jms来为公司整体应用集成进行技术预演。
从目前流行的开源jms框架中,看中了ActiveMQ和jBossMQ两款。由于还在选型阶段,所以谈不上对这两款jms有啥深入认识,之所以选他们有以下方面考虑。
1.并发性能。公司后期的业务需求接近4000并发/S;
2.稳定性。7×24的可靠,最少也要7×20
3.支持集群。需要集群技术提供负载均衡,横向扩展以及多机备份(防止单点故障)。
从网络上了解的资料,ActiveMQ的性能似乎更好一下,而且不依赖于特定的应用服务器,这个是它吸引我的地方;
选择jBossMQ的理由是,公司的主要应用都是跑在jBOSS上,这样集成起来,特别是后期的集群配置应该会省不少麻烦,而且jBossMQ的性能也很出色(虽然不如AMQ)。缺点是绑死在jBoss上。
希望用过这两jms服务的兄弟都给点经验和看法
其实这和你说的并不违背,我只是想把负载均衡的功能从应用中剥离出来,不要加重应用本身的逻辑.不好意思习惯了用适配去补救原有应用的不足.因为改现有稳定的应用毕竟是比较麻烦和高风险的事情.
楼上两位提醒的是。应该是我没有说清楚,我说的模仿RAID的算法大体是这样的:
假设有8台的jBoss,J0 - J7;
当一个用户请求到达J0时,向J0的jms队列发送一条M0,J0收到后根据特定算法,它将发送一个备份消息到J3的jms中、,主--备消息可能有如下映射:
J0-->J3
J1-->J4
J2-->J5
J3-->J6
J4-->J7
J5-->J0
J6-->J1
J7-->J2
如果这时J3宕机,J6上的备份信息将继续处理,确保J3上的请求不会丢失。与此同时,J0的备份信息将发往J6,如此,按照一定算法循环,简单模拟RAID的存储备份规则。
同时每台JMS有自己的本地数据库,考虑采用简单一点的如MySQL,来存储消息队列。
在8台jBoss都正常的情况下,通过IP分配原则,分摊来自不同IP的请求。以这样的集群方式,应付高并发,且又要求高可靠的生产环境。哪怕一台服务器每秒只有500个请求的处理能力,8台也能轻松应付4000笔业务的峰值。
这个目前只是一个很粗很粗的设计思路,不要问我具体的技术细节哦,我也没去细想呢,呵呵!
目前的关键是,先选取一个高可靠,稳定且已扩展的jmx服务端,我们再根据它的一些特点来设计我们的整体服务架构。
还请兄弟们多给一些jmx服务器的点评啦,谢谢!!
这样行不?
J0是引导队列,它负责接收所有的请求.
J1--J7都从JO去取值,或者JO主动将队列值推给J1--J7 让J1-J7达到负载均衡.
对于匿机备份 还是需要在J0这段进行详细的任务日志记录,在没有很好监控的条件下匿机备份简直就是梦话.这点也是我排斥用第三方MQ的原因.现在用IBM MQ只能是客户端和服务端进行约定,看消息是否丢失或者异常,这个成本太高了.
哈,商业支持可以找Progress啊
目前AcitveMQ的绝大多数Committer都就职于Progress,负责维护 http://fusesource.com/
压力测试需要自己设计和去做的。
光听别人说都没用。 可以很负责任的告诉你,每个业务处理几十毫秒,500个并发上来,HTTP服务器不会爆。不过,服务器的配置就是需要更仔细和谨慎了。
楼上两位提醒的是。应该是我没有说清楚,我说的模仿RAID的算法大体是这样的:
假设有8台的jBoss,J0 - J7;
当一个用户请求到达J0时,向J0的jms队列发送一条M0,J0收到后根据特定算法,它将发送一个备份消息到J3的jms中、,主--备消息可能有如下映射:
J0-->J3
J1-->J4
J2-->J5
J3-->J6
J4-->J7
J5-->J0
J6-->J1
J7-->J2
如果这时J3宕机,J6上的备份信息将继续处理,确保J3上的请求不会丢失。与此同时,J0的备份信息将发往J6,如此,按照一定算法循环,简单模拟RAID的存储备份规则。
同时每台JMS有自己的本地数据库,考虑采用简单一点的如MySQL,来存储消息队列。
在8台jBoss都正常的情况下,通过IP分配原则,分摊来自不同IP的请求。以这样的集群方式,应付高并发,且又要求高可靠的生产环境。哪怕一台服务器每秒只有500个请求的处理能力,8台也能轻松应付4000笔业务的峰值。
这个目前只是一个很粗很粗的设计思路,不要问我具体的技术细节哦,我也没去细想呢,呵呵!
目前的关键是,先选取一个高可靠,稳定且已扩展的jmx服务端,我们再根据它的一些特点来设计我们的整体服务架构。
还请兄弟们多给一些jmx服务器的点评啦,谢谢!!
4000/s的并发,是比较高,需要集群来做横向扩展的。
应用服务器的集群可以是 硬负载均衡器+应用服务器集群来达到。8台的话,每个应用服务器承载500/s的并发。
数据库集群我做企业应用主要就是用Oracle的RAC,Mysql的集群基本没有接触。
剩下的就是估计数据库服务器承载量的问题,估算前给一个具体的性能要求:
每笔业务响应时间最长不超过10S。(10S的响应时间在峰值下,我认为还是合理的)
按照你给出的估计,每笔业务处理的数据库交互假设需要50ms,我们来估算一下单台数据库服务器是否能够在性能需求下应付4000/s的并发访问。
数据库最大连接数100.
(4000/100)*(50ms) = 40*50ms = 2000ms.
加多30%的冗余误差, 2000*130/100 = 2600ms .
也就是说: 3秒之内,数据库服务器就可以处理完4000笔并发。最长等待时间不超过3秒。
从这个角度来看,只要每笔业务处理的SQL性能优化很好,每笔SQL响应时间控制在100毫秒以内,数据库集群根本不需要,当然,数据库服务器的硬件配置要配置优越。
应用服务器的设计在开始的时候,考虑横向扩展的兼容,后面基本没啥大问题。
复杂的设计方案,就是采用你说的 MS消息队列来处理任务等待队列的问题了。
这样的方案,是可以支撑大并发的服务的,但是也就仅仅支撑而已,并没有给性能带来多大好处,更不好的还是引入了一个新的中间层技术,增加了设计复杂度。整体开发规模也要上去的。
所以,我的意见是,除非设计多个不同应用体系集成,如果是自身单一体系的设计,不要考虑MS。
当然,即使多个应用体系的集成,也不一定非要MS不可。 还有WS多种方案处理,MS最好的地方就在于队列缓存,消息分发。 这些在多异平台应用集成时,会派上大用场。
.....能说详细点么,这个我非常关心。SUN的MQ在某些方面确实易用性不好,管理端的用词也容易让人迷惑,明明是将连接配置保存在一个文件里,却把一个本地文件路径当成jndi。
简单点, 你发个1000W消息给SUN MQ, 看看他还能不能活过来, 消息堆积多了, 慢就慢吧, 那总得慢的能让我处理掉啊, 直接死了, 算个什么可靠性, 要直接删除存储文件才能起来, 如果是关键业务, 想象吧, 死人呐。 或者发几百万, 然后重新启动, 看他还能不能活过来。你能保证的消息的被完全处理, 就当我没有说过。
最可笑的是, 有时候, 连接什么的都完全正常, 消息看上去发的很正常, 服务器却没有收到。当然这个机会很少, 我碰到过几次。还有很多BUG, 报告给SUN, 也得到了BUG确认, 修复动作特别迟缓。 半年也不给发布。 受不了。 最后决定撤出所有sun相关的软件, 一律不用。
.....能说详细点么,这个我非常关心。SUN的MQ在某些方面确实易用性不好,管理端的用词也容易让人迷惑,明明是将连接配置保存在一个文件里,却把一个本地文件路径当成jndi。
从目前流行的开源jms框架中,看中了ActiveMQ和jBossMQ两款。由于还在选型阶段,所以谈不上对这两款jms有啥深入认识,之所以选他们有以下方面考虑。
1.并发性能。公司后期的业务需求接近4000并发/S;
2.稳定性。7×24的可靠,最少也要7×20
3.支持集群。需要集群技术提供负载均衡,横向扩展以及多机备份(防止单点故障)。
从网络上了解的资料,ActiveMQ的性能似乎更好一下,而且不依赖于特定的应用服务器,这个是它吸引我的地方;
选择jBossMQ的理由是,公司的主要应用都是跑在jBOSS上,这样集成起来,特别是后期的集群配置应该会省不少麻烦,而且jBossMQ的性能也很出色(虽然不如AMQ)。缺点是绑死在jBoss上。
希望用过这两jms服务的兄弟都给点经验和看法
评论
49 楼
fjlyxx
2009-01-19
linliangyi2007 写道
楼上的兄弟,你没明白我的意思,我是想从应用层同时向两个jms发送消息,一个主送,一个备份,不存在你说的J0负责所有请求,否则又是一个单一故障点咯,这样的群集就没有意义了
其实这和你说的并不违背,我只是想把负载均衡的功能从应用中剥离出来,不要加重应用本身的逻辑.不好意思习惯了用适配去补救原有应用的不足.因为改现有稳定的应用毕竟是比较麻烦和高风险的事情.
48 楼
cats_tiger
2009-01-19
<div class="quote_title">andyao 写道</div>
<div class="quote_div">
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>明显误导人,</p>
<p>你这个个表中的JBossMQ和ActiveMQ要对掉一下.</p>
<p> </p>
<p> </p>
</div>
<p>抱歉,抱歉,写反了</p>
<div class="quote_div">
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>明显误导人,</p>
<p>你这个个表中的JBossMQ和ActiveMQ要对掉一下.</p>
<p> </p>
<p> </p>
</div>
<p>抱歉,抱歉,写反了</p>
47 楼
cats_tiger
2009-01-19
<div class="quote_title">jnn 写道</div>
<div class="quote_div">
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>不知道这位的哥们的星都怎么给的,据我所知 ActiveMQ的使用范围,文档,案例,以及社区活跃程度比JBossMQ要强很多。</p>
</div>
<p>天哪,我写反了!!!!!</p>
<div class="quote_div">
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>不知道这位的哥们的星都怎么给的,据我所知 ActiveMQ的使用范围,文档,案例,以及社区活跃程度比JBossMQ要强很多。</p>
</div>
<p>天哪,我写反了!!!!!</p>
46 楼
linliangyi2007
2009-01-19
楼上的兄弟,你没明白我的意思,我是想从应用层同时向两个jms发送消息,一个主送,一个备份,不存在你说的J0负责所有请求,否则又是一个单一故障点咯,这样的群集就没有意义了
45 楼
fjlyxx
2009-01-19
linliangyi2007 写道
江南白衣 写道
现在mq们的集群方案,主推都是用DataBase 或 SNA来存储消息,8台MQ互相复制的做法不大现实。
另外,OpenMQ这个开源新贵Sun同志的产品也可以考虑下哦。
另外,OpenMQ这个开源新贵Sun同志的产品也可以考虑下哦。
楼上两位提醒的是。应该是我没有说清楚,我说的模仿RAID的算法大体是这样的:
假设有8台的jBoss,J0 - J7;
当一个用户请求到达J0时,向J0的jms队列发送一条M0,J0收到后根据特定算法,它将发送一个备份消息到J3的jms中、,主--备消息可能有如下映射:
J0-->J3
J1-->J4
J2-->J5
J3-->J6
J4-->J7
J5-->J0
J6-->J1
J7-->J2
如果这时J3宕机,J6上的备份信息将继续处理,确保J3上的请求不会丢失。与此同时,J0的备份信息将发往J6,如此,按照一定算法循环,简单模拟RAID的存储备份规则。
同时每台JMS有自己的本地数据库,考虑采用简单一点的如MySQL,来存储消息队列。
在8台jBoss都正常的情况下,通过IP分配原则,分摊来自不同IP的请求。以这样的集群方式,应付高并发,且又要求高可靠的生产环境。哪怕一台服务器每秒只有500个请求的处理能力,8台也能轻松应付4000笔业务的峰值。
这个目前只是一个很粗很粗的设计思路,不要问我具体的技术细节哦,我也没去细想呢,呵呵!
目前的关键是,先选取一个高可靠,稳定且已扩展的jmx服务端,我们再根据它的一些特点来设计我们的整体服务架构。
还请兄弟们多给一些jmx服务器的点评啦,谢谢!!
这样行不?
J0是引导队列,它负责接收所有的请求.
J1--J7都从JO去取值,或者JO主动将队列值推给J1--J7 让J1-J7达到负载均衡.
对于匿机备份 还是需要在J0这段进行详细的任务日志记录,在没有很好监控的条件下匿机备份简直就是梦话.这点也是我排斥用第三方MQ的原因.现在用IBM MQ只能是客户端和服务端进行约定,看消息是否丢失或者异常,这个成本太高了.
44 楼
fjlyxx
2009-01-19
对JbossMQ ActiveMQ 不太了解,IBM MQ一直在用,感觉马马虎虎.IBM MQ在有内外网的时候总是慢半拍,客户端死掉的时候再次连接总是摆工. 短连接长连接一起上还是不怎么稳定.需要写一大堆的适配器去迎合IBM的标准.
43 楼
linliangyi2007
2009-01-19
哇,开始出现不同意见咯!!
理不辨不明,期待有大拿给权威答案
理不辨不明,期待有大拿给权威答案
42 楼
andyao
2009-01-19
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>明显误导人,</p>
<p>你这个个表中的JBossMQ和ActiveMQ要对掉一下.</p>
<p> </p>
<p> </p>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>明显误导人,</p>
<p>你这个个表中的JBossMQ和ActiveMQ要对掉一下.</p>
<p> </p>
<p> </p>
41 楼
jnn
2009-01-19
闲着也是闲着 写道
JBOSS MQ是以前的故事了,新的叫JBoss Messaging,整体稳定性和性能有大幅提高。如果你们有JBoss支持,建议用Jboss Messaging,毕竟出了问题也算有靠山...
ActiveMQ历史长,也相当成熟,特别是它有各种语言的客户端库,包括C/CPP等。如果你们的系统里涉及多种平台和语言,用JBoss Messaging就不爽了。不过ActiveMQ的商用支持在国内没怎么听说过。
传说JBoss Messaging可以用一种broker和ActiveMQ连起来,这样也算变相提供了多种语言的支持,俺没用过,稳定性难说。
对于大规模商用系统,厂商二线技术支持是必须考虑的事情,否则出了事情哭都没有地方哭...
ActiveMQ历史长,也相当成熟,特别是它有各种语言的客户端库,包括C/CPP等。如果你们的系统里涉及多种平台和语言,用JBoss Messaging就不爽了。不过ActiveMQ的商用支持在国内没怎么听说过。
传说JBoss Messaging可以用一种broker和ActiveMQ连起来,这样也算变相提供了多种语言的支持,俺没用过,稳定性难说。
对于大规模商用系统,厂商二线技术支持是必须考虑的事情,否则出了事情哭都没有地方哭...
哈,商业支持可以找Progress啊
目前AcitveMQ的绝大多数Committer都就职于Progress,负责维护 http://fusesource.com/
40 楼
jnn
2009-01-19
<div class="quote_title">cats_tiger 写道</div>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>不知道这位的哥们的星都怎么给的,据我所知 ActiveMQ的使用范围,文档,案例,以及社区活跃程度比JBossMQ要强很多。</p>
<div class="quote_div">
<p> </p>
<table border="0">
<tbody>
<tr>
<td></td>
<td>成熟 </td>
<td>性能 </td>
<td>功能 </td>
<td>文档 </td>
<td>网络资源 </td>
<td>案例 </td>
<td>社区</td>
</tr>
<tr>
<td>JbossMQ</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
<td>★</td>
</tr>
<tr>
<td>ActiveMQ</td>
<td></td>
<td></td>
<td>★</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
</div>
<p>不知道这位的哥们的星都怎么给的,据我所知 ActiveMQ的使用范围,文档,案例,以及社区活跃程度比JBossMQ要强很多。</p>
39 楼
linliangyi2007
2009-01-18
感谢,葱白,楼上各位,尤其是firebody大大和sdh5724大大为我提供了系统设计思路和性能数据的支持。
38 楼
闲着也是闲着
2009-01-18
JBOSS MQ是以前的故事了,新的叫JBoss Messaging,整体稳定性和性能有大幅提高。如果你们有JBoss支持,建议用Jboss Messaging,毕竟出了问题也算有靠山...
ActiveMQ历史长,也相当成熟,特别是它有各种语言的客户端库,包括C/CPP等。如果你们的系统里涉及多种平台和语言,用JBoss Messaging就不爽了。不过ActiveMQ的商用支持在国内没怎么听说过。
传说JBoss Messaging可以用一种broker和ActiveMQ连起来,这样也算变相提供了多种语言的支持,俺没用过,稳定性难说。
对于大规模商用系统,厂商二线技术支持是必须考虑的事情,否则出了事情哭都没有地方哭...
ActiveMQ历史长,也相当成熟,特别是它有各种语言的客户端库,包括C/CPP等。如果你们的系统里涉及多种平台和语言,用JBoss Messaging就不爽了。不过ActiveMQ的商用支持在国内没怎么听说过。
传说JBoss Messaging可以用一种broker和ActiveMQ连起来,这样也算变相提供了多种语言的支持,俺没用过,稳定性难说。
对于大规模商用系统,厂商二线技术支持是必须考虑的事情,否则出了事情哭都没有地方哭...
37 楼
yanlv1983
2009-01-18
ActiveMQ
我们公司以前用的是activemq,性能挺不错的
每秒钟并发量也超过1W了
我们公司以前用的是activemq,性能挺不错的
每秒钟并发量也超过1W了
36 楼
sdh5724
2009-01-18
楼上所言甚是。 只要没有大规模的计算。 WEBSERVER的程序只要不是胡乱整的。 业务上处理基本不会有问题。 怕的就是乱整, 比如一次读成千上万的数据, 或者反复开启事务处理。 一般来说, 你的系统上不了100并发, 基本是乱写的成份大一点。 现在的硬件能力太强了, 强到了可以让程序员不关心内存使用, 强到可以不关心一个计算花费多少时间, 强大到可以在后期压力测试中发现问题, 解决问题。
如果仅仅是发送消息的处理, 每秒接收4000消息不是问题。 等等, 我发测试报告到BLOG。 可以参考下。
http://sdh5724.iteye.com/blog/318376
如果仅仅是发送消息的处理, 每秒接收4000消息不是问题。 等等, 我发测试报告到BLOG。 可以参考下。
http://sdh5724.iteye.com/blog/318376
35 楼
firebody
2009-01-18
linliangyi2007 写道
谢谢楼上各位大大。
对于高并发,如果不用消息队列的形式,如果能承受峰值的请求处理呢?
比较明确的一点是,如果发生4000/s的请求,如果直接调用业务逻辑执行,几乎是不可能。一次完成业务处理基本要大几十毫秒的。在我看来,一个是靠群集分担处理,另一个就只能靠队列来处理请求了,否则服务器关应付HTTP的线程等待,估计就要爆了。
对于高并发,如果不用消息队列的形式,如果能承受峰值的请求处理呢?
比较明确的一点是,如果发生4000/s的请求,如果直接调用业务逻辑执行,几乎是不可能。一次完成业务处理基本要大几十毫秒的。在我看来,一个是靠群集分担处理,另一个就只能靠队列来处理请求了,否则服务器关应付HTTP的线程等待,估计就要爆了。
压力测试需要自己设计和去做的。
光听别人说都没用。 可以很负责任的告诉你,每个业务处理几十毫秒,500个并发上来,HTTP服务器不会爆。不过,服务器的配置就是需要更仔细和谨慎了。
34 楼
firebody
2009-01-18
linliangyi2007 写道
江南白衣 写道
现在mq们的集群方案,主推都是用DataBase 或 SNA来存储消息,8台MQ互相复制的做法不大现实。
另外,OpenMQ这个开源新贵Sun同志的产品也可以考虑下哦。
另外,OpenMQ这个开源新贵Sun同志的产品也可以考虑下哦。
楼上两位提醒的是。应该是我没有说清楚,我说的模仿RAID的算法大体是这样的:
假设有8台的jBoss,J0 - J7;
当一个用户请求到达J0时,向J0的jms队列发送一条M0,J0收到后根据特定算法,它将发送一个备份消息到J3的jms中、,主--备消息可能有如下映射:
J0-->J3
J1-->J4
J2-->J5
J3-->J6
J4-->J7
J5-->J0
J6-->J1
J7-->J2
如果这时J3宕机,J6上的备份信息将继续处理,确保J3上的请求不会丢失。与此同时,J0的备份信息将发往J6,如此,按照一定算法循环,简单模拟RAID的存储备份规则。
同时每台JMS有自己的本地数据库,考虑采用简单一点的如MySQL,来存储消息队列。
在8台jBoss都正常的情况下,通过IP分配原则,分摊来自不同IP的请求。以这样的集群方式,应付高并发,且又要求高可靠的生产环境。哪怕一台服务器每秒只有500个请求的处理能力,8台也能轻松应付4000笔业务的峰值。
这个目前只是一个很粗很粗的设计思路,不要问我具体的技术细节哦,我也没去细想呢,呵呵!
目前的关键是,先选取一个高可靠,稳定且已扩展的jmx服务端,我们再根据它的一些特点来设计我们的整体服务架构。
还请兄弟们多给一些jmx服务器的点评啦,谢谢!!
4000/s的并发,是比较高,需要集群来做横向扩展的。
应用服务器的集群可以是 硬负载均衡器+应用服务器集群来达到。8台的话,每个应用服务器承载500/s的并发。
数据库集群我做企业应用主要就是用Oracle的RAC,Mysql的集群基本没有接触。
剩下的就是估计数据库服务器承载量的问题,估算前给一个具体的性能要求:
每笔业务响应时间最长不超过10S。(10S的响应时间在峰值下,我认为还是合理的)
按照你给出的估计,每笔业务处理的数据库交互假设需要50ms,我们来估算一下单台数据库服务器是否能够在性能需求下应付4000/s的并发访问。
数据库最大连接数100.
(4000/100)*(50ms) = 40*50ms = 2000ms.
加多30%的冗余误差, 2000*130/100 = 2600ms .
也就是说: 3秒之内,数据库服务器就可以处理完4000笔并发。最长等待时间不超过3秒。
从这个角度来看,只要每笔业务处理的SQL性能优化很好,每笔SQL响应时间控制在100毫秒以内,数据库集群根本不需要,当然,数据库服务器的硬件配置要配置优越。
应用服务器的设计在开始的时候,考虑横向扩展的兼容,后面基本没啥大问题。
复杂的设计方案,就是采用你说的 MS消息队列来处理任务等待队列的问题了。
这样的方案,是可以支撑大并发的服务的,但是也就仅仅支撑而已,并没有给性能带来多大好处,更不好的还是引入了一个新的中间层技术,增加了设计复杂度。整体开发规模也要上去的。
所以,我的意见是,除非设计多个不同应用体系集成,如果是自身单一体系的设计,不要考虑MS。
当然,即使多个应用体系的集成,也不一定非要MS不可。 还有WS多种方案处理,MS最好的地方就在于队列缓存,消息分发。 这些在多异平台应用集成时,会派上大用场。
33 楼
sdh5724
2009-01-18
wym0291 写道
sdh5724 写道
楼上, 本人以亲身体验, 并且以受害人的身份向你哭诉, 千万别用SUN的MQ。 痛苦, 实在是痛苦, 苦不堪言!!! 这也是目前我这么关心MQ产品的原因。
自从用了sun mq, 出去旅游一定要带上本本, 带上上网卡,脚踏祖国名山大川, 眼盯黑压压终端屏幕。
自从用了sun mq, 出去旅游一定要带上本本, 带上上网卡,脚踏祖国名山大川, 眼盯黑压压终端屏幕。
.....能说详细点么,这个我非常关心。SUN的MQ在某些方面确实易用性不好,管理端的用词也容易让人迷惑,明明是将连接配置保存在一个文件里,却把一个本地文件路径当成jndi。
简单点, 你发个1000W消息给SUN MQ, 看看他还能不能活过来, 消息堆积多了, 慢就慢吧, 那总得慢的能让我处理掉啊, 直接死了, 算个什么可靠性, 要直接删除存储文件才能起来, 如果是关键业务, 想象吧, 死人呐。 或者发几百万, 然后重新启动, 看他还能不能活过来。你能保证的消息的被完全处理, 就当我没有说过。
最可笑的是, 有时候, 连接什么的都完全正常, 消息看上去发的很正常, 服务器却没有收到。当然这个机会很少, 我碰到过几次。还有很多BUG, 报告给SUN, 也得到了BUG确认, 修复动作特别迟缓。 半年也不给发布。 受不了。 最后决定撤出所有sun相关的软件, 一律不用。
32 楼
fjlyxx
2009-01-18
解决高并发情况下的任务队列处理
我不知道你的任务是什么,但是我提一个问题.比如A向MQ发发送一个消息 很久都没有回复 那么你是否会继续向MQ发送这个消息呢?如果这样你是否有足够的机制保障队列里面的消息不重复? 如果重复是否加重了服务的负载. 如果不重复那么这个消息是否又有可能发生死锁? 这是用第三方MQ会给你带来的烦恼.
这个种问题是用MQ队列无法避免的,超时,重复.怎么解决
我不知道你的任务是什么,但是我提一个问题.比如A向MQ发发送一个消息 很久都没有回复 那么你是否会继续向MQ发送这个消息呢?如果这样你是否有足够的机制保障队列里面的消息不重复? 如果重复是否加重了服务的负载. 如果不重复那么这个消息是否又有可能发生死锁? 这是用第三方MQ会给你带来的烦恼.
这个种问题是用MQ队列无法避免的,超时,重复.怎么解决
31 楼
linliangyi2007
2009-01-17
谢谢楼上各位大大。
对于高并发,如果不用消息队列的形式,如果能承受峰值的请求处理呢?
比较明确的一点是,如果发生4000/s的请求,如果直接调用业务逻辑执行,几乎是不可能。一次完成业务处理基本要大几十毫秒的。在我看来,一个是靠群集分担处理,另一个就只能靠队列来处理请求了,否则服务器关应付HTTP的线程等待,估计就要爆了。
对于高并发,如果不用消息队列的形式,如果能承受峰值的请求处理呢?
比较明确的一点是,如果发生4000/s的请求,如果直接调用业务逻辑执行,几乎是不可能。一次完成业务处理基本要大几十毫秒的。在我看来,一个是靠群集分担处理,另一个就只能靠队列来处理请求了,否则服务器关应付HTTP的线程等待,估计就要爆了。
30 楼
wym0291
2009-01-17
sdh5724 写道
楼上, 本人以亲身体验, 并且以受害人的身份向你哭诉, 千万别用SUN的MQ。 痛苦, 实在是痛苦, 苦不堪言!!! 这也是目前我这么关心MQ产品的原因。
自从用了sun mq, 出去旅游一定要带上本本, 带上上网卡,脚踏祖国名山大川, 眼盯黑压压终端屏幕。
自从用了sun mq, 出去旅游一定要带上本本, 带上上网卡,脚踏祖国名山大川, 眼盯黑压压终端屏幕。
.....能说详细点么,这个我非常关心。SUN的MQ在某些方面确实易用性不好,管理端的用词也容易让人迷惑,明明是将连接配置保存在一个文件里,却把一个本地文件路径当成jndi。
发表评论
-
来自开源支持者的第一笔捐赠
2013-01-09 21:15 58002013年1月9号,一个平凡而又不平常的日子! IK中文分词 ... -
发布 IK Analyzer 2012 FF 版本
2012-10-23 17:50 25162首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最 ... -
发布 IK Analyzer 2012 版本
2012-03-08 11:23 36265新版本改进: 支持分词歧义处理 支持数量词合并 词典支持中英 ... -
CSDN发生严重用户账号泄密事件
2011-12-21 19:21 2571之前有在CSDN注册过的兄弟们,注意了。。。 如果你的邮箱, ... -
一个隐形的java int溢出
2011-08-30 09:44 7569故事的背景: 笔者最近在做一个类SNS的项目,其中 ... -
雷军 :互联网创业的葵花宝典
2011-05-04 10:35 3601博主评: 这片博客很短 ... -
Luci-mint站内搜索实测
2011-04-02 16:18 4160关于Luci-mint 服务器硬 ... -
发布 IK Analyzer 3.2.8 for Lucene3.X
2011-03-04 17:49 14280IK Analyzer 3.2.8版本修订 ... -
TIPS - XML CDATA中的非法字符处理
2011-02-17 15:03 3332XML解析过程中,常遇见CDATA中存在非法字符,尤其在火星文 ... -
对Cassandra的初体验
2010-10-13 17:58 9178作为“云计算”时代的架构设计人员而言,不懂K-V库会被 ... -
Spring + iBatis 的多库横向切分简易解决思路
2010-10-11 13:43 94311.引言 笔者最近在做一个互联网的“类SNS”应用,应用 ... -
发布 IK Analyzer 3.2.5 稳定版 for Lucene3.0
2010-09-08 14:43 5845新版本IKAnnlyzer3.2.8已发布! 地址: http ... -
关于Lucene3.0.1 QueryParser的一个错误
2010-05-21 21:33 2144表达式1: 引用 id:"1231231" ... -
发布 IK Analyzer 3.2.3 稳定版 for Lucene3.0
2010-05-15 14:13 6749IK Analyzer 3.2.3版本修订 在3.2.0版 ... -
windows平台上的nginx使用
2010-01-28 17:13 3417转载自:http://nginx.org/en/docs/wi ... -
发布IKAnnlyzer3.2.0稳定版 for Lucene3.0
2009-12-07 09:27 9616最新3.2.5版本已经推出,http://linliangyi ... -
在Tomcat下以JNDI方式发布JbossCache
2009-12-04 10:57 3863前言: 看过JbossCache的开发手册,发现在Jb ... -
Spring AOP小例子
2009-11-16 10:35 3412PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死 这里给 ... -
ActiveMQ 5.X 与 Tomcat 集成一(JNDI部署)
2009-11-10 15:15 5657原文地址:http://activemq.apache.org ... -
发布IKAnalyzer中文分词器V3.1.6GA
2009-11-08 23:10 11874IKAnalyzer3.2.0稳定版已经发布,支持Lucene ...
相关推荐
在“简单的activemq点对点的同步消息模型”中,我们将探讨如何构建一个基本的、基于ActiveMQ的点对点消息传递系统,以及它的工作原理。 1. **点对点模型**:在JMS中,点对点模型(P2P)是一种消息传递模式,其中...
在实际项目中使用ActiveMQ-CPP Library时,开发者需要注意以下几点: 1. 配置环境:确保项目设置正确引用了ActiveMQ-CPP的库文件和头文件路径,以便编译器能找到必要的依赖。 2. 引入库:在源代码中,通过`#include...
TextMessage message = session.createTextMessage("Hello, ActiveMQ!"); producer.send(message); session.close(); connection.close(); } } ``` 对于接收者,同样需要创建连接工厂的实例,连接到服务器,...
ActiveMQ SSL配置教程!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ActiveMQ是一款非常流行的开源消息队列中间件,它实现了JMS(Java Message Service,Java消息服务)1.1规范,面向消息的中间件(Message Oriented Middleware,MOM)是指利用高效可靠的消息传递机制进行与平台无关的...
在这个"ActiveMQ的点对点与发布/订阅模式小demo"中,我们将深入理解这两种基本的消息传递模型,并了解如何在实践中运用ActiveMQ。 1. **点对点模式(Point-to-Point,P2P)**: 点对点模式是基于队列(Queue)的...
在`activeMQ_demo`这个压缩包中,可能包含了一些示例代码,用于演示如何使用ActiveMQ实现点对点和发布/订阅模式。这些示例可能包括了以下内容: 1. 生产者(Producer):创建和发送消息到队列或主题的代码,展示了...
在本文中,我们将深入探讨如何在Visual Studio 2017(简称VS2017)环境下成功配置和测试ActiveMQ-CPP,并分享2018年12月30日的测试经验。 首先,要开始使用ActiveMQ-CPP,我们需要确保我们的开发环境已经正确地设置...
ActiveMQ是中国最流行的开源消息中间件之一,由Apache软件基金会开发。它基于Java Message Service (JMS) 规范,提供了可靠的消息传递功能,适用于分布式系统中的应用间通信。本压缩包“activeMQ收发工具.rar”包含...
由于其速度快(通常比JBossMQ快10倍),并拥有Apache的持续发展支持,ActiveMQ与OpenJMS、JbossMQ等开源消息中间件相比具有明显优势。 部署ActiveMQ相对简单,主要步骤包括下载Distribution版本、安装以及启动...
标签"3.9.4,vs2010"进一步确认了我们正在讨论的是ActiveMQ C++客户端的特定版本以及它与Visual Studio 2010的兼容性。这表明开发者或者打包者已经解决了可能存在的兼容性问题,使得在VS2010中编译和运行ActiveMQ-CPP...
**ActiveMQ的activemq.xml配置详解** ActiveMQ是Apache软件基金会开发的一个开源消息代理,它遵循Java消息服务(JMS)规范,提供可靠的消息传递功能。`activemq.xml`是ActiveMQ的核心配置文件,它定义了服务器的...
此测试涵盖了发布/订阅模型和点对点模型。 2.3 软硬件环境 硬件配置包括服务器的CPU、内存和磁盘性能,软件环境包括操作系统、JDK版本、ActiveMQ版本以及JMeter版本等。 2.4 网络环境 网络环境的稳定性和带宽限制...
本DEMO将深入探讨ActiveMQ中的两种主要通信模式:点对点(Point-to-Point,P2P)模型和发布/订阅(Publish/Subscribe,Pub/Sub)模型。 一、点对点(P2P)通信方式 1. 基本概念:在P2P模型中,消息从一个生产者...
### ActiveMQ-CPP 开发手册知识点详述 #### 一、引言 - **编写目的**:本手册旨在帮助开发者快速掌握 CMS (C++ Messaging Service) 的使用方法,提高 C++ 开发者在消息传递系统方面的开发效率,并作为 CMS 开发的...
1. **消息模型**:ActiveMQ支持多种消息模型,包括点对点(Queue)和发布/订阅(Topic)。在点对点模型中,消息由一个生产者发送到一个队列,然后由一个消费者接收并处理,每个消息只被消费一次。而在发布/订阅模型...
5. **消息队列和主题**:ActiveMQ提供两种消息模式:点对点(Queue)和发布/订阅(Topic)。点对点模式中,每个消息只有一个消费者,而发布/订阅模式下,一个消息可以被多个订阅者接收。 6. **消息过滤**:ActiveMQ...
在本文中,我们将深入探讨如何使用Spring框架与Apache ActiveMQ集成,实现点对点通信(Point-to-Point)和发布/订阅(Publish/Subscribe)模式的通信。ActiveMQ是流行的开源消息中间件,它允许应用程序之间异步传输...
**ActiveMQ配置文件详解** Apache ActiveMQ 是一个开源的消息中间件,它实现了多种消息协议,如JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),并且广泛应用于分布式系统中,提供可靠的...
### JDK与ActiveMQ版本对应关系 在探讨JDK与ActiveMQ版本对应关系之前,我们首先了解下两者的基本概念。 #### JDK(Java Development Kit) JDK是Java开发工具包的简称,它包含了Java运行环境(JRE)、Java工具、...