1.   MQ现状

1.1. 概述

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现

1.2. activemq的特性

多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上

支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

支持通过JDBC和journal提供高速的消息持久化

从设计上保证了高性能的集群,客户端-服务器,点对点

支持Ajax

支持与Axis的整合

可以很容易得调用内嵌JMS provider,进行测试

1.3. 现有方案

利用官方提供的基于network的cluster方案。

1.4. 存在问题

基于cluster的方案,用的版本比较旧5.6,其network之间通道存在tcp半连接问题,导致集群频频出现问题。

目前是,直接采用一台MQ进行业务操作,按现有业务,可以支持现有的高并发。

实际上,目前迫切需要的是进行MQ的高可用,即Master-Slave方案

2.   MQ提供的集群方案

2.1. broker-cluster负载方案

Broker-Cluster的部署方式就可以解决负载均衡的问题。Broker-Cluster部署方式中,各个broker通过网络互相连接,并共享queue。当broker-A上面指定的queue-A中接收到一个message处于pending状态,而此时没有consumer连接broker-A时。如果cluster中的broker-B上面由一个consumer在消费queue-A的消息,那么broker-B会先通过内部网络获取到broker-A上面的message,并通知自己的consumer来消费。

2.1.1.   static Broker-Cluster部署

2.1.2.   Dynamic Broker-Cluster部署

dynamicOnly="true"

networkTTL="3"

prefetchSize="1"

decreaseNetworkConsumerPriority="true" />

2.2. master-slave高可用方案

2.2.1.   shared filesystem Master-Slave部署方式

主要是通过共享存储目录来实现master和slave的热备,所有的ActiveMQ应用都在不断地获取共享目录的控制权,哪个应用抢到了控制权,它就成为master。

多个共享存储目录的应用,谁先启动,谁就可以最早取得共享目录的控制权成为master,其他的应用就只能作为slave。

2.2.2.   shared database Master-Slave方式

与shared filesystem方式类似,只是共享的存储介质由文件系统改成了数据库而已。

2.2.3.   Replicated LevelDB Store方式

这种主备方式是ActiveMQ5.9以后才新增的特性,使用ZooKeeper协调选择一个node作为master。被选择的master broker node开启并接受客户端连接。

其他node转入slave模式,连接master并同步他们的存储状态。slave不接受客户端连接。所有的存储操作都将被复制到连接至Master的slaves。

如果master死了,得到了最新更新的slave被允许成为master。fialed node能够重新加入到网络中并连接master进入slave mode。所有需要同步的disk的消息操作都将等待存储状态被复制到其他法定节点的操作完成才能完成。所以,如果你配置了replicas=3,那么法定大小是(3/2)+1=2. Master将会存储并更新然后等待 (2-1)=1个slave存储和更新完成,才汇报success。至于为什么是2-1,熟悉Zookeeper的应该知道,有一个node要作为观擦者存在。

单一个新的master被选中,你需要至少保障一个法定node在线以能够找到拥有最新状态的node。这个node将会成为新的master。因此,推荐运行至少3个replica nodes,以防止一个node失败了,服务中断。

2.3. 方案对比

broker-cluster的集群在多个broker之间fail-over和 load-balance

master-slave能fail-over,但是不能load- balance

消息在多个broker之间转发,但是消息只存储在一个broker上,一旦失效必须重启,而主从方式master失效,slave实时备份消息。

jdbc方式成本高,效率低

master-slave方式中pure方式管理起来麻烦

因此,我们把MASTER/SLAVE和BROKER CLUSTER两者相结合,可以得到一个完全解决方案:即又可以做到集群又可以做到任何一个BROKER如果发生宕机节点消息也不丢失。

3.   最佳方案

3.1. 方案介绍

根据以上方案,结合优缺点,最终我们需要实现集群的高可用和负载均衡,所以结合后,基于zookeeper+network的集群解决方案,具体如下图所示:

集群连接方式如下图:

3.2. 升级策略

针对现在线上使用MQ的现状分析,目前需要首先考虑支持高可用,所以以上方案可进行逐步实施:

1 对现有的MQ升级到最新版本,并测试验证对5.6的兼容性

2 搭建基于zookeeper的Master-Slave集群GA-MQ。

3 在高可用集群GA-MQ和原有MQ之间建立network连接。

4 切换线上生产者到新的集群GA-MQ

5 切换线上消费者到新的集群GA-MQ

6 等待原有MQ消息完全处理完成后,关闭服务。

7 搭建GB-MQ集群,并按照业务进行负载划分。

8 在GA-MQ和GB-MQ之间建立network连接,实现最终方案。

以上每一步,都需要进行严格的测试验证,才可进行生产环境的切换。

java jms clust,activeMQ使用总结 (集群方案)相关推荐

  1. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  2. 【Java项目】好客租房——数据库集群部署

    前置知识: [Mysql] 系统架构存在的问题 DB Server 目前只是用了单节点服务,如果面对大并发,海量数据存储,单节点的系统架构存在很严重问题,需要实现 Mysql集群 ,来应对大并发.海量 ...

  3. 聊聊Redis的各种集群方案、及优缺点对比

    在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台 ...

  4. 阿里二面:Redis有几种集群方案?我答了4种

    背景 在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要 ...

  5. Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)

    Redis在3.0版本前只支持单实例模式,虽然Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版. 各大企业等不急了,在3 ...

  6. RabbitMQ集群方案

    目录 1.集群方案的原理 2.单机多实例部署 3.RabbitMQ镜像集群配置 4.负载均衡-HAProxy 4.1 安装HAProxy 4.2 配置HAProxy 实际生产应用中都会采用消息队列的集 ...

  7. redis集群方案-Twemproxy

    redis集群方案-Twemproxy 1 Twemproxy是什么? Twemproxy是一种代理分片机制,来源于Twitter开源.Twemproxy按照路由规则,转发给后台的各个Redis服务器 ...

  8. Redis集群方案对比:Codis、Twemproxy、Redis Cluster

    为了保证Redis的高可用,主要需要以下几个方面: 数据持久化 主从复制 自动故障恢复 集群化 我们简单理一下这几个方案的特点,以及它们之间的联系. 数据持久化本质上是为了做数据备份,有了数据持久化, ...

  9. Redis集群方案及框架

    redis集群分为服务端集群和客户端分片,redis3.0以上版本实现了集群机制,即服务端集群,3.0以下使用客户端分片(Sharding). 通常,为了提高网站响应速度,总是把热点数据保存在内存中而 ...

最新文章

  1. 数据库原理与设计 P75作业 学号2013211466 班级0401302
  2. 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
  3. 【408预推免复习】操作系统引论
  4. 神经网络迭代次数的数学构成
  5. OSM OpenStreetMap 获取城市路网数据及转为ESRI shp数据的方法
  6. 02 基本序列以及序列表示
  7. phantomjs linux 中文不显示,linux 安装phantomJs 用于截图,处理中文乱码,和样式问题...
  8. Java中级工程师知识图谱
  9. Wirshark 显示过滤器
  10. JS学习记录(BOM部分)
  11. Sql Server之旅——第四站 你必须知道的非聚集索引扫描
  12. STL中的lower_bound和upper_bound的理解
  13. 平流式隔油池计算_隔油池计算方法及图集[参考提供]
  14. Gartner:2017年全球公有云服务市场增长18%
  15. 仓库无证如何处罚_法律问题 | 在船舶检查过程中,我遇到的一些问题该如何解决?...
  16. 【NOIP2017普及组】跳房子
  17. 投入产出表之影响力系数和感应度系数的计算--基于Excel
  18. 可以下载视频的手机浏览器
  19. iPhone自定义手机铃声完整版教程
  20. CUDA11.7安装-C盘杀手(含卸载和安装教程)

热门文章

  1. 常量函数与常量对象的使用
  2. USB Gadget iMX6UL开发板模拟U盘
  3. 办公自动化打卡 task01
  4. MSBuild的入门完整教程(包学包会)
  5. 常用的Web服务架构
  6. 电信校园网 - 断网重连 - 武汉xx学院
  7. ssh framework
  8. 如何搭建一个好的知识库管理系统?
  9. Vue.js实现简单的按钮点击改变css样式
  10. [渝粤教育] 四川农业大学 Java程序设计 参考 资料