发布于 2015-12-05 11:05:59 | 359 次阅读 | 评论: 0 | 来源: 网络整理

   高优先级的面向用户的服务通常在大型集群上为高峰负荷和突发尖峰负荷分配(资源)。因此,大多数时候,被分配的资源没有被充分利用。超额认购利用暂时闲置的资源执行最大努力任务,如背景分析,视频/图像处理,芯片模拟,和其它低优先级的任务。
它是如何运作的?
    在 Mesos 0.23.0 中引入了超额认购,并添加了两个新的slave组件:一个资源估算程序(Resource Estimator)和一个服务质量控制程序(Quality of Service (QoS) Controller),与此同斯对现有的资源分配程序、资源监控程序和mesos slave进行了扩展。这些新组件以及它们之间的相互作用将在下文予以说明。

资源估算
•    (1)第一步是确定超额资源量。资源估算程序嵌入到资源监控程序中和定期通过ResourceStatistic信息获取使用量统计数据。资源估算程序将根据收集到的资源统计逻辑确定超额资源量。这可以是一系列的基于测得的资源使用量松弛(分配了但未被使用的资源)和分配松弛控制算法。
•    (2)从资源估算程序中保持轮询估算并对最新的估算进行跟踪。
•    (3)当最新的估算与之前的估算不同的时候,slave将超额认购资源总量发送给master。
资源跟踪与调度算法
•    (4)分配器分别从常规资源中跟踪资源的超额认购,并将这些资源注释为可撤销的。由资源估算程序决定哪种类型的资源可以被超额认购。强烈建议只超额认购可压缩的资源,例如cpu共享、带宽等。
框架
•    (5)框架可以使用常规的launchTasks() API在可撤销资源中运行任务。为了维护框架不设计来处理优先权,只有在框架信息中注册到了REVOCABLE_RESOURCES capability set中的框架会收到所提供的可撤销资源。并且,可撤销资源不能被动态保存,持久卷也不应该在可撤销的磁盘资源上创建。
任务启用
•    通常,当runTask请求被slave收到的时候,可撤销的任务开始运行。如果某些资源需要设置得与为可撤销的常规任务不同,这些资源仍被标识为可撤销的,隔离器可以采取合适的措施。
注意:如果一个任务或者执行程序所使用的任何资源可撤销,则这整个容器被当作一个可撤销的容器,因此可以被QoS Controller杀死或者节流。
干扰检测
•    (6)当可撤销的任务运行的时候,不断监控运行在这些资源上的原始任务并基于SLA保证性能是很重要的。为了对检测到的干扰作出反应,QoS控制程序需要具备杀死或节流运行可撤销任务的能力。
允许框架使用超额预购的资源
计划使用超额预购资源的框架需要在REVOCABLE_RESOURCES capability set中进行注册:
FrameworkInfo framework;
framework.set_name("Revocable framework");

framework.add_capabilities()->set_type(
    FrameworkInfo::Capability::REVOCABLE_RESOURCES);
From that point on, the framework will start to receive revocable resources in offers.
注意:没人有可以保证Mesos集群的超额认购启用。如果没有(启用),将提供不可撤销的资源。下文将说明如何配置Mesos超额认购。
使用可撤销的资源运行任务
通过现有的launchTasks API使用可撤销的资源运行任务。可撤销的资源会有一个可撤销的域设置。以下例子中,提供常规和可撤销的资源。
{
  "id": "20150618-112946-201330860-5050-2210-0000",
  "framework_id": "20141119-101031-201330860-5050-3757-0000",
  "slave_id": "20150618-112946-201330860-5050-2210-S1",
  "hostname": "foobar",
  "resources": [
    {
      "name": "cpus",
      "type": "SCALAR",
      "scalar": {
        "value": 2.0
      },
      "role": ""
    }, {
      "name": "mem",
      "type": "SCALAR",
      "scalar": {
        "value": 512.0
      },
      "role": ""
    },
    {
      "name": "cpus",
      "type": "SCALAR",
      "scalar": {
        "value": 0.45
      },
      "role": "*",
      "revocable": {}
    }
  ]
}
写一个自定义的资源估算程序
资源估算程序估算和预测slave所需使用的所有资源,通知master可以超额订购的资源。Mesos默认伴随着一个空的固定的资源估算程序。这个空的估算程序只给slave和stalls提供一个空的估算,并有效地禁止超额订购。固定估计不使用实际测量的松弛,但超额认购带有固定资源量的节点(通过命令行标志定义)。
接口被定义如下:
class ResourceEstimator
{
public:
  // 初始化资源估算程序。在其它成员方法被调用之前,这个方法需要被调用。
  //它在资源估算程序上注册一个回调。这个回调允许资源估算程序
//为slave上的每一个执行程序获取当前资源使用量。
  virtual Try<Nothing> initialize(
      const lambda::function<process::Future<ResourceUsage>()>& usage) = 0;

//返回slave上可以被超额认购的最大资源量的当前估算。一个新的估算会使//之前返回的估算失效。Slave会定期调用这个方法并将它传递给master。
//因此,每次这个方法被调用的时候,一个估算程序需要对估算进行回复。
  virtual process::Future<Resources> oversubscribable() = 0;
};
写一个自定义的QoS控制程序
实现自定义的QoS Controllers的接口被定义如下:
class QoSController
{
public:
  // 初始化QoS Controller。在其它成员方法被调用之前,这个方法需要被调//用。它在QoS Controller上注册一个回调。这个回调允许
//QoS Controller为slave上的每一个执行程序获取当前资源使用量。
  virtual Try<Nothing> initialize(
      const lambda::function<process::Future<ResourceUsage>()>& usage) = 0;

  // QoS Controller通知slave需要采取的纠偏措施,但返回
//futures 给QoSCorrection对象。更多的信息请查阅mesos.proto。
  virtual process::Future<std::list<QoSCorrection>> corrections() = 0;
};
注意: QoS Controller不能阻塞corrections()。使用它自己的libprocess 执行程序代替支持QoS Controller。
QoS Controller通知slave需要采取特定的纠偏措施。每一个纠正措施都包含有关执行程序或任务的信息和执行的动作类型。
message QoSCorrection {
  enum Type {
    KILL = 1; // Terminate an executor.
  }

  message Kill {
    optional FrameworkID framework_id = 1;
    optional ExecutorID executor_id = 2;
  }

  required Type type = 1;
  optional Kill kill = 2;
}
配置超额认购
五个新的标识被添加到了slave中:
标志    说明
--oversubscribed_resources_interval=VALUE
    Slave定期使用分配和可用的超额订购资源的最大量的当前估算更新master。通过这个标志控制这些纠偏的最小区间 (默认值: 15secs) 。
--qos_controller=VALUE     QoS Controller的名字用于超额订购。
--qos_correction_interval_min=VALUE     基于QoS Controller所观察到的运行任务的性能,slave轮询和采取QoS纠偏。通过这个标志控制这些纠偏的最小区间 (默认值: 0ns) 。
--resource_estimator=VALUE     超额认购所使用的资源评估程序的名称。
   固定的资源估计程序通过以下方式启用:
--resource_estimator="org_apache_mesos_FixedResourceEstimator"

--modules='{
  "libraries": {
    "file": "/usr/local/lib64/libfixed_resource_estimator.so",
    "modules": {
      "name": "org_apache_mesos_FixedResourceEstimator",
      "parameters": {
        "key": "resources",
        "value": "cpus:14"
      }
    }
  }
}'
   在上述例子中,共有14个CPU可以作为可被撤销的资源提供。
   为了安装一个自定义的资源估算程序和一个QoS控制程序,请查阅 [modules documentation, http://mesos.apache.org/documentation/latest/modules/]。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务