`
liyixing1
  • 浏览: 958937 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

高并发

    博客分类:
  • jms
阅读更多
垂直扩展
垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,
ActiveMQ的被设计成尽可高效的传输消息以确保低延迟和良好的性能.

默认情况下,ActiveMQ使用阻塞IO来处理传输连接,这种方式为每一个连接分配一个线程.
你可以为ActiveMQ代理使用非阻塞IO(同时客户端可以使用默认的传输)以减少线程的使用.
可以在ActiveMQ的配置文件中通过传输连接器配置非阻塞IO.下面的是配置非阻塞IO的示例
代码:

<broker>
<transportConnectors>
<!--nio模式-->
<transportConnector name="nio" uri="nio://localhost:61616"/>
</<transportConnectors>
</broker>



除了为每个连接使用一个线程的阻塞IO,ActiveMQ还可以为每一个客户端连接使用一个消息分发
线程.你可以通过将系统参数org.apache.activemq.UseDedicatedTaskRunner设置为false来设置
ActiveMQ使用一个搞线程池.下面是一个示例:

ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false"

确保ActiveMQ代理用于足够的内存来处理大量的并发连接,需要分两步进行:
首先,你需要确保运行ActiveMQ的JVM在启动之前已经配置了足够的内存.可以使用JVM的-Xmx选项来
配置,如下所示:
ACTIVEMQ_OPTS="-Xmx1024M -Dorg.apache.activemq.UseDedicatedTaskRunner=false"

其次,需要确保JVM配置了适量的专门供ActiveMQ代理使用的内存.这个配置可用通过<system-Usage> 元素的limit属性来配置.一个不错的根据经验得到的规则时,在连接数为几百个时配置512MB为最小内存.
broker配置中的系统内存和磁盘空间使用量

<systemUsage>
<systemUsage>
 
<memoryUsage>
<memoryUsage limit="512 mb"/>
</memoryUsage>
 
<storeUsage>
<storeUsage limit="10 gb" name="foo"/>
</storeUsage>
 
<tempUsage>
<tempUsage limit="1 gb"/>
</tempUsage>
 
</systemUsage>
</systemUsage>


同样,简易减少每个连接的CPU负载.如果你正使用Open-Wire格式的消息,关闭tight encoding选项,
开启该选项会导致CPU占有过多.Tight encoding选项可以通过客户端连接的URI中的参数设置以便关闭
该选项.下

String uri = "failover://(tcp://localhost:61616?" + wireFormat.tightEncodingEnabled=false)";
ConnectionFactory cf = new ActiveMQConnectionFactory(uri);

默认的消息队列配置中使用一个独立的线程负责将消息存储中的消息提取到消息队列中而后再被
分发到对其感兴趣的消息消费者.如果有大量的消息队列,建议通过启用optimizeDispatch这个属性
改善这个特性,示例代码如下所示:

<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" optimizedDispatch="true"/>
</policyEntries>
</policyMap>
</destinationPolicy>


代码清单中使用通配符>表示该配置会递归的应用到所有的消息队列中.

为确保扩展配置既可以处理大量连接也可以处理海量消息队列,请使用JDBC或更新更快的KahaDB消息存储.默认情况下ActiveMQ使用KahaDB消息存储.

调优后的示例
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="amq-broker" dataDirectory="${activemq.base}/data">
 
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data" journalMaxFileLength="32mb"/>
</persistenceAdapter>
 
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="&gt;" optimizedDispatch="true"/>
</policyEntries>
</policyMap>
</destinationPolicy>
 
<systemUsage>
<systemUsage>
 
<memoryUsage>
<memoryUsage limit="512 mb"/>
</memoryUsage>
 
<storeUsage>
<storeUsage limit="10 gb" name="foo"/>
</storeUsage>
 
<tempUsage>
<tempUsage limit="1 gb"/>
</tempUsage>
 
</systemUsage>
</systemUsage>
 
<transportConnectors>
<transportConnector name="openwire" uri="nio://localhost:61616"/> </transportConnectors>
</broker>


横向扩展
使用代理网络来增加应用程序可用的代理数量.因为网络会自动传递
消息给所有互联的具有对消息感兴趣的消息消费者的代理,所以你可以配置客户端连接到一个代理
集群,随机的选择集群中的一个代理来连接.可以通过URI中的参数来配置,如下所示:

failover://(tcp://broker1:61616,tcp://broker2:61616)?randomize=true

为了确保队列或持久化主题中的消息不会卡在某个代理上而不能进行转发,需要在配置网络连接时,将
dynamicOnly配置成true并使用小一点的prefetchSize.预读取数量

<networkConnector uri="static://(tcp://remotehost:61617)" name="bridge" dynamicOnly="true" prefetchSize="1"
</networkConnector>

另外一种可选的部署方案可以提供更多的扩展性和更好的性能,但是需要在应用程序中做更多的计划.
这种混合的解决方案被称为传输负载分流(traffic partitioning),这种方案通过在应用程序中分割消息目的地
到不同的代理上以完成垂直扩展.

客户端的传输负载分流是一个垂直和水平混合的负载分流方案.通常不使用代理网络,因为客户端程序
会决定将哪个负载发送到哪个(些)代理上.客户端程序需要维护多个JMS连接并且决定哪个JMS连接
应该用于那个消息目的地.

没有直接使用网络连接的好处是降低了代理见过量的消息转发.你不需要像在传统程序中那样进行
额外的负载的均衡处理.


  • 大小: 21.5 KB
分享到:
评论

相关推荐

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段01讲、课程大纲及主要内容介绍.wmv │ 高并发编程第一阶段02讲、简单介绍什么是线程.wmv │ 高并发编程第一阶段03讲、创建并启动线程.mp4 │ 高并发编程第一阶段04讲、线程生命周期以及...

    高并发系统设计.pdf

    《高并发系统设计》 高并发系统设计是Java后端开发中的重要领域,它涉及到如何在面临大量用户请求时,确保系统的稳定性和高效性。在本文中,我们将探讨三种主要的高并发系统设计方法,以及如何利用缓存来提升系统的...

    .net高并发解决方案

    在.NET开发环境中,面对高并发问题,开发者需要采取一系列策略来优化系统性能,确保服务的稳定性和可扩展性。本示例将重点关注使用Entity Framework(EF)作为关系型数据库访问框架,以及RabbitMQ作为消息队列服务在...

    实战Java高并发程序设计(高清版)

    在IT行业中,尤其是在Java开发领域,高并发程序设计是一项至关重要的技能。随着互联网技术的快速发展,高并发系统已经成为处理大规模用户请求的标准配置。《实战Java高并发程序设计》这本书正是一本专注于这一主题的...

    高并发解决方案

    在IT行业中,高并发解决方案是针对大量用户同时访问或操作同一系统、应用或服务时,保证系统稳定、高效运行的技术策略。高并发场景通常出现在互联网服务、电子商务、社交媒体、在线游戏以及大数据处理等领域。以下是...

    深入理解高并发编程-核心技术原理

    【深入理解高并发编程-核心技术原理】是一本专注于讲解高并发编程核心概念和技术的书籍,由阿里P8级别的架构师及Mykit系列开源框架作者撰写。本书内容涵盖源码分析、基础案例、实战案例和面试相关知识,旨在帮助读者...

    java高并发写入用户信息到数据库的几种方法

    Java 高并发写入用户信息到数据库的几种方法 在 Java 高并发环境下,写入用户信息到数据库可能会出现一些问题,例如多个用户同时写入导致数据不一致或重复写入。为了解决这些问题,需要使用一些特殊的方法来确保...

    《高并发网站与分布式缓存Redis与开发实战》3.0.pdf

    1. 高并发网站架构:高并发网站指的是能够处理大量同时访问的网站,这种网站架构设计是为了应对大量用户同时请求数据或服务时的性能和稳定性需求。高并发网站通常采用多种技术手段,如负载均衡、分布式部署、缓存...

    高并发web架构完整1

    《高并发Web架构完整1》是一份关于优化和构建高性能Web站点的综合资源,共分为五个部分。在当今互联网行业中,随着用户数量的急剧增长,Web应用必须具备处理高并发请求的能力,才能确保服务的稳定性和用户体验。本...

    高并发的常见应对方案

    ### 高并发的常见应对方案 #### 一、理解高并发 在当今互联网时代,随着用户数量的激增和技术的进步,高并发已经成为了一个常见的技术挑战。所谓**高并发**,通常指的是在一个较短的时间内(比如几秒或几分钟),...

    P9纯手打亿级高并发系统设计手册.pdf

    "P9纯手打亿级高并发系统设计手册" 高并发系统是一种能够支撑亿级流量的系统设计,通过巧妙的设计方法,可以抵抗巨大流量的冲击,带给用户更好的使用体验。高并发系统设计的魅力就在于我们能够凭借自己的聪明才智...

    高并发回应服务器

    在IT行业中,构建一个能够处理高并发请求的服务器是一项关键任务,这关乎到系统的稳定性和性能。本项目名为“高并发回应服务器”,采用了一个强大的C++库——Boost,特别是其Asio库,来实现高效的并发处理能力。下面...

    高并发高流量网站构架

    首先,对于高并发和高流量的挑战,通常采用负载均衡技术来分散服务器的压力。镜像网站是通过复制整个网站内容到多个地理位置的服务器上,从而让用户可以从最近的服务器获取内容,降低延迟。CDN(内容分发网络)则...

    阿里P8架构师谈:高并发架构解决方案总结

    高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的...

    java高并发程序设计(原版电子书)

    《Java高并发程序设计》是一本深入探讨Java平台上的并发编程技术的专业书籍,由葛一鸣等人编著。这本书旨在帮助读者理解并掌握在高并发环境下编写高效、稳定且可扩展的Java应用程序的关键技巧和最佳实践。以下是该书...

    Java高并发编程,构建并发编程知识体系,提升面试成功率

    Java高并发编程,构建并发编程知识体系,提升面试成功率,完整版17章视频教程下载。 本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段...

    Java高并发实战_java高并发_高并发_

    第7章主要介绍了高并发框架Akka的基本使用方法,并使用Ak:ka框架实现了 个简单的粒子群算法, 模拟超高并发的场景。第8章介绍了使用Eclipse进行多线程调试的方法, 并演示了通过Eclipse进行多线程调试重现ArrayList...

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    Java高并发编程是Java开发中的重要领域,尤其在大规模分布式系统和互联网应用中,对高并发处理能力的要求日益提升。本资源包含了一套完整的Java高并发视频教学,以及相关的实战项目和面试题目,旨在帮助开发者深入...

    牛客网Linux高并发服务器开发.zip

    "牛客网Linux高并发服务器开发"这个压缩包文件,显然聚焦于利用Linux进行高性能服务器的设计与实现,这涉及到多个核心知识点。下面将详细阐述这些关键概念。 1. **嵌入式Linux开发**: 嵌入式Linux是Linux操作系统...

    C#高并发SOCKET服务器和客户端完整工程实例源码.zip

    本示例源码提供了C#语言实现的高并发SOCKET服务器和客户端的完整工程实例,这为开发者提供了学习和实践网络通信机制的机会。C#作为一种强大的.NET平台语言,拥有丰富的库支持,使得构建这样的系统变得相对简单。 ...

Global site tag (gtag.js) - Google Analytics