K8s 中微服务利用率低的性能问题(对开发和 DevOps 也有影响)

问题描述 投票:0回答:1

当我设计微服务并部署到 K8s 时,我发现我很难获得更高的微服务利用率(最大利用率仅为 0.1-0.3 个 CPU)。您有最佳实践吗?我们如何提高微服务 CPU 利用率?

让我描述一下LAB环境:

  • 具有 5 个节点的 K8
    • 每个节点具有 14 个 CPU 和 128 GB RAM(节点构建在使用 VMWare 的虚拟机上)
    • K8s 与 nginx 并设置完整日志等
  • 微服务
    • 在Python语言中(GIL限制在一个进程中处理,这意味着最多1个CPU利用率)
    • 我用了三个豆荚
    • 每次调用的处理时间约为100ms

我们进行了性能测试,您可以看到这些输出:

  • 微服务利用率最大。每个 Pod 中有 0.1-0.3 个 CPU

我预计问题是,K8s 管理(路由、日志等)会产生更高的资源利用率,但无法为我们的微服务的利用提供高吞吐量。我认为,提高微服务利用率的最佳实践可以是:

1]增加豆荚数量

  • 优点,我们将获得更高的微服务利用率,但每个 K8s 节点的 Pod 数量受到限制
  • 缺点,每个 Pod 的微服务利用率仍然相同

2]使用微批处理

  • 优点,我们可以支持调用捆绑(例如每一秒、两秒),在这种情况下,微服务端的处理时间会更长
  • 缺点,我们会增加处理时间,因为捆绑(不是实时处理的理想场景)

3]K8s更改日志级别

  • 优点,我们可以降低 nginx 中的日志级别,...到错误
  • 缺点,详细问题跟踪可能存在问题

4]使用带有物理硬件(不是VMware)的K8s节点

  • 优点,性能更好
  • 缺点,此更改可能会产生额外成本(新硬件)和维护成本

您是否使用其他最佳实践、想法来提高 k8s 中的微服务利用率?

python performance microservices real-time
1个回答
0
投票

性能测试是一个非常复杂的主题,在构建测试设置时需要非常精确,并且需要对所有构建部分有扎实的知识,因为很容易把事情搞砸(我做了很多次)。

我的一些想法:

  • 如果您在配置了超过 1 个 CPU 的 Pod 上运行单线程应用程序,那么您将永远不会在 Pod 级别看到高 CPU 使用率。
  • 即使您运行具有繁重 I/O 密集型工作负载(例如大量外部 HTTP 调用)的多线程应用程序,您仍然不会看到高 CPU 使用率,因为线程大部分时间都处于不可运行状态。
  • Kubernetes 管理工作流程确实有一些开销,在查看集群级别(甚至节点级别)指标时可以观察到,但 Pod 级别指标与您的应用程序完全相关(尤其是 CPU 使用率)。

因此,要查看 Pod 级别的高 CPU 使用率,您可以执行以下两件事:

  • 使用配置有 1 个 CPU 的 Pod 运行单线程应用程序(执行 CPU 密集型任务)
  • 如果您有多线程应用程序,Pod CPU 核心数应与应用程序中的线程数相同(当然,应用程序工作负载应受 CPU 限制),以获得最大 CPU 使用率。
© www.soinside.com 2019 - 2024. All rights reserved.