技术 | 消息中间件的应用场景分析
Posted 航天星云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术 | 消息中间件的应用场景分析相关的知识,希望对你有一定的参考价值。
01
概述
每一种新技术的出现,都会有它特定的应用场景。由于业务的扩张,原来单体应用能独立完成的业务,现在不得不构建分布式的业务系统来完成,消息中间件是分布式业务系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
02
什么是消息中间件
2021
消息中间件是解决不同软件系统间在消息传递过程中可能发生问题的一个通用解决方案,也正是因此而诞生的一个可独立运行的组件(软件),目前常用的消息中间件有ActiveMQ,RabbitMQ,Kafka等。
03
消息中间件的特性
消息中间件的特性与消息队列(Message queue,简称MQ)的特性密不可分。
先进先出
消息队列的顺序在入队的时候就基本已经确定了,一般是不需人工干预的。
发布订阅
发布订阅是一种很高效的处理方式,如果不发生阻塞,基本可以当成是同步操作。
持久化
持久化能让消息队列的使用不仅仅局限于部分场景的辅助工具,而是能像数据库一样存储核心的数据。
分布式
在现在大流量、大数据的使用场景下,支持分布式的部署,才能被广泛使用。消息队列的定位就是一个高性能的中间件。
04
典型应用
消息队列中间件是分布式系统中重要的组件,主要解决包括订阅发布、削峰填谷、异步解耦、顺序收发,日志收集等,实现高性能,高可用,可伸缩和最终一致性架构。
异步处理
场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法包含串行的方式和并行方式。
1
串行方式
将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。
2
并行方式
将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。
假设三个业务节点每个使用50毫秒,不考虑网络等其他开销,则串行方式的时间是150 毫秒,并行的时间可能是100毫秒。如果CPU的吞吐量是100次/秒,则串行方式1秒内CPU可处理的请求量是7次(1000/150),并行方式处理的请求量是10次(1000/100)。
通过以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?通过引入消息队列,异步处理。改造后的系统架构如下:
通过改造,用户的响应时间降低为55毫秒,系统的吞吐量提高到18次/秒,大约是串行方式的2倍,并行方式的3倍。
应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图
传统模式的缺点:假如库存系统无法访问,则订单减库存将失败,从而导致订单失败,订单系统与库存系统耦合。
如何解决以上问题呢?引入消息队列后的方案,如下图:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
如果在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。
流量削峰
流量削峰也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用中加入消息队列。
a、可以控制活动的人数
b、可以缓解短时间内高流量压垮应用
服务器接收用户的请求后,首先写入消息队列,如消息队列超过最大数量,则直接抛弃用户请求或跳转到错误页面。
秒杀业务处理模块会根据消息队列中的请求信息,再做后续处理。
消息通讯
消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。
1
点对点通讯
客户端A和客户端B使用同一队列,进行消息通讯。
2
聊天室通讯
客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。
以上实际是消息队列的两种消息模式,点对点模式和发布订阅模式。
海量数据同步(日志)
日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:
日志采集模块:负责日志数据采集,定时写入Kafka队列。
Kafka集群:负责日志数据的接收,存储和转发。
日志处理模块:订阅并消费Kafka集群中的日志数据。
通常日志收集系统,分为Zookeeper注册中心,日志收集客户端,Kafka集群和Storm集群(OtherApp)四部分组成,如下图所示:
日志采集:用于采集应用系统的日志,并将数据推送到Kafka队列。
Kafka集群:接收,路由,存储,转发等消息处理。
Storm集群:与OtherApp处于同一级别,采用拉的方式消费队列中的数据。
流式数据处理(卫星服务平台)
在全球新一轮工业革命的大背景下,中国航天领域在商业航天方面发展取得了突破性进展。随着商业卫星的小型化、批量化、星座化的发展,在轨需要管理的商业卫星数量将急剧增长,卫星服务平台需要对众多卫星数传数据进行分类、提取、分析、处理和综合展示,这里我们通过使用Kafka消息集群实现卫星流式数据的缓存及转发,同时实现了各个系统实时类信息的交互。
05
总结
本文仅仅列举了消息中间件的一部分使用场景,对于消息中间件的其他应用场景还有待我们去开发,使用消息中间件所带来的系统可用性降低,系统复杂度提高和数据一致性等问题,这些都是本文没有顾及的内容,将在后面的文章中讨论。
END
文/图:刘斌城
编辑:刘玲
往期推荐
点亮 ,告诉大家你也在看
以上是关于技术 | 消息中间件的应用场景分析的主要内容,如果未能解决你的问题,请参考以下文章