消息中间件大全

在当今互联网的世界里,互联网行业的“三高”问题已经是常态,也因此我们必须要掌握一些可以应对三高问题的技术。

 

鉴于很多传统行业的小伙伴,对“三高”不是特别清楚,这里咱么先来解释下三高的概念。

 

首先,这个三高绝对不是你们所理解的,高血糖、高血脂、高血压,这三高,对于程序员来讲,估计这辈子也不会跟他们有什么关系(程序员都是精瘦型)。

 

而互联网行业的,所谓“三高”,高并发、高性能、高可用,简称三高(3H)。

 

 

为了应对这些三高问题,我们程序员可是,熬没了头发,每天都在思考如何解决这些问题;就在这个被动的解决问题的过程中,技术在快速的更新迭代,程序员的头发也在慢慢凋零。

 

在技术迭代的过程中,就出现了一种叫做消息中间件的技术,当然这个消息中间件是一个统称了,他里面还包含其他具体的技术。而这个消息中间件,我们又可以分成两个概念来理解它,一个消息,一个中间件

 

咱么先来看下什么是消息,在互联网的系统中,所谓消息,就是系统与系统通信所传递的信息,就好比我们人与人之间交流,也是要通过语言来传递的信息的,这个信息就可以类比成系统的中消息。

 

中间件的概念呢,其实就是底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件,说人话就是,处在一个非核心的位置,有它没它都行,并不影响系统正常运行,它在两个系统中相当于一个桥梁的作用。

 

 

知道了消息是啥,中间件是啥,那么下一个问题,什么是消息中间件。学英语的时候,大家经常说,每个字母都认识,字母组合在一起就不认识了,如果把消息和中间件组合在一起估计你也不认识了。

 

消息中间件就是利用高效可靠的消息传递机制进行异步的数据传输,并基于数据通信进行分布式系统的集成。通过提供消息队列模型和消息传递机制,可以在分布式环境下扩展进程间的通信。

 

在互联网行业,消息中间件已经是大型分布式系统中不可或缺的重要组件。看似简单,却解决了不少难题。比如分布式系统中的异步处理、系统耦合、流量削锋、分布式事务管理等。轻松实现了一个高性能,高可用,高扩展的系统。

 

今天咱们就来见识见识,几种主流的消息中间件技术。

 

 

常见的消息中间件

当今市面上有很多主流的消息中间件,比如:资历比较老的ActiveMQ,比较火的RabbitMQ,以及现在当红小生Kafka,还有自带光环RocketMQ(阿里巴巴开源),以及退居二线的ZeroM、MetaMQ等。

 

消息中间件的种类的还是非常丰富的,但是目前比较主流的当属Kafka、RabbitMQ了,接下来我们就对几个主流的中间件做一个简单的介绍。

 

 

RabbitMQ

RabbitMQ在2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一,支持多种客户端,如:Python、Java等,。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

 

 

Kafka

Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统,之后成为Apache项目的一部分;它可以处理消费者规模的网站中的所有动作流数据(网页浏览,搜索和其他用户的行动),在大数据时代的今天,这是非常重要的一部分数据。Kafka高吞吐量的特性,使他同样在大数据领域备受欢迎。

 

 

ActiveMQ

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。

 

 

RocketMQ

RocketMQ源自阿里,纯国产件,纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。据说RocketMQ在设计时参考了Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用支撑了阿里多次双十一活动,可以说是经历过大考的中间件。

 

 

没有比较就没有伤害

上面咱么介绍了四种比较常用的中间件技术,但是在具体的工作我们还是需要选择其中的一种,如下图中,所体现的特性;就可以作为选择的一个参考。

 

 

如何选择

通常在我们选择中间件产品的时候;除了,从技术本身考虑之外,我们都会从两个方面进行考虑,一个是从公司基础实力,一个是业务场景。

 

 

公司实力

如果是中小型软件公司,一般多选择RabbitMQ,它管理界面用起来十分方便。而且RabbitMQ的社区十分活跃,如果实际开发中遇到什么问题,都可以从社区找到帮助,这点对于中小型公司来说十分重要,因为中小公司,技术水平比较薄弱;这也说明RabbitMQ是一个非常成熟的技术。

 

如果是大型软件公司,根据具体使用在RocketMQ和kafka之间二选一。一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。而且还可以针对RocketMQ进行定制化开发。

 

 

业务场景

RocketMQ定位于非日志的可靠消息传输(日志场景也OK),目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。

 

Kafka主要特点是追求高吞吐量,如果一开始的目的就是用于日志收集和传输。适合于产生大量数据的互联网服务的数据收集业务。

 

RabbitMQ基于AMQP协议来实现,AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全;所以,对数据一致性、稳定性和可靠性要求很高的场景建议选择RabbitMQ。

 

其实更多是时候,是基于以上两种情况来进行综合考虑的,既要考虑的成本,又要考虑业务需求。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值