大规模集群管理系统Borg

原创
2016/03/19 22:21
阅读数 138

1 简介

在谷歌内部,集群管理平台Borg系统负责创建、调度、运行、监控各种类型的应用。

Borg主要用来解决三大问题:(1)屏蔽资源管理和异常处理,使用户专注于应用的设计开发;(2)支持应用高可用性;(3)通过服务器集群处理大规模任务。虽然Borg并不是首个关注上述问题的系统,但为这些问题提供了完善的解决方案

论文地址:http://research.google.com/pubs/pub43438.html

2 用户的需求

Borg的使用者是谷歌的开发者和系统管理员,负责运行谷歌的各种应用和服务。使用者已被称做jobs的方式向Borg提交应用,每个job可以包含一个或多个运行相同二进制程序的tasks。每个job运行在一组服务器中,该运行环境被称作unit,下面将以用户的视角来介绍Borg

2.1 负载

Borg中运行的应用分为两个部分。第一种是长期运行的服务,负责处理即时响应的请求(处理时长只有微秒到几百毫秒)。这些服务被用于面向最终用户的产品,比如Gmail、Google Docs、搜索或者内部基础服务。另一种是批处理任务,运行时长从几秒钟到几天的时间,它们对即时的处理性能并不敏感。应用通过多个cell并行运行,批处理任务不断被提交和完成的同时,后台服务不间断的处理来自终端用户的请求。

在过去的几年中,各种应用在Borg上搭建起来,其中包括MapReduce系统、FlumeJava、Millwheel、Pregel。其中大部分应用会通过客户端创建一个主进程和多个工作任务。

在本文章中,我们把高优先级的Borg任务称作production任务,其他成为非production任务。大部分长期运行的服务都属于prod任务,批处理任务大多属于non-prod类型。prod型任务被分配70%的cpu资源,实际中约有60%的使用率,任务分配55%的内存资源,实际中使用配额的85%。

2.2 Cluster和cells

在一个cell中的服务器从属于某一个cluster,它们通过数据中心特制的光纤连接。一个Cluster处于一个单一的数据中心中,一个cluster通常包括大量的cell单元,其中某些被用于测试或其他特殊用途。

一个中等的cell单元大约包含上万台服务器。一个cell单元中的服务器有多重规格。Borg系统自身负责哪一个服务器处理任务、分配资源,对用户屏蔽这些细节,同时监控服务器的健康运行。

2.3 Jobs和tasks

一个Borg job工作流包括名称、归属人和需要的tasks任务。Jobs工作流可以限制它的task任务运行在某种处理器、操作系统版本或者IP地址上。限制可以是固定的或可变的,后者各项是一种偏好设置而非规格。Job中的运行可以有依赖关系,一种job的启动依赖于另一个任务的结束。

每个task任务映射到一组在linux容器中运行的进程。大部分Borg的工作流并非运行在虚拟物理机中,那样的话会浪费更多的计算资源。相反,Borg系统设计为在没有虚拟化得处理器中运行。

一个Task任务包括依赖列表和在其Job中的标识。大多数task的属性都是相同的,但可以通过命令参数定制。每个计算资源的配额都通过友好的规则分配,我们不会固定资源的大小。Borg中的应用程序会尽量减少运行时的依赖关系,每个程序打包为独立的二进制代码和配置文件,并由Borg系统自动部署。

用户通过远程调用RPC、命令工具来管理Borg中的应用。每个job工作流定义在一个生命文件中。

图2:task和job的状态转移图

用户通过向Borg推送新的工作流配置信息来更新任务的属性, 这些操作是轻量的非原子的事务,可以被轻松的撤销直到任务完成。

有些task任务的更新需要服务重启,可能不在适合当前的机器,需要停止并被调度到新的服务器,其他一些则可以直接运行。

当Task任务被SIGKILL信号关闭时,可以通过unix的SIGTERM信号侦测到,这样服务有充分的条件完成当前的请求,拒绝新的请求,释放当前资源、保存状态。

2.4 allocs分配器

任务请求分配的资源会事先预留在Borg系统中,无论当前是否有任务申请。分配系统可以为将来的任务预先分配资源,回收任务结束释放的资源,调度来自不同Job的任务Task运行在一台物理机上。

 一个alloc set类似于一个Job任务,alloc set是在多个物理机上分配的alloc分组。一旦alloc set被创建后,一个或多个Job可以在其上运行。为描述简洁,通常使用task代指一个alloc,使用job代指一个alloc set

2.5 优先级、配额和管理

当任务的需求超过现有的资源时如何处理?解决方案是设置优先级和配额

每个任务都有一个用无符号整数表示的优先级。一个高优先级的Job可以抢占低优先级job的资源,即时可能会使后者终止。Borg为不同的应用场景设置了非重叠的优先级区段,包括各种监控、发布、批处理、测试环境。本文中prod jobs的优先级属于监控和发布区段


展开阅读全文
打赏
1
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
1
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部