Docker 服务性能与单个容器?

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

我正在使用 Docker Swarm 运行服务器。但是,这些天我对 Docker 服务性能产生了疑问。我什至不认为拥有超过 2 个实例并扩大副本对 docker 服务器性能没有帮助。

例如:

实例中有单独的容器
对比
码头服务 有 10 个副本

根据我的经验,具有单独容器的 Docker 容器表现出更好的性能(从 MySQL 获取数据并将数据发送回前端等)。

我对 Docker 容器/服务性能有误解吗?

docker docker-swarm
3个回答
0
投票

你没有抓住重点。

服务复制不是为了解决性能问题,而是为了解决高可用性问题。
如果一个复制失败,则该请求将仅回退到其他可用的复制。这就是使用协调器的(之一)原因。

当然,使用编排器会减慢一点流量,但这里不是说性能下降 50%!

事实上,一切都是一样的,即使在现实生活中也是如此。去当地商店买东西总是比在网上购物并等待送货要快。但是,您不确定当地商店是否有您想购买的商品。相反,如果您访问一家受欢迎的电子商店,那么您几乎可以肯定,您第一次尝试就会得到您想要的东西。你只需要再等一会儿。


0
投票

您的问题共有三个问题。

第一个问题的答案是“无”,另外两个问题的答案是“视情况而定”:) 说得够多了,让我们看看你的要求......

Q1:单个容器与具有 1 个副本的服务相比,性能影响如何?

A1:0.000n%。您的单副本服务只会启动......单个副本。答案是 0.000n% 的原因是 Swarm 需要 Docker 引擎中的少量内存和 CPU,这可能会影响您的整体性能

问题2:集群网络对性能的影响是什么?

A2:现在您正在比较 Swarm Overlay 网络系统引起的通信的网络性能。大多数时候,性能影响接近于 0。Swarm 使用的默认覆盖是 VXLAN。由于每个数据包都需要封装/解封装,因此对性能有微小的影响。如果您有大量副本和大量短期连接(想想:收到大量请求的无状态 api),入口负载均衡器可能会产生一些开销。所以“这取决于”

Q3:应用程序的单个副本,消耗大量 cpu 和 ram,而应用程序的多个副本,每个副本消耗一点点 ram 和 cpu。

A3:这要看情况,但这不是 Docker(群)问题。一些应用程序(无状态,不依赖“单一访问”外部服务,受到大量请求的打击,在并行运行(水平扩展)时会表现出色。有些应用程序会表现更差,需要垂直扩展(很少实例,大量mem 和 cpu)。请记住,垂直缩放超过某个点就会变得困难......

希望这有帮助...


0
投票

也许这与SWARM 对于具有大量并行请求的入口网络性能非常差

群模式入口由 IPVS 处理,连接通过覆盖入口网络分派到后端任务。但由于它是单节点设置,因此由于覆盖网络中使用的 VXLAN 标头而不会发生性能下降。唯一可能的原因可能是 IPVS,它可能需要针对您的情况进行性能调整。

对于那些认为这是网络问题的人,也许在端口下使用

mode:host
可以帮助绕过 ipvs 限制(但是你需要为你的集群配备一个外部负载均衡器)

ports:
   - target: 80
     published: 80
     protocol: tcp
     mode: host
© www.soinside.com 2019 - 2024. All rights reserved.