阿里飞天系统中分布式系统设计

一、协调服务(女蜗)

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

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

  1. 女娲的目录表示一个包含文件的集合。与Unix中的文件路径一样,女娲中路径是以“/”分割的,根目录(Root entry)的名字是“/”,所有目录的名字都是以“/”结尾的。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N6ejExNDE5Nzk1NzA_size_16_color_FFFFFF_t_70

二、远程过程调用(夸父)

  1. 在分布式系统中,不同计算机之间只能通过消息交换的方式进行通信。显式的消息通信必须通过Socket接口编程,而远

程过程调用(Remote Procedure Call,简称RPC)可以隐藏显式的消息交换,使得程序员可以像调用本地函数一样来调用远程的服务。
夸父(Kuafu)是飞天内核中负责网络通信的模块,它提供了一个RPC的接口,简化编写基于网络的分布式应用。夸父的
设计目标是提供高可用(7 x 24小时)、大吞吐量(Gigabyte)、高效率、易用(简明API、多种协议和编程接口)的RPC服务。 RPC客户端(RPC Client)通过URI指定请求需要发送的RPC服务端(RPC Server)的地址,目前夸父支持两种协议形式。TCP:例如,tcp://fooserver01:9000 ,Nuwa:例如,nuwa://nuwa01/FooServer

三、安全管理(钟馗)

  1. 钟馗(Zhongkui)是飞天内核中负责安全管理的模块,它提供了以用户为单位的身份认证和授权,以及对集群数

据资源和服务进行的访问控制。
用户的身份认证(Authentication)是基于密钥机制的。
用户对资源的访问控制是基于权能(Capability)机制进行授权(Authorization)的。
Capability是用于访问控制的一种数据结构,它定义了对一个或多个指定的资源(如目录、文件、表等)所具有的
访问权限。用户访问飞天系统的资源时必须持有Capability,否则即视为非法。打个比方,如果把Capability理解为
地铁票,乘坐地铁(对地铁的一种访问方式)的时候必须要有Capability,即地铁票。
密钥对是基于公开密钥方法的,包括一个私钥和相对应的公钥。在飞天系统中,密钥对用于数字签名服务,以保证
Capability的不可伪造。换句话说,私钥用于产生数字签名(如签发Capability),公钥用于验证数字签名的有效性
(如验证签发过的Capability的有效性)。
考虑到网络通信时任何通信节点都是不可信的,所以即使是飞天自身模块内部之间的通信也同样是需要认证和授权
的,而且验证的机制也完全一样。

四、分布式文件系统(盘古)

  1. 盘古(Pangu)是一个分布式文件系统,盘古的设计目标是将大量通用机器的存储资源聚合在一起,为用户提供大规

模、高可靠、高可用、高吞吐量和可扩展的存储服务,是飞天内核中的一个重要组成部分。
1)大规模:能够支持数十PB量级的存储大小(1PB = 1000TB),总文件数量达到亿量级。
2)数据高可靠性:保证数据和元数据(Metadata)是持久保存并能够正确访问的,保证所有数据存储在处于不同机架的
多个节点上面(通常设置为3)。即使集群中的部分节点出现硬件和软件故障,系统能够检测到故障并自动进行数据的备
份和迁移,保证数据的安全存在。
3)服务高可用性:保证用户能够不中断地访问数据,降低系统的不可服务时间。即使出现软硬件的故障、异常和系统升
级等情况,服务仍可正常访问。
4)高吞吐量:运行时系统I/O吞吐量能够随机器规模线性增长,保证响应时间。
5)高可扩展性:保证系统的容量能够通过增加机器的方式得到自动扩展,下线机器存储的数据能够自动迁移到新加入的
节点上。

五、资源管理和任务调度(伏羲)

  1. 伏羲(Fuxi)是飞天内核中负责资源管理和任务调度的模块,同时也为应用开发提供了一套编程基础框架。伏羲同时支持强调响应速度的在线服务和强调处理数据吞吐量的离线任务。在伏羲中,这两类应用分别简称为**Service**和**Job**。
  2. 在资源管理方面,伏羲主要负责调度和分配集群的存储、计算等资源给上层应用;管理运行在集群节点上任务的生命周期;在多用户运行环境中,支持计算额度、访问控制、作业优先级和资源抢占,达到在保障公平的前提下,有效地共享集群资源。
  3. 在任务调度方面,伏羲面向海量数据处理和大规模计算类型的复杂应用,提供了一个数据驱动的多级流水线并行计算框架,在表述能力上兼容MapReduceMap-Reduce-Merge等多种编程模式;自动检测故障和系统热点,重试失败任务,保证作业稳定可靠运行完成;具有高可扩展性,能够根据数据分布优化网络开销。
  4. 伏羲中应用了“**Master/Worker**”工作模型。其中,Master 负责进行资源申请和调度、为Worker 创建工作计划(Plan)并监控Worker的生命周期,Worker负责执行具体的工作计划并及时向Master汇报工作状态(Status)。此外,Master支持多级模式,即一个Master可以隶属于另外一个Master之下。(如果熟悉spark技术的朋友,有没有感觉像是spark中的masterworker进程)
  5. 伏羲Master负责整个集群资源管理和调度,处理Job/Service启动、停止、Failover等生命周期的维护。同时伏羲Master支持多用户额度配置、Job/Service的多优先级设置和动态资源抢占逻辑,可以说是飞天的“大脑”。伏羲对资源调度是多维度的,可以根据CPU、内存等系统资源,以及应用自定义的虚拟资源对整个集群进行资源分配和调度。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N6ejExNDE5Nzk1NzA_size_16_color_FFFFFF_t_70 1

六、集群监控(神农)

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

神农系统包括Master、Inspector和Agent三个部分。
 Master:负责管理所有神农Agent,并对外提供统一的接口来处理神农用户的订阅(Subscription)请求,在集群中只有一个Master。
 Inspector:是部署在每一台机器上的进程,负责采集当前机器和进程的通用信息,并实时发送给该机器上的神农Agent。
 Agent:是部署在每台物理机器的后台程序。Agent负责接受来自应用和Inspector写入的信息。Agent启动后,会立刻向Master注册自己,并根据Master发来的订阅(Subscription)命令执行相应的信息采集、过滤、聚合和处理操作。目前神农Agent处理的数据分为两类:事件类数据(如应用程序故障和报警)和数值类数据(如当前应用的
性能计数、机器IO吞吐量等)。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N6ejExNDE5Nzk1NzA_size_16_color_FFFFFF_t_70 2

七、集群部署(大禹)

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

在结构上,大禹包含了集群配置数据库、节点守护进程、客户端工具集等部分。
集群配置数据库负责存放和管理所有部署了飞天的集群的配置信息,包括集群中每个节点承担的角色、各个模块的软件版本、各个模块的基本参数配置等。同时,数据库中还记录了部署或升级时每个节点的任务执行状态,保证了在部署或升级时少量不在线节点可以在重新连线后进行自动修复。
节点守护进程运行在集群的每一个节点上,负责与集群配置数据库同步该节点相关的集群信息,执行节点相关的具体运维任务,并汇报任务执行状态。节点守护进程本身是自我升级的,只需部署一次,即能保证运行的是该集群最适合的版本。在模块软件部署和升级的过程中,节点守护进程还负责软件的下载分发,为了保证效率和规避单点故障,软件的分发采用P2P的方式进行。
客户端工具集是运维人员实际使用的命令行工具和网页界面,运维人员通过这些工具对集群进行部署、升级、扩容、缩容等具体操作。大部分操作都提供了自动化和人机交互执行两种方式,分别适应简便操作和精细化控制这两种场景。在部署和升级的过程中,客户端工具负责控制总体的操作顺序,维护模块之间的依赖关系,并根据状态信息决定是否回滚或中断当前流程。

 

 


转载请标明本文来源:https://www.cnblogs.com/yswenli/p/17408573.html
更多内容欢迎star作者的github:https://github.com/yswenli/
如果发现本文有什么问题和任何建议,也随时欢迎交流~

 

posted @ 2023-05-17 14:06  yswenli  阅读(238)  评论(0编辑  收藏  举报