降低异构系统之间耦合度:消息队列服务(MQS)技术浅析
创始人
2025-01-09 11:41:47
0

1 MQS简介

消息队列服务(Message Queue Service,简称MQS),是阿里云推出的分布式消息中间件服务。

MQS旨在提供可靠、海量、高并发的分布式消息队列服务,从而帮助应用开发者实现应用之间以及应用内部各组件之间的消息传递,解耦系统之间的依赖。

2 MQS功能特点

消息队列最早出现在操作系统中,解决了传统的进程通信模式中存在的很多弊端。消息队列具备的优点包括:

(1) 单独对消息的收、发进行管理,确保消息的成功传递。

(2) 提供异步的通信协议,消息产生者只需要将消息发送到消息队列中,即可立刻返回。

(3) 大大降低异构系统之间的耦合度。

在大数据时代,传统的消息队列无法满足日益增长的消息通信需求,用户个人搭建消息队列集群会带来较大的机器和运维成本;同时随着移动端规模的爆发式增长,对消息队列的安全性、可靠性以及可扩展性提出了挑战。阿里云推出的消息队列服务(MQS)是基于阿里云飞天云平台上的消息中间件服务,相比传统的消息队列而言,具备如下特点:

  • 零运维、高性能、高可扩展。
  • 数据多冗余架构,确保消息的可靠性。
  • 在有效期内,保证每条消息至少可被消费一次(at-least-once)。
  • 允许创建海量的消息队列。
  • API接口简单易用,对平台无依赖。
  •  不严格保证消息的FIFO属性。

3 MQS基本架构

MQS的基本架构如图1所示。可以分为四部分:

  • l OAuth、Authorization验权验证模块。接入阿里云的账号验证体系,用户需首先在阿里云官网(www.aliyun.com)申请账号并开通服务之后方可使用MQS服务。
  • l Http Front模块。主要负责对用户的HTTP请求进行解析、处理,并接入阿里云的验证验权模块,最终在MQS的后端服务集群执行完请求后将结果返回给用户。
  • l MQS Master模块。主要负责Message数据的切片调度,实现分布式的load balance。
  • l Message Data Server集群。基于阿里云飞天分布式计算平台的MQS后端服务集群,是MQS的核心模块,实现了关于队列、消息的所有操作。

 

图1 MQS架构图

3.1 数据多冗余

如图1所示,写入到MQS的所有消息数据都会对应三份拷贝,从而确保数据的高可靠性。

3.2 Qos控制

在Message Data Server层针对每个队列都设置有单独的QoS控制,针对该队列的访问请求量不得超过其QoS上限值。

3.3 数据多切片分布

队列的消息数据是按照特定的算法进行切片分布的,并由MQS Master进行集中管理,这不仅有效的实现了load balance,同时还能够动态的进行集群规模的弹性扩展。

4 MQS队列中消息存活周期

在具体介绍队列中消息存活周期之前,首先介绍下MQS涉及到的相关术语。

  • Active Message(活跃消息)
  • 队列中可以被取出消费的消息。
  • Inactive Message(非活跃消息)
  • 队列中已经被取出但未删除的消息,非活跃消息将保持一段时间(队列的VisibilityTimeout属性值)无法被其他人取出。
  • Expired Message (过期消息)

当队列中的某条消息超过了消息有效时间(TTL)之后仍未被取出,则该消息将变为过期消息,会被后台GC模块回收。

在介绍完一些基本术语之后,图2中显示了一条消息的整个生命周期。

在PutMessage之后,消息进入到队列中,即成为能够被取出的ActiveMessage;(如图2中A所示)

在消费者取出该条消息之后则转变为InactiveMessage;(如图2中B所示)

a) 如果在VisibilityTimeout时间段内,消费者将该条消息消费完毕,并发送删除请求,则该消息将会从队列中删除;(如图2中C所示)

b) 如果消费者未完成消费,则InactiveMessage将会在VisibilityTimeout之后自动转换成ActiveMessage,从而可以再次被取出消费;(如图2中D所示)

在消息有效时间过后,消息将变为ExpiredMessage,从队列中删除。(如图2中E.1和E.2所示)

图2 队列中消息的生命周期

5 MQS中多样的队列模式

在满足普通的消息收发模式的同时,MQS还向用户提供了多样的队列模式,分别包括延迟队列、长轮询队列以及优先级队列等。

5.1 延迟队列

在延迟队列中,发送到队列中的每一条消息都会保持一段等待时间,在等待时间过后才可以被取出消费。延迟队列可以帮用户轻松实现任务定时分发等功能。目前延迟队列支持最大的延迟时间长达7天。

5.2 长轮询队列

由于MQS实现的是基于HTTP协议的API接口,用户是通过拉(pull)的方式进行消息的获取,从而可能会出现消息数据获取不及时或者频繁发送空取消息的无用请求。MQS通过长轮询(long polling)的方式确保了用户能够在减少无用请求的基础上,又能及时获取到消息。

5.3 优先级队列

优先级队列能够为用户提供具备消息优先级别的队列。发送到队列中的每条消息都会设置有相应的优先级别;在进行消费时,较高优先级别的消息将会先被取出。目前优先级队列暂时无法确保百分百的优先级顺序。

6 技术展望

作为消息通讯的中间件服务,MQS会将服务的稳定性和安全性放在首位,主要工作将包括:

开放账户访问权限授予的API接口;

增加队列状态监控报警机制;

同时,在功能和性能方面将进行更多的尝试:

长连接功能打开;

后端server采用更高效的异步处理模式;

死信队列,消息数据备份等。

原文链接:http://blog.aliyun.com/1346?spm=0.0.0.0.R1KCex

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...