云计算的关键技术之大规模消息通信
云计算的一个核心理念就是资源和软件功能都是以服务的形式进行发布的,不同服务之间经常需要通过消息通信进行协作。可靠、安全、高性能的通信基础设施对于云计算的成功至关重要。通常,消息通信可以分为同步通信和异步通信两种方式,如图5·6所示。
在同步消息通信中,直接请求服务器端的服务,并等待服务结果返回后才继续执行;在服务器端,服务的运行环境则需要保存与客户端通信的信息,在处理完成时将结果返回给客户端。这种同步消息通信机制有可能对客户端系统的处理速度和服务器端系统的可用性造成影响:首先,客户端系统因为需要同步等待而无法并发处理任务;其次,同步通信机制造成服务器端系统资源长时间被占用,服务实例也由于需要与远程客户端通信而无法在任务处理完成时立即处理下一个任务;另外,同步消息通信会降低服务的可用性,因为在分布式环境中,客户端所请求的服务实例有可能因为各种原因而不可用,从而造成客户端请求无法得到处理。因此,异步消息通信对于云计算环境就显得尤为重要。
在异步消息通信中,客户端和服务器端并不直接通信。客户端把请求以消息的形式放在请求消息队列里面,然后继续处理其他业务逻辑;服务实例则会从请求消息队列中获取请求消息,并且将处理结果放入响应消息队列里面,然后立即处理下一个请求。消息通信管理软件通过判断消息请求是否成功发给目标服务实例来判断该实例是否可用,并且在目标服务实例不可用的情况下将消息发给其他服务实例,从而为客户端提供高可用的服务。
异步消息通信机制已经经过了多年的发展。早在1995年,学术界就提出了基于生产者/消费者模型的分布式消息队列方案,并且能够根据分析模型考量和预测消息队列的性能。Java Message Service(JMS)是J2EE平台上的一个消息通信标准,J2EE应用程序可以通过JMS来创建、发送、接收和阅读消息。Apache Active MQ是JMS的一个开源实现版本,IBM WebSphere MQ则是实现了JMS的一个商业产品,并且通过一系列的增强特性提高了JMS消息通信的性能和可管理性。异步消息通信已经成为面向服务架构中组件解耦合及业务集成的重要技术。
面向服务的理念使得异步消息通信对云计算更加重要。异步消息通信机制可以使得云计算每个层次中的内部组件之间及各个层次之间解耦合,并且保证云计算服务的高可用性。异步消息通信机制对于服务的可伸缩性也非常重要,消息队列管理软件可以通过队列中的消息数量和消息请求的服务类型预测每种服务的工作负载变化趋势,并且通过该趋势自动增加和减少服务实例。
云计算也给分布式系统中的消息通信带来了新的挑战。首先,消息通信服务必须足够稳定,以保证在应用程序需要使用消息服务的肘候该服务一定是可用的,并且保证消息在互联网传输过程中不会丢失,一旦消息传送出现问题,需要有技术能够保存消息,并不断重试传送,等待故障被修复后再次进行通信,这样就需要有消息的保存机制、冗余备份机制、副本同步机制等。其次,消息通信服务必须能够伸缩,从而支持大规模节点同时执行高性能的消息读写操作,为此必须要支持多种方式的消息读写模式,如边读边写、边读边发送、边写边发送等。云计算的安全问题一直以来备受关注,因此消息通信服务还要保证消息的传递是安全的,从而保证业务是安全的。此外,紧凑、高效的消息内容模型对提高消息处理效率非常重要,这在云计算这样的大规模消息通信处理环境中体现得尤为明显。云中的消息通信还要能够支持各种各样的消息格式,兼容多样的消息长度,因为使用云的用户并不局限于其一领域或者某一平台。日前,云汁算环境中的大规模数据通信技术仍在发展阶段,Amazon公司的Smple Oueue Service(SQS)是当今业界著名的云计算大规模消息通信产品,在第6章将对该产品进行介绍。
下一篇: 云计算应用落地 阿里“掘金”大数据