本文讲的是Fenzo:来自Netflix基于Java语言的Mesos调度器,【编者的话】Fenzo是一个在Mesos框架上应用的通用任务调度器。它可以让你通过实现各种优化策略的插件,来优化任务调度,同时这也有利于集群的自动缩放。

Netflix有着数百万的用户,要为这个数量级的用户提供可靠的服务并不是一件容易的事情。Netflix是由几十个分布式的服务支撑的,其中每个服务都是产品不可或缺的一部分,并且都在不断迭代着。我们需要从两个方面来优化这些服务,一个是用户体验,另外一个是服务的整体性能以及成本。为此,我们很高兴向大家介绍Fenzo这款开源软件,它是一个使用Java语言编写的Apache Mesos框架的调度器。Fenzo负责管理Netflix内部所有服务的调度和资源分配。

Fenzo现在已经开源,读者可以在GitHub中了解关于它的更多信息。

为什么使用Fenzo?

之所以要重新开发一个新框架,而不是利用社区中已有的框架,是因为我们考虑到两个方面,一是调度优化,另一个是希望能够根据资源使用情况来自动缩放集群,这两个方面下文中都将会详细解释。Fenzo更适合管理生命周期短暂(ephemerality)的应用,Netflix的用例包括实时操作的响应式数据流系统以及管理基于容器的应用部署。

在Netflix中,一天业务数据的变化非常大,如果按照业务峰值时所需要的资源来配置集群资源,那将会非常浪费,并且当出现某些热点事件时,我们的系统是无法应对这样的突发情况的。我们需要利用云的弹性以及基于动态负载来缩放集群。

虽然扩大集群似乎看起来相对比较容易,但是当集群中可用资源低于某一个阈值时,缩小集群就会带来新的挑战。当存在长期运行的任务,并且不能随便被终止时,例如拓扑结构的状态流处理耗时重构,那么调度器如果想让集群缩小,就必须让这样的主机上的所有任务几乎同时终止。

调度策略

任务调度需要优化资源分配以最大化预期目标。不同的资源分配方式会对结果产生不同的影响, 包括可伸缩性、性能等方面,因此,高效的资源分配方式对于调度管理器来说是至关重要的。比如,选择分配方式时,逐个评估所有的可用资源以及任务,这在计算方面根本吃不消。

调度模型

我们的设计专注于大规模部署具有多重约束和优化资源需求的多样化的任务与资源。如果评估最优化分配需要很长时间,就可能造成两个问题:

  • 资源闲置,等待新的任务
  • 任务启动时间增加

Fenzo采用了能够快速推动我们到正确方向的方式,而不是每次都找出最优的调度分配集。

从概念上讲,我们认为任务有一个紧迫因素决定多久需要一个任务分配,以及一个适合度因素决定是否适合一个给定的主机。

如果任务是非常紧迫的,或者如果它非常适合于一个给定的资源,我们继续并分配资源给这个任务。 否则,我们继续让任务挂起,直到紧迫性增加或发现另一台主机具有较大的适合度。

权衡调度速度与优化

Fenzo能够为你动态的选择速度与最优分配。它跨多个主机采用一个评价最优分配策略,但是只有当适合度被认为是“足够好”才能获得这种策略。然而用户为足够好的合适度定义了阈值以控制调度速度,用一个合适度评估插件来表示集群任务分配的最优化和最高级别的调度对象。这个合适度计算器由多个其他合适度计算器组成,代表一个多重面向对象。

任务约束

Fenzo任务使用可选的软或硬约束影响分配来实现与其他任务的locality和/或资源的亲和力。软约束满足best efforts基准,结合合适度计算器来给可能分配的主机打分,而硬约束则必须满足和充当一个资源选择过滤器。

Fenzo把所有相关的集群状态信息提供给适合度计算器和约束插件,这样就可以优化基于作业、资源和时间的各方面的任务。

封装和约束插件

Fenzo目前为封装提供了内置的基于CPU、内存以及网络带宽资源或者是他们集合的适合度计算器。

一些内置的约束用于解决资源类型的常见位置公共用例,将一组任务分配给不同的主机,平衡跨越给定主机属性的任务,例如可用区、主机位置等。

你可以通过提供的新插件定制合适度计算器和约束。

集群自动缩放

Fenzo支持使用两种互补的策略集群自动缩放:

  • 基于阈值
  • 基于资源短缺分析

基于阈值的自动缩放,用户可以指定每个被用在集群当中的host组(如EC2自动缩放组,ASG)。例如,有可能是使用一个EC2实例类型的计算密集型工作负载创建一个ASG,也可以使用网络密集型工作负载创建另一个ASG。每一条规则有助于保持配置可用于快速启动新作业的一定数量的可用主机。

利用资源短缺分析试图来估计主机数目,以满足待处理负载。这补充了在需求激增当中基于集群扩大的规则。 Fenzo的自动缩放还补充了预测自动缩放系统,如Netflix Scryer。

在Netflix上的应用

在Netflix上,Fenzo目前被使用在2个Mesos框架中,用于各种使用案例,包括长时间运行的服务和批处理作业。我们已经看到调度器在多重约束和自定义的适合度计算器的情况下分配资源比较快。此外,Fenzo允许我们根据当前的需求,而不是按照需求的峰值集群规模来调整集群大小。

下表显示了我们观测到的在我们其中的一个集群中的每个调度运行平均时间和最大时间。每个调度运行可能会试图分配资源给多个任务,而运行时间非常依赖于需要分配的任务数、约束的数量和种类以及从中选择资源的主机数量。

下图显示了在集群中几天内Mesos slave的数量变化,作为Fenzo的自动缩放行为的体现,表示3X在最大和最小数值上的不同。

Fenzo 在Mesos 框架上的使用

上面简易的图示告诉我们Fenzo怎样被Apache Mesos框架使用。Fenzo任务调度提供了一个没有与Mesos自身进行交互的调度核心。Mesos的框架和接口在新的资源和任务状态更新上得到回传,同时它让Mesos driver 启动基于Fenzo的分配任务。

总结

Fenzo已经成为云平台上的一个很好的帮手,它在Mesos上给我们一个高级别的控制任务调度,而且使我们在机器效率与作业运行快速化方面达到一个平衡。除此之外,Fenzo支持集群的自动缩放和封装。通过编写你自己的插件可以实现自定义调度器。

源代码在Netflix GitHub上可以找到,资源库当中包含了样本框架教大家如何使用Fenzo,而且在JUnit tests中给出了不同类型的例子包括写自定义的适应度计算器和约束条件。Fenzo wiki包含详细的文档来帮助大家开始学习Fenzo。

原文链接: Fenzo: OSS Scheduler for Apache Mesos Frameworks(翻译:edge_dawn)

原文发布时间为:2015-09-02
本文作者:edge_dawn
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Fenzo:来自Netflix基于Java语言的Mesos调度器

Fenzo:来自Netflix基于Java语言的Mesos调度器相关推荐

  1. [源码和文档分享]基于Java语言的电梯调度模拟程序

    一 需求分析 某一栋楼有20层,有5部互联的电梯.基于线程的思想,编写一个电梯调度程序.这五部电梯项目联结,即当一个电梯按钮按下去时,其它电梯相应按钮同时点亮,表示也按下去了. 二 程序设计 本项目采 ...

  2. 基于Java语言构建区块链(四)—— 交易(UTXO)

    基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...

  3. 基于Java语言构建区块链(五)—— 地址(钱包)

    基于Java语言构建区块链(五)-- 地址(钱包) 2018年03月25日 18:02:06 wangwei_hz 阅读数:1292更多 个人分类: 区块链bitcoin比特币 文章的主要思想和内容均 ...

  4. 平面最近点对问题求解—基于Java语言

    平面最近点对问题求解-基于Java语言 1. 问题描述: 本问题来自<编程之美2.11-寻找最近点对>,文中给出了两种解法:暴力解法,分治解法.其中,暴力解法很简单,求出所有点之间的距离并 ...

  5. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  6. Leetcode刷题 463题:岛屿的周长(基于Java语言)

    ** Leetcode刷题 463题:岛屿的周长(基于Java语言) ** 一. 题目描述: 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相 ...

  7. 基于Java语言构建区块链(一)—— 基本原型

    最终内容请以原文为准:https://wangwei.one/posts/df1... 引言 区块链技术是一项比人工智能更具革命性的技术,人工智能只是提高了人类的生产力,而区块链则将改变人类社会的生产 ...

  8. java 计算移动平均线_基于Java语言开发的个性化股票分析技术:移动平均线(MA)...

    基于Java语言开发的个性化股票分析技术:移动平均线(MA) 基于 Java 语言开发的个性化股票分析技术:移动平均线(MA)移动平均线(MA)是以道·琼斯的"平均成本概念"为理论 ...

  9. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)

    基于Java语言构建区块链(六)-- 交易(Merkle Tree) 2018年04月16日 10:21:35 wangwei_hz 阅读数:480更多 个人分类: 区块链比特币bitcoin 最终内 ...

  10. 基于java语言轻量级实时风控引擎

    介绍: radar是一款基于java语言,使用Springboot + Mongodb + Groovy + Es等框架搭建的轻量级实时风控引擎,适用于反欺诈应用场景,极简的配置,真正做到了开箱即用. ...

最新文章

  1. 3.2-3.3 Hive中常见的数据压缩
  2. python 运行java jar包,从Python运行javajar文件的最快方法?
  3. Win10系列:VC++ Direct3D模板介绍1
  4. 「JOISC 2020 Day4」治疗计划(线段树+dijkstra最短路)
  5. java get set 注解_java技能提升,用Lombok甩掉get和set,让代码变得更简洁
  6. 英业达软件测试工程师,「天津英业达软件测试工程师」面试招聘|工资待遇 - 看准网...
  7. 黄聪:解决wordpress定时发布文章失败”丢失计划任务”的插件
  8. 小孤山旁边长江江面很窄
  9. python中按位运算符_Python中的按位运算符详解
  10. BLE HID 协议-----蓝牙鼠标 代码流程分析
  11. 微带线特性阻抗计算公式_传输线特性阻抗计算方式
  12. MVG 为 SGS 提供汽车天线测量和 OTA 测试设备
  13. Ubuntu ROS下Conda的最好安装方式
  14. 1.1UiPath下载安装与激活
  15. [转载]提升你幽默感的100句经典短语
  16. 透过招股书看知乎的价值投资逻辑
  17. vimdiff 使用笔记
  18. 杜克大学陈怡然教授转载一篇谈ChatGPT为何无法出现在中国的文章,一针见血
  19. 【兴趣】无需电和油的水锤泵的抽水方式
  20. 个推-消息推送工具类

热门文章

  1. 排序算法3:最常用的排序——快速排序
  2. ENVI-IDL基础学习(1)
  3. RabbitMQ的项目实际应用
  4. html的字号txt的制作,font 文本颜色 字体 大小标签
  5. Android PopupWindow的简单说明
  6. Myeclipse打包生成jar文件 A exception has Occured问题解决
  7. File类的一些方法测试
  8. matlab图像融合代码,图像融合+源代码+matlab
  9. 精彩回顾 | Apache Flink Meetup · 北京站(附PPT下载)
  10. Deploy Apache Flink Natively on YARN/Kubernetes