在2015杭州云栖大会上,阿里云飞天事业部资深总监李津发布了一款海量消息,使命必达的消息服务产品(http://www.aliyun.com/product/mns)。该产品能够提供高效,可靠,安全,便捷,弹性扩展的消息服务;能够帮助我们轻松的构建松耦合,高并发的分布式系统;能够方便我们做跨域数据安全传输。目前,消息服务也是阿里云唯一商用消息产品,其服务稳定性和可靠性都有SLA保障。下面让我一起来详细了解一下这款产品。
架构优势带来海量,高可靠,高可用特性
在了解消息服务前,不得不提的是阿里云飞天系统。飞天是阿里云的核心平台,提供了分布式存储和分布式计算服务。阿里云大部分产品都是基于核心这个平台,消息服务也不例外。下图是消息服务基于飞天的架构图:
消息服务在研发之初就是以海量,高可靠性,高可用性为目标来设计的。这是消息服务和其他通过软件云化,以主从同步实现数据可靠性的消息中间件最根本的区别。
消息服务无论是数据节点还是元数据节点,都采用了完全分布式的设计,具有非常好的线性扩展能力。用户数据被打散存储到整个集群,突破了单物理机的存储上限,进而实现了海量的数据存储能力。用户队列个数和单队列堆积消息数都无上限限制;
消息服务每条消息在返回给用户写成功之时就确保数据已被复制3份写到不同物理机上,并且后台数据复制机制能够保证任何一台物理机故障时其上的数据能够快速的做迁移,时刻保证用户数据3份copy可用,进而实现了非常高的数据可靠性(99.99999999%);
同样的,消息服务的每个用户队列都同时有2个以上物理机提供服务,并且发生物理机故障时,队列服务单元会做快速自动迁移,这就保证了任何时刻出现机器故障,都不会影响用户对于队列的使用,进而保证了消息服务的高可用性。
六大特色功能
除了上述3大基本特点外,消息服务还提供了一系列特色功能,
特色功能1:保证消息至少被消费一次。通常的消息队列,在消息被取出后就认为用户程序已经消费成功。在阿里云的消息服务里,只有消息在被用户主动删除后,才会被认定为消息被用户程序消费成功。否则,消息服务会保证消息在用户设定的时间后继续可以消费,进而保证消息“使命必达”。 这个机制在分布式系统中单点故障成为常态的情况下非常有用,用户不用担心自己的程序崩溃而导致丢失正在处理中的消息,也无需在程序重新启动后做任何消费状态设置。
特色功能2:所有API包括管理API,都采用标准HTTP Restful 接口,支持公网访问,无平台依赖。用户可以轻松的做跨域的数据传输,而不需要在防火墙开特殊端口;也不需要等待官方某种特定语言的SDK,可以很方便的用各种语言以自己想要的方式实现SDK,做到自主可控。
特色功能3:优先级消息。在现实生活中,我们在银行,火车票售票排队窗口,会看到对于XXX优先等字样,其实在程序世界也是一样。我们会有特殊紧急的消息/任务需要优先处理。消息服务为此专门提供了优先级消息功能,能够让优先级高的消息“插队”,优先被用户程序处理。
特色功能4:延迟消息。我们也会碰到有些任务需要在一定时间后被执行的场景。例如:用户下完订单后,需要在15分钟后检查用户订单是否完成付款,这时我们只需要消息服务的队列里发送一条延迟15分钟的消息即可。处理程序15分钟后从队里读取消息,并检查订单状态是否为支付成功,如果没有则取消订单,并更新商品库存。
特色功能5: 批量消息功能。有时候,我们需要一次性往队列里发送或获取多条消息,以提高处理速度。这时消息服务的批量消息功能就可以帮助我们实现这一目的。
特色功能6: 通知消息功能。该功能是消息服务即将公测的功能,已经应用于阿里云的对象存储服务和媒体转码等云服务。目前已经支持http回调方式,后续还会支持移动推送,邮件,短息通知。可以轻松帮助我们实现真正的异步通知场景。
多种应用场景,零运维成本
消息服务提供的上述功能,能够帮助用户轻松实现系统解耦,削峰填谷,数据交换,通知回调,定时任务,优先级任务等场景,并且不需要自己购买服务器,搭建开源消息中间件软件以及后续繁琐的运维扩容工作。消息服务提供了一键开通,按需使用,弹性扩容,按量计费的全方位贴心服务。让企业可以专注于自己的系统组件间的业务逻辑,而不需要为底层消息中间件稳定性担忧,真正实现了0运维成本。
消息产品云服务化趋势,阿里云消息服务使命必达
在云计算越来越普及,SOA架构大行其道的今天,消息中间件已经成为了必不可少的组件,我们预测传统的自己搭建服务器做为消息中间件的方式也会慢慢退出历史舞台。国外云计算起步较早的国家这个趋势越加明显,涌现出了不少商用消息中间件云服务。国内阿里云凭借着自己坚实的核心技术实力和服务电商大数据的经验已经取得了国内云计算的领先地位。消息服务也正是经过了阿里云产品内部近4年的锤炼而成的商用产品,因此在成熟度和稳定性要远超其他国内同类产品,并承诺使命必达,不丢消息。