Borg:Google集群管理大杀器

论文研读系列是阅读、总结计算机领域优秀论文的系列文章。由于论文的学术性较高,无法面面俱到,只会就关键思想进行概括介绍。简介Google的Borg集群系统需要管理数十万个jobs,要能够提...
摘要由CSDN通过智能技术生成

论文研读系列是阅读、总结计算机领域优秀论文的系列文章。由于论文的学术性较高,无法面面俱到,只会就关键思想进行概括介绍。

简介

Google的Borg集群系统需要管理数十万个jobs,要能够提高资源使用率、隔离性,通过调度策略降低关联故障发生率,通过声明式job描述语言简化复杂性。

Borg提供三个主要优势:

1.隐藏资源管理与故障处理的细节,用户可以集中在应用开发上2.高可用、高稳定3.O(10000)机器规模内高效任务调度

相关术语

1.job and task,一个job包含多个task,每个task包含多个进程

2.nameing and monitoring,通过borg name service提供服务发现。每个task都要提供健康检查HTTP接口,用于查询task的健康信息和各种指标数据3.cluster and cells,cell表示一组机器,cell中的机器构成一个集群,cell是一个逻辑区分概念

整体架构

Borg系统主要由以下构成:

1.一系列机器2.本地中心化控制器Borgmaster3.每台机器上运行的客户端Borglet

Borgmaster

Borgmaster包含两个组件:master进程和scheduler。master用于处理客户端的RPC请求,改变集群中的资源状态或者响应数据只读访问请求。master还负责管理系统中的状态(machines,task,allocs...),和Borglet通信,提供web UI。

在容错上,Borgmaster实际上有5个副本,逻辑上只有一个,通过Paxos协议选举逻辑上的leader。从选举leader到恢复数据大约要10s。master还会把自身某时刻的状态作为checkpoint存储到paxos store中。

scheduling

当提交job时,borgmaster将它记录到paxos store中,并加入到task的pending queue。scheduler会扫描获取任务,然后调度到满足其需求的机器上。扫描过程是相对复杂的,论文中是这样说的:

the scan proceeds from high to low priority, modulated by a round-robin scheme within a priority to ensure fairness across users and avoid head-of-line blocking behind a large job.

自己目前还不是太理解。

调度算法分为两部分:

1.feasibility checking,可行性检查,判断机器是否满足task的要求2.scoring,通过对满足条件1中的机器打分,选择最合适的那个

这样一来,调度器的任务就是一个不断重复下面的流程:

1.从master抓取状态变更2.更新本地状态拷贝3.执行任务调度4.通知master自己的调度情况

整个过程就像有钱人的生活,枯燥又无味...

Borglet

Borgleft是每个机器(master除外)上都要运行的客户端,它负责任务的启动、停止、重启等,还负责管理机器资源、滚动debug日志、上报机器状态到master和监控系统。

Borgmaster会主动从Borglet上polls信息,poll的频率可控制,这样Borgmaster可以控制系统中的通信频率,避免不必要的流程控制机制。

为了性能和扩展性,每个Borgmaster会运行无状态的副本,论文中称为link shard,来处理一些与Borglet的通信。在弹性方面,Borglet总是上报本节点的完整信息,link shard会对上报信息进行对比,只把不同的部分发送给状态机,降低master的更新负载。

当集群中的机器非常多时,Borg会把borglet分割为多个进行,提高吞吐量。

隔离

隔离可以保证安全性,在同一个机器上,通过chroot机制隔离不同的task,提供ssh链接机制用于debug。

现在,Borg的task运行在基于Linux CGroup的资源容器中。

总结

Borg论文出自Google工程师,内容上还是更偏工程化,和伯克利的ray、mesos论文相比,缺少学术性条理性,阅读起来也不是那么顺畅。因此阅读两边后决定只记录部分重要的内容,一些细节没有罗列。

阅读完Borg的论文,再回头看Kubernetes的架构和相关概念,和Borg论文中的思想基本上是一致的。所以对于Kubernetes从业人员来说,这篇论文还是值得阅读的。


推荐阅读:

欢迎扫码关注~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 前言    Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现 。如Urs Hölzle所说,无论是公有云还是私有云甚至混合云,Kubernetes将作为一个为任何应用,任何环境的容器管理框架无处不在。正因为如此, 目前受到各大巨头及初创公司的青睐,如Microsoft、VMWare、Red Hat、CoreOS、Mesos等,纷纷加入给Kubernetes贡献代码。随着Kubernetes社区及各大厂商的不断改进、发展,Kuberentes将成为容器管理领域的领导者。    接下来我们会用一系列文章逐一探索Kubernetes是什么、能做什么以及怎么做。2. 什么是Kubernetes    KubernetesGoogle开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:1) 使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。2) 以集群的方式运行、管理跨机器的容器。3) 解决Docker跨机器容器之间的通讯问题。4) Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。接下来本文主要从以下几方面阐述Kubernetes:1) Kubernetes的主要概念。2) Kubernetes的构件,包括Master组件、Kubelet、Proxy的详细介绍。3. Kubernetes主要概念3.1. Pods    Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Minion(Host)上,看作一个统一管理单元,共享相同的volumes和network namespace/IP和Port空间。3.2. Services    Services也是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。3.3. Replication Controllers    Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的pods,Replication Controller根据label selector来关联,通过修改pods的label可以删除对应的pods。Replication Controller主要有如下用法:1) Rescheduling如上所述,Replication Controller会确保Kubernetes集群中指定的pod副本(replicas)在运行, 即使在节点出错时。2) Scaling通过修改Replication Controller的副本(replicas)数量来水平扩展或者缩小运行的pods。3) Rolling updatesReplication Controller的设计原则使得可以一个一个地替换pods来rolling updates服务。4) Multiple release tracks如果需要在系统中运行multiple release的服务,Replication Controller使用labels来区分multiple release tracks。3.4. Labels    Labels是用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值