一、 概述
阿里云发布了很多款产品,今天让我们一起来了解下阿里云消息服务(Message Service)吧。
什么是消息服务呢?我来给大家说说。
消息服务是阿里云唯一商用的消息中间件服务。消息服务是一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据,构建松耦合系统。
那么,消息服务有什么独特之处呢?
与传统的消息中间件不同,消息服务一开始就是基于阿里云自主研发的飞天分布式系统来设计和实现,具有大规模,高可靠、高并发访问和超强消息堆积能力的特点。
- 消息服务易用且不失扩展性,多种灵活访问控制,一键开通,即可使用 Queue 和 Topic 。全托管无需服务器,也无需后续运维。多个消息服务单元同时服务单个用户的Queue/Topic,并具备快速迁移能力,在局部服务器故障情况下也能保证服务高可用。
- 消息服务API采用HTTP RESTful标准,接入方便,跨网络能力强;已全面接入资源访问控制服务(RAM)、专有网络(VPC),支持各种安全访问控制;接入云监控,提供完善的监控及报警机制。消息服务提供丰富的SDK、解决方案、最佳实践和7x24小时的技术支持,帮助应用开发者在应用组件之间自由地传递数据和构建松耦合、分布式、高可用系统。
众多用户信赖阿里云消息服务,目前,已有捞月狗、启信宝、云测等在使用消息服务。
阿里云消息服务典型特性介绍:
https://www.aliyun.com/product/mns?spm=5176.383518.201.46.ISwhnY
二、 技术点(消息服务五大热点技术问题分析)
在上一篇文章中,我们为大家介绍消息服务的概况,阿里云消息服务(Aliyun Message Service ,简称 MNS )是一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据,构建松耦合系统。那在使用过程中,经常遇到的热门技术问题有哪些呢?
准备工作:
常见问题:
如何使用子账号访问 MNS:
消息服务消息批量操作注意事项:
https://help.aliyun.com/knowledge_detail/13059662.html?spm=5176.788315018.2.5.hcSSGz
消息服务topic订阅的使用限制:
https://help.aliyun.com/knowledge_detail/13059648.html?spm=5176.788315018.2.7.M6XneA
希望上面的内容,能够对大家有所帮助。
三、 体验(如何基于消息服务MNS实现严格有序队列)
阿里云消息服务提供的队列(queue)主要特点是高可靠、高可用、高并发。每个队列的数据都会被持久化三份到阿里云的飞天分布式平台;其中每个队列至少有2台服务器向外提供服务;同时每台服务器都支持高并发访问。这些分布式特性,也导致了消息服务队列无法像传统单机队列那样保证严格的消息FIFO特点,只能做到基本有序。
我们的队列如果同时有多个消息发送者(sender),由于并发和网络延迟不一等问题,消息的严格顺序本身就是失去了意义,因为在这种情况下,我们根本无法获知消息在多个sender上的实际发送顺序和消息到达服务器端的真实顺序。同样的,当有多个接收者并发接收消息时,其真正的处理顺序也是不可获知的。
因此,我们认为只有一个发送者(一个进程,可以是多个线程), 一个接收者时,消息顺序才有意义,也只有在这种情况下我们能够感知和记录消息的真实发送顺序和消息的真实接收顺序。
解决方案:
基于上述假设,同时为了满足部分用户对于消息消费顺序性的要求,我们设计了下面的方案,确保消息按照用户发送顺序被接收和消费。
主要步骤:
1.消息在发送端进行染色,加上SeqId(例如:#num#)。
2.消息在接收端进行还原,并根据SeqId 排序后返回给上层,同时对于已经receive的消息会有后台线程保证消息不会被重复消费。
3.为了避免因为发送者fail,或者接收者fail,导致seqid 丢失。seqid 会被持久存储到本地磁盘文件。
当然也可以存储到其他存储或数据库:例如OSS,OTS,RDS
运行方法:
1.配置send_message_in_order.py 和receive_message_in_order.py 中下列配置项
g_endpoint,g_accessKeyId,g_accessKeySecret,g_testQueueName。
2.运行send_message_in_order.py
3.运行receive_message_in_order.py (可以不用等步骤2程序运行完成)
发送程序会发送20条消息,接收程序会按顺序消费20条消息。
也可以运行oredered_queue.py (需配置endpoint 和AK)的测试case对比普通mns queue的区别:
运行命令:$python oredered_queue.py
非严格有序:(整体有序,部分相邻消息无序,同时侧面证明MNS 的单个queue同时有多个服务器在提供服务)。
严格有序:
如果您想详细了解消息服务,请访问:
https://bbs.aliyun.com/read/264609.html?spm=5176.bbsl240.0.0.YoF8iL
使命必达--阿里云商用消息服务MNS初探:
https://yq.aliyun.com/articles/114?spm=5176.team4.teamshow1.50.vK9vvL