【问题标题】:Mesosphere Marathon API performanceMesosphere Marathon API 性能
【发布时间】:2016-08-25 22:52:44
【问题描述】:

我目前正在与我的团队设计一个系统,该系统在 Marathon 中编排大量容器。我们需要获取 Marathon 中应用的当前状态,这里有两个选项:

  1. 通过 API 轮询任务列表。可能会用到GET /v2/apps/GET /v2/apps/{app_id} API 资源。
  2. 从事件总线接收实时事件。

嗯,第二个选项似乎更优化,但无论如何,我想知道,Marathon 的 API 的性能如何。

Marathon 能承受多少负荷?它可以处理每秒 1K 的请求吗?

PS:我们希望将状态更新传递到 UI。由于我们可以启动和停止应用程序,因此这种状态本质上是动态的。大多数应用程序只运行 1-2 分钟,但有些应用程序可以在需要时运行,除非停止。

【问题讨论】:

  • 什么类型的请求?如果您对获取(不更改)状态感兴趣,并且可以假设此状态在某个时间间隔内不会更改(或者可以忽略此更改),则可以在代理后面设置 marathon。如果您有许多应用程序GET /v2/apps 最多可以达到 1 秒。
  • 我目前正在谈论获取状态。实际上,我们希望将状态更新传递给 UI。但是我们有两种类型的马拉松任务:长时间运行和那些可能正在运行的任务,例如一分钟。所以状态可以经常更新。
  • 像往常一样视情况而定。如果你没有使用 Auth 插件并且有少量的应用程序/组/任务,那么 marathon 可以处理。请记住,marathon 将其状态保存在每个应用程序/任务/组存储的 zookeeper 中,所以只要 ZK 可以处理它 Marathon 就可以工作(+ 领导者有内部缓存,所以读取应该很快)。
  • 如果应用程序在 1 分钟后完成,我相信 Marathon 会重新启动它们...
  • 你是如何确定的?听起来有点奇怪/复杂。此外,还有用于此类工作负载的现有工具,例如 Chronos 或其继任者 Metronome

标签: performance mesos marathon


【解决方案1】:

如果您想要状态信息,通过/events 端点的Event Bus 可能不是解决此问题的正确方法,因为 if 传递事件流。实际上,这意味着您必须自己跟踪整体状态...

我建议使用GET /v2/apps 和一个额外的embed 参数,请参阅docs

例如

GET /v2/apps?embed=apps.tasks

对我来说,并不清楚为什么你必须调用这个 1k 次/秒。我猜你的前端 UI 可能无法做到这一点......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多