解密阿里云之飞天平台内核

发表于:2013-12-25来源:博客园作者:不详点击数: 标签:阿里云
解密阿里云之飞天平台内核.阿里云计算有限公司(简称“阿里云”)成立于2009年9月10日,致力于打造云计算的基础服务平台,注重为中小企业提供大规模、低成本、高可靠的云计算应用及服务。飞天开放平台(简称“飞天平台”或者“飞天”)是由阿里云自主研发完成的公共云计算平

  本文节选自《飞天开放平台编程指南——阿里云计算的实践(双色)》

  周憬宇,李武军,过敏意编著

  电子工业出版社出版

  阿里云计算有限公司(简称“阿里云”)成立于2009年9月10日,致力于打造云计算的基础服务平台,注重为中小企业提供大规模、低成本、高可靠的云计算应用及服务。飞天开放平台(简称“飞天平台”或者“飞天”)是由阿里云自主研发完成的公共云计算平台,该平台所提供的服务于2011年7月28 日在www.aliyun.com正式上线,推出了第一个云服务——弹性计算服务。截至本书出版时,阿里云已经推出了包括弹性计算服务、开放存储服务、关系型数据库服务、开放结构化数据服务在内的一系列服务和产品。

  飞天平台内核包含的模块可以分为以下几部分。

  分布式系统底层服务:提供分布式环境下所需要的协调服务、远程过程调用、安全管理和资源管理的服务。这些底层服务为上层的分布式文件系统、任务调度等模块提供支持。

  分布式文件系统:提供一个海量的、可靠的、可扩展的数据存储服务,将集群中各个节点的存储能力聚集起来,并能够自动屏蔽软硬件故障,为用户提供不间断的数据访问服务;支持增量扩容和数据的自动平衡,提供类似于POSIX的用户空间文件访问API,支持随机读写和追加写的操作。

  任务调度:为集群系统中的任务提供调度服务,同时支持强调响应速度的在线服务 (Online Service)和强调处理数据吞吐量的离线任务(Batch Processing Job);自动检测系统中故障和热点,通过错误重试、针对长尾作业并发备份作业等方式,保证作业稳定可靠地完成。

  集群监控和部署:对集群的状态和上层应用服务的运行状态和性能指标进行监控,对异常事件产生警报和记录;为运维人员提供整个飞天平台以及上层应用的部署和配置管理,支持在线集群扩容、缩容和应用服务的在线升级。

  分布式系统底层服务

  1. 协调服务(女娲)

  女娲(Nuwa)系统为飞天提供高可用的协调服务(Coordination Service),是构建各类分布式应用的核心服务,它的作用是采用类似文件系统的树形命名空间来让分布式进程互相协同工作。例如,当集群变更导致特定的服务被迫改变物理运行位置时,如服务器或者网络故障、配置调整或者扩容时,借助女娲系统可以使其他程序快速定位到该服务新的接入点,从而保证了整个平台的高可靠性和高可用性。

  女娲系统基于类Paxos协议,由多个女娲Server以类似文件系统的树形结构存储数据,提供高可用、高并发用户请求的处理能力。

  女娲系统的目录表示一个包含文件的集合。与UNIX中的文件路径一样,女娲中路径是以“/”分割的,根目录(Root entry)的名字是“/”,所有目录的名字都是以“/”结尾的。与UNIX文件路径不同之处在于:女娲系统中所有文件或目录都必须使用从根目录开始的绝对路径。由于女娲系统的设计目的是提供协调服务,而不是存储大量数据,所以每个文件的内容(Value)的大小被限制在1MB以内。在女娲系统中,每个文件或目录都保存有创建者的信息。一旦某个路径被用户创建,其他用户就可以访问和修改这个路径的值(即文件内容或目录包含的文件名)。

  女娲系统支持Publish/Subscribe模式,其中一个发布者、多个订阅者(One Publisher/Many Subscriber)的模式提供了基本的订阅功能;另外,还可用通过多个发布者、多个订阅者(Many Publisher/Many Subscriber)的方式提供分布式选举(DistributedElection)和分布式锁的功能。

  再举一个使用女娲系统来实现负载均衡的例子:提供某一服务的多个节点,在服务启动的时候在女娲系统的同一目录下创建文件,例如,server1 创建文件“nuwa://cluster/ myservice/server1”,server2在同一目录下创建“nuwa://cluster/myservice/server2”。当客户端使用远程过程调用时,首先列举女娲系统服务中“nuwa://cluster/myservice”目录下的文件,这样就可以获得server1和 server2,客户端随后可以从中选择一个节点发出自己的请求,从而实现负载均衡。

  2. 远程过程调用(夸父)

  在分布式系统中,不同计算机之间只能通过消息交换的方式进行通信。显式的消息通信必须通过Socket接口编程,而远程过程调用(Remote Procedure Call,RPC)可以隐藏显式的消息交换,使得程序员可以像调用本地函数一样来调用远程的服务。

  夸父(Kuafu)是飞天平台内核中负责网络通信的模块,它提供了一个RPC的接口,简化编写基于网络的分布式应用。夸父的设计目标是提供高可用(7×24小时)、大吞吐量(Gigabyte)、高效率、易用(简明API、多种协议和编程接口)的RPC服务。

  RPC客户端(RPC Client)通过URI指定请求需要发送的RPC服务端(RPC Server)的地址,目前夸父支持两种协议形式。

  TCP:例如,tcp://fooserver01:9000

  Nuwa:例如,nuwa://nuwa01/FooServer

  与用流(stream)传输的TCP通信相比,夸父通信是以消息(Message)为单位的,支持多种类型的消息对象,包括标准字符串std::string和基于std::map实现的若干string键值对。

  夸父RPC同时支持异步(asynchronous)和同步(synchronous)的远程过程调用形式。

  异步调用:RPC函数调用时不等接收到结果就会立即返回;用户必须通过显式调用接收函数取得请求结果。

  同步调用:RPC函数调用时会等待,直到接收到结果才返回。在实现中,同步调用是通过封装异步调用来实现的。

  在夸父的实现中,客户端程序通过Unix Domain Socket与本机上的一个夸父代理(Kuafu Proxy)连接,不同计算机之间的夸父代理会建立一个TCP连接。这样做的好处是可以更高效地使用网络带宽,系统可以支持上千台计算机之间的互联需求。此外,夸父利用女娲来实现负载均衡;对大块数据的传输做了优化;与TCP类似,夸父代理之间还实现了发送端和接收端的流控(Flow Control)机制。

  3. 安全管理(钟馗)

  钟馗(Zhongkui)是飞天平台内核中负责安全管理的模块,它提供了以用户为单位的身份认证和授权,以及对集群数据资源和服务进行的访问控制。

原文转自:http://kb.cnblogs.com/page/183553/