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

发表于:2013-12-25来源:博客园作者:不详点击数: 标签:阿里云
对于在线服务(Service),由伏羲Master负责ServiceMaster的启动与状态监控,处理相应Service Master的资源申请请求。Service Master负责管理Service Worker的任务分配、生

  对于在线服务(Service),由伏羲Master负责ServiceMaster的启动与状态监控,处理相应Service Master的资源申请请求。Service Master负责管理Service Worker的任务分配、生命周期管理以及Failover的管理。

  对于离线任务(Job),伏羲Master负责Job Master的启动与状态监控,处理相应JobMaster的资源申请请求。Job Master根据用户输入的Job描述文件,将任务分解成一个或以上的Task,每个Task的资源申请、Task Worker的调度和生命周期维护由Task Master负责。

  1. 在线服务调度

  在飞天平台内核中,每个Service都有一个ServiceMaster和多个不同角色(Role)的Service Worker,它们一起协同工作来完成整个服务的功能。Service Master是伏羲Master管理下的子Master(Child Master),它负责这个Service相关的资源申请、状态维护以及故障恢复,并定期与伏羲Master进行交互,确保整个Service正确、正常地运行。每个Service Worker的角色和执行的动作,都是由用户来定义的。

  每个ServiceWorker负责处理一个到多个数据分片(Partition),同一时刻一个分片只会被分配到一个Service Worker处理。将数据分割成为互不相关的分片,然后将不同分片给不同Service Worker来处理是构建大规模应用服务的关键特性。数据分片是一个抽象的概念,在不同的应用中有不同的含义。

  在服务运行的过程中,每个Service的数据分片的数目和内容都是可以动态变化的,应用程序可以根据实际需要对数据分片动态地进行加载(Load)、卸载(Unload)、分裂(Split)和迁移(Migrate)等操作。

  2. 离线任务调度

  在飞天平台中,一个离线任务(Job)的执行过程被抽象为一个有向无环图(Directed Acyclic Graph,DAG):图上每个顶点对应一个Task,每条边对应一个Pipeline。一个连接两个Task的Pipeline表示前一个Task的输出是后一个Task的输入。

  每个离线任务都有一个JobMaster负责根据用户输入的任务描述(Job description)构造DAG和调度DAG中所有Task的执行。每个Task的Task Master会根据要处理的实例数量、数据在集群的分布及处理实例的资源需求,向伏羲Master申请机器资源并分配Task Worker在其上执行。分配到每台机器上的实例(Instance)是由Task Worker来具体执行完成的。每台机器上的Task Worker可以根据需要选择多线程或者多进程的不同运行模式。

  在离线Job的容错方面,除了提供对异常机器的黑名单机制、长尾Instance的后备Worker机制外,伏羲还提供了快照 (Snapshot)机制。快照是Task级别的容错机制。如果一个Task的n个Instance在前一次运行失败时完成了m个,那么Task重启后只会重新调度运行剩余的n−m个Instance。

  集群监控和部署

  1. 集群监控(神农)

  神农(Shennong)是飞天平台内核中负责信息收集、监控和诊断的模块。它通过在每台物理机器上部署轻量级的信息采集模块,获取各个机器的操作系统与应用软件运行状态,监控集群中的故障,并通过分析引擎对整个飞天的运行状态进行评估。

  神农系统包括Master、Inspector和Agent三个部分。

  Master:负责管理所有神农Agent,并对外提供统一的接口来处理神农用户的订阅(Subscription)请求,在集群中只有一个Master。

  Inspector:是部署在每一台机器上的进程,负责采集当前机器和进程的通用信息,并实时发送给该机器上的神农Agent。

  Agent:是部署在每台物理机器的后台程序。Agent负责接受来自应用和 Inspector写入的信息。Agent启动后,会立刻向Master注册自己,并根据Master发来的订阅(Subscription)命令执行相应的信息采集、过滤、聚合和处理操作。目前神农Agent处理的数据分为两类:事件类数据(如应用程序故障和报警)和数值类数据(如当前应用的性能计数、机器I/O吞吐量等)。

  神农的用户通过Master来访问神农系统,以数据订阅(Subscription)的方式获取神农系统采集到的信息。

  神农的MonitorService和AnalysisService是使用神农系统的两个应用程序。

  MonitorService在集群中的一台机器上部署,通过向各个Agent发送特定的监控请求,并根据配置设定的规则,实现对集群的状态和事件的监控,以及报警和记录。

  AnalysisService也是部署在集群中的一台机器上,通过访问神农来获得主要性能数据,然后聚合数据并计算出系统的总体资源情况(例如,集群的总资源消耗、总I/O吞吐量等),并且向外提供计算结果供查询。

  2. 集群部署(大禹)

  大禹(Dayu)是飞天内核中负责提供配置管理和部署的模块,它包括一套为集群的运维人员提供的完整工具集,功能涵盖了集群配置信息的集中管理、集群的自动化部署、集群的在线升级、集群扩容、集群缩容,以及为其他模块提供集群基本信息等。每个飞天模块的发布包都包含一个部署升级的描述文件,定义了该模块部署和升级的流程,提供给大禹使用。

  在结构上,大禹包含了集群配置数据库、节点守护进程、客户端工具集等部分。

  集群配置数据库负责存放和管理所有部署了飞天的集群的配置信息,包括集群中每个节点承担的角色、各个模块的软件版本、各个模块的基本参数配置等。同时,数据库中还记录了部署或升级时每个节点的任务执行状态,保证了在部署或升级时少量不在线节点可以在重新连线后进行自动修复。

  节点守护进程运行在集群的每一个节点上,负责与集群配置数据库同步该节点相关的集群信息,执行节点相关的具体运维任务,并汇报任务执行状态。节点守护进程本身是自我升级的,只需部署一次,即能保证运行的是该集群最适合的版本。在模块软件部署和升级的过程中,节点守护进程还负责软件的下载分发,为了保证效率和规避单点故障,软件的分发采用P2P的方式进行。

  客户端工具集是运维人员实际使用的命令行工具和网页界面,运维人员通过这些工具对集群进行部署、升级、扩容、缩容等具体操作。大部分操作都提供了自动化和人机交互执行两种方式,分别适应简便操作和精细化控制这两种场景。在部署和升级的过程中,客户端工具负责控制总体的操作顺序,维护模块之间的依赖关系,并根据状态信息决定是否回滚或中断当前流程。

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