【问题标题】:Distributed Resource Allocation Architecture分布式资源分配架构
【发布时间】:2018-08-24 19:26:38
【问题描述】:

我目前正在扩展大型基础架构,其中涉及在计算场(机器数量有限的集群)上分发复杂的计算。当前系统基于面向服务的架构,集群中的每台机器上运行的服务数量有限。

这些服务发送的每个请求所使用的资源(CPU、内存)根据请求的内容而有很大差异,但可能是已知的(或至少可以预测) 提前。换句话说,对于给定的请求,有可能知道以下内容:

  • 处理请求所需的时间。 (可以从毫秒到几分钟甚至几小时不等
  • 处理请求所需的最大内存。 (从几 MB 到几 GB
  • 处理请求所需的最大内核数。 (大部分是单线程的,但有时是多线程的

我们当前的架构存在问题,因为我们的“调度程序”没有考虑任何这些参数。正因为如此,我们经常遇到一个特定服务器被非常昂贵/“不兼容”的请求占用的问题(在内存使用、使用的 CPU 内核等方面),因此处理每个请求变得非常低效,而其他服务器则被相对“便宜”的请求占用。

我们希望通过将我们当前的基础架构迁移到更现代的编排系统(例如 Kubernetes( 或其他))来优化此分配过程。我现在的问题是,考虑到这些要求(具有不同资源要求的请求的有效分配 - 在处理请求之前已知),当前可用的平台可能适合优化这种类型的工作流程?

谢谢, 乔恩

【问题讨论】:

    标签: service kubernetes scheduling distributed-computing orchestration


    【解决方案1】:

    Kubernetes 似乎非常适合这种类型的工作负载。每个请求都可以作为Job 运行,它将运行一个或多个容器来处理请求。这些容器每个都可以在其规范中提前请求他们需要的最小资源量,并且还指定这些资源的限制(例如最大内存和最大内核数),并且 Kubernetes 调度程序可以在集群中选择一个节点,该节点可以满足并执行这些要求。

    这将使您忘记工作负载实际运行的位置,并专注于确保您准确地描述每个请求的要求。

    【讨论】:

    • Kubernetes 是否有可能采用“提示”,描述一项特定的作业/请求在资源方面可能需要多少 - 以帮助调度?我知道容器配置了最小和最大内存要求,但考虑到我们的用例,很难描述每种资源使用场景的容器。
    • 在某种意义上——你可以在 Kubernetes 中做到这一点的方法是对特定作业/容器可能需要多少特定资源(例如内存或 cpu)进行保守估计,但随后对该资源设置一个上限或根本没有限制(取决于容器的确切行为)。
    • 这样,每个容器将被保证一定数量的每种资源,但如果它碰巧需要更多资源,它可能会超过其最小请求量,从而“溢出”到其他容器的请求中同一个节点(只要不是所有其他容器都需要它们请求的所有资源)。像这样过度使用资源确实有助于提高利用率
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多