cpu 如何在 docker 中处理 haproxy 配置?

How is cpu config for haproxy handled within docker?

我想知道容器内的 haproxy 性能。为了让事情变得简单,如果我有一个 vm 运行 haproxy 和这个 cpu 配置,我知道会发生什么:

  nbproc 1
  nbthread 8
  cpu-map auto:1/1-8 0-7

如果我想将(整个)配置移植到 docker 用于测试目的,而不需要任何花哨的群体魔法或设置 docker 这样我就可以理解事情是如何映射的,我想cpu 配置变得更简单,并且 haproxy 实例旨在扩展。我想我有两个问题:

您是否愿意从 haproxy docker 容器中配置 cpu,或者您是否会从服务后面扩展容器?也许你两者都需要。

单个容器是否可以像 运行 在系统上作为守护进程一样使用上述配置? docker / containerd 会关心这个配置吗?

我知道有 4 个容器,每个容器都有自己的配置,cpu 像这样均匀映射不会扩展或没有任何意义:

  nbproc 1
  nbthread 2
  cpu-map auto:1/1-2 0-1
  nbproc 1
  nbthread 2
  cpu-map auto:1/3-4 2-3
  nbproc 1
  nbthread 2
  cpu-map auto:1/5-6 4-5
  nbproc 1
  nbthread 2
  cpu-map auto:1/7-8 6-7

但我想知道的正是这种饱和度。 haproxy / docker 如何处理这种 cpu 细微差别?

我已经确认,当 运行 haproxy 在 containerd 下与 运行 在 systemd 下使用 haproxy 提供的图像时,服务几乎没有明显影响。 运行 带有 --network host 的单个容器 -d 并且在 cpu 或内存上没有限制最坏的情况下,我看到实时流量达到峰值时对 Web 外部延迟有 2-3% 的影响大约 50-60MB/秒,这本身取决于吞吐量和请求类型。在具有 4GB 内存(主机 cpu 是 xeon 6130 Gold)和 gig 接口的 8 核虚拟机上,内存利用率几乎相同。 cpu 性能也保持稳定,利用率可能增加 3-5%。这些测试是私有且未发布的。

就 cpu 配置而言

nbproc 1
  nbthread 8
  cpu-map auto:1/1-8 0-7
  master-worker

此配置在 containerd 和 systemd 之间映射 1:1,并产生已经提到的结果。 proc 和线程将在 containerd 下启动并按预期运行。这占总数 cpu (800%) 的大约 80-90%,这表示在峰值时少于 1 个满载核心。所以这个容器理论上可以用这个配置再缩放 8 倍,5 或 6 倍以留出一些空间。

另请注意,这些性能数据的任何波动都可能是由于我的环境造成的。这些测试来自多个站点的真实环境,而不是我控制各个方面的测试平台。另请注意,根据您的主机 cpu 和加载,您的结果会有很大差异。