聊聊容器调度框架,看又拍云如何基于mesos实现

摘要

为了更好地完成云处理服务的负载均衡, 零停机升级, 自定义策略调度等功能, 又拍云用 Go 实现了自己的容器调度框架, 管理长期服务和定时任务。

嘉宾演讲视频及PPT回顾:http://t.cn/RnjCuni

Mesos介绍

Mesos官方称之为分布式系统内核,它把数据中心的CPU、内存、磁盘等抽象成一个资源池。

它主要是一个两级调度系统。首先可以看到上图中左侧的Mesos agent会在所有集群的每一台机器上部署一个agent。当这个agent启动后会向master注册,携带了一些每个机器的统计资源,由master来决定给每个框架分配多少资源。分配算法默认采用的是分级主导资源分配算法。所谓分级就是各个框架它是有角色的概念,每个角色可以选择它的一个权重。它的主导资源公平是指每个框架可能有一些是以CPU为主导,有一些是以内存为主导的,诸如此类。

主导资源公平就是说这些主导资源所在整个资源中占据的比例是公平的。当然也可以选择自己定义一个算法来替换这个分配算法。

上图中右侧是部署在Mesos上的一系列框架,当这些框架收到资源之后,它就会根据自己的需求来调度自身的任务。

Upone

Upone是为云处理服务定制的容器调度框架,支持长期服务和定期服务。

MARATHON是一个在Mesos上一个比较著名的跑长时任务的一个调度框架。CHR是一个跑定时任务的框架。

而Upone同时可以支持跑定时任务和长期任务,并且拥有一些MARATHON和CHR都没有的功能。

上图是一个Mesos启动任务的流程图。中间的绿色部分是调度器,也就是upone。如图所示,第一步是client来完成一个注册的功能,当任务没有到来的时候,master会不停地给upone发送一个offer,这个offer就是里面包含了一些资源的信息。当upone没有收到任何启动任务的时候,它会不停拒绝这个offer,以便Mesos master上面还有其它一些框架,它们可以利用这些offer。当这个任务到来的时候,upone会把这个任务放到任务队列里,等到下一个offer到来的时候就可以选择它想要的选择的那些offer,把这些任务放到这个上面去,然后告诉master,由master通知Mesos agent,告诉它需要启哪些任务,以及需要哪些CPU和内存。最后agent就会通知对应的执行器。

Upone是一个容器调度的方案,所以它的执行器都是docker的执行器。这样一个启动流程就完成了。

接下来它的状态反馈都是异步的通知,我们需要upone来订阅它的一些通知来完成。

消息交互

Upone跟Mesos master的交互是通过Mesos提供的api/v1/scheduler方案来处理的。

订阅

当要和Mesos进行通讯的时候,首先要开启一个长链接来订阅Mesos的一些事件。

上图列出的是一些常用的事件。第一个是已经订阅成功的事件,还有就是之前提到的offer的事件。包含了一些机器的资源的信息,可能会通知你这个资源不再有效了。还会告知一些状态变更的事件。接下来是一个失败的事件,它会告诉我们整个节点已经丢失或执行器已经被无端停止了。这时通常会伴随update事件,因为在上面会跑不同的任务,当一个失败的事件发生的时候,伴随这些任务其实都已经丢失了。最后一个是心跳的事件。

Offers事件处理

对于offer的处理,upone主要提供了两种消息,一种是接受。如果接受这个offer,它要把启动的信息还有它所需的资源信息统统告知master;如果要拒绝了offer,它可以选择拒绝这个offer需要有多长时间。当然也可以用一个消息来取消之前设定的拒绝时间。

Updata事件处理

任务状态的变更和upone可能产生联动,当一个任务变成running状态的时候,upone会更新负载均衡器。如果任务已经丢失之后,我们需要通过upone的调度来完成任务的迁移工作。

负载均衡

我们开源了一个基于ngx_lua的动态负载均衡方案Slardar。

当任务下发到Mesos,它帮你把任务创建出来之后,它会有一个running的事件告知upone。这时就可以把它更新到Slardar负载均衡器上。

零停机更新

Upone的更新是采用蓝绿更新的方案,就是当更新的请求发出之后,upone首先会根据新的配置去告知Mesos它要创建一篇新的APP。当这些APP成功地运行之后,upone会去把新的APP地址更新到Slardar里面,同时会摘掉旧的地址。等到一个可配置的时间之后,如果是短链接,就可以把旧的任务关闭了。

健康检查

对任务进行健康检查的第一项就是是否开启这个健康检查,第二个是上一次健康检查的时间,下面是一些健康检查的服务列表。

预处理

预处理功能就是可以在接入到APP之前可以载入相关的动态脚本来执行一些预处理的功能。比如对APP进行一些频率限制,或者对APP进行一些参数的转换。

以频率限制为例,可以在访问APP前载入引入limit相关脚本完成处理。

命令行工具

同时,我们还提供命令行工具,以便APP所有者通过upone手动操作上述负载均衡和更新部署的相关功能。

自定义策略

收到Mesos offer后,可以自定义策略来决定任务调度方案。

随机调度是尽可能让同一应用的各个任务分布到不同的机器。

但随机调度有一个缺点就是它认为所有的Slave都具备了相同的特质, 所以我们加入了对机器和任务属性的调度方案。

Consul是一个配置中心和注册服务中心。上图是一个GPU的例子。比如它给这个任务贴了一个GPU的标签,当offer到来的时候,upone可以去consul中获取所有slave的一些相关信息。

我们还需要一个实时的策略,根据机器的weight/local进行动态调度。

上图是一个监控系统,我们可以从这个监控系统中获取我们所有节点的load情况。

配置与服务发现

基本上所有的组件都会和Consul发生联系。Upone的所有APP和配置都是从consul加载的,还会从Consul拉取属性信息。当所有APP启动之后,它会往Consul中注册它的服务以便Slardar可以及时地知道服务的情况。Upone是APP所有者的入口,而Slardar是APP用户的入口。

高可用

通过Raft分布式一致性协议来实现高可用。

领导选举是通过心跳机制来触发,term充当逻辑时钟的作用。

日志复制是指领导者把一条指令(能被复制状态机执行)附加到日志中,发起附加条目RPC请求给其它角色。

强领导者的意思是日志条目只能从leader发送给其它的服务器。

告警

各个应用可以在创建任务的时候制定自己的slack channel。当任务出现异常时,发送实时通知。

精彩预告

3 月 31 日(周六) 14:00-17:30,又拍云 Open Talk主题分享系列40期——智能运维探索与实践,本次活动又拍云联合日志易,并邀请华数传媒、二维火,在强调一线落地实践的同时,为你提供来自业界最前沿的智能运维思路。欢迎大家关注!

今天的分享就到这里,有什么问题可以在评论区讨论,喜欢本次分享请给我点赞。谢谢大家!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王清培的专栏

后端服务性能压测实践

后端服务性能压测实践 标签(空格分隔): 性能 压测 后端服务 压测实践 作者:王清培(Plen wang) 背景 环境检测 压力机及压力工具检测 Linux...

90090
来自专栏IT大咖说

VMware vSphere 6.7 新功能介绍

内容来源:2018 年 06 月 19 日,VMware大中华区原厂高级技术讲师姚泉在“VMware在线技术专题分享·第二期”进行《VMware vSphere...

69730
来自专栏FreeBuf

Windows系统的JScript组件被曝存在一个0day RCE

近期,Telspace Systems公司的安全研究专家Dmitri Kaslov在Windows操作系统的JScript组件中发现了一个严重的安全漏洞,而这个...

11100
来自专栏程序员互动联盟

【一起学python】基础环境搭建

联盟有个小伙伴,为了督促自己学习进步,决定把自己以前学的python重新梳理下,并且以文章的方式展示出来,联盟专门做一起学python系列专栏,鼓励这位小伙伴学...

34890
来自专栏云计算教程系列

什么是高可用性?

随着对旨在为关键系统提供服务的可靠和高性能基础架构的需求不断增加,术语可扩展性和高可用性不再受欢迎。虽然处理增加的系统负载是一个常见问题,但减少停机时间和消除单...

89200
来自专栏林德熙的博客

大文件的存储和备份

大概这个算法是现在世界上最好的存储算法之一,原因是他的论文发在 SCI 上,现在还没有人写出一个比他好的算法。

91320
来自专栏架构师之路

数据库软件架构设计些什么

缘起:受@萧田国 萧总邀请,上周五晚上在“高效运维1号群”内分享了《58同城数据库软件架构设计与实践》(这个topic今年在数据库大会上分享过),应组织方要求,...

384110
来自专栏Albert陈凯

IntelliJ IDEA两种keymap快捷键方案Mac OS X和Mac OS X 10.5+的区别

IntelliJ IDEA针对Mac OS有两种快捷键方案(keymap),就是Mac OS X和Mac OS X 10.5+,安装后默认的方案是Mac OS ...

1.5K50
来自专栏dotnet & java

不要使用Resource Owner Password Credentials

最近公司项目在做一些重构,因为公司多个业务系统各自实现了一套登录逻辑,比较混乱。所以,现在需要做一个统一的鉴权登录中心,准备用IdentityServer4来实...

11840
来自专栏云计算D1net

深度剖析众多的Azure管理工具

自从Windows Azure首次发布以来,微软公司的首要重点就一直是开发出一套工具来帮助用户管理其资源。这个云计算平台是出了名地难于管理,但是微软公司也在一直...

36070

扫码关注云+社区

领取腾讯云代金券