我正在使用docker-swarm运行服务器。但是后来,这些天我问起了docker服务性能。我什至不认为拥有2个以上的实例并扩展副本并不能帮助docker-server提升性能。
例如, 在一个实例中有一个单独的容器 与 带有10个副本的docker服务。
以我的经验,带有单个容器的docker容器表现出更好的性能(这是从mysql获取数据并将其发送回前端。等等)。
我是否对Docker容器/服务性能有误解?
答案 0 :(得分:0)
您的问题中有三个问题。
第一个答案是“无”,另外两个答案是“取决于” :)够狡猾的,让我们看看您的要求是什么...
问题1:单个容器与具有1个副本的服务对性能的影响是什么?
A1:0.000n%。您的单副本服务将仅启动……一个副本。答案为0.000n%的原因是因为Swarm在Docker引擎中只需要一点内存和cpu,这可能会影响您的整体性能
第二季度:群体网络对性能的影响如何?
A2:现在,您正在比较由Swarm Overlay网络系统引起的通信的网络性能。在大多数情况下,性能命中率将接近0。Swarm使用的默认覆盖图是VXLAN。由于每个数据包都需要封装/解封装,因此对性能的影响很小。如果您有很多副本和很短的连接(请考虑:无状态api会收到很多请求),则入口负载平衡器可能会涉及一些开销。因此,“取决于”
第3季度:该应用程序的单个副本消耗大量的cpu和ram,而该应用程序的多个副本则消耗少量的ram和cpu。
A3:这要看情况,但这不是Docker(大量)问题。一些应用程序(无状态,不依赖于“单次访问”外部服务,受到大量请求的困扰,在并行运行时(水平扩展)将表现出色。一些应用程序的运行情况较差,需要垂直扩展(很少有实例,很多mem和cpu)。请记住,垂直缩放很难超过某个点...
希望这对您有帮助...
答案 1 :(得分:0)
您在这里遗漏了重点。
服务复制不是在解决性能问题,而是在解决高可用性问题。
如果一个复制失败,则该请求将仅回退到其他可用复制。这是使用协调器的原因之一。
当然,使用协调器会减慢一点的访问量,但是这里所说的性能不会降低50%!
事实上,即使在现实生活中,所有事物都一样。去本地商店买东西总是比在线购物和等待交货快。但是,您不确定本地商店是否有想要购买的东西。相反,如果您在一家受欢迎的网上商店购物,那么几乎可以肯定,您会在第一次尝试时就能得到想要的东西。您只需要再等一会。
答案 2 :(得分:0)
也许这与SWARM Very poor performance for ingress network with lots of parallel requests
有关 <块引用>swarm 模式入口由 IPVS 处理,连接通过覆盖入口网络分派到后端任务。但由于它是单节点设置,因此不会由于覆盖网络中使用的 VXLAN 标头而导致性能下降。唯一可能的原因可能是 IPVS,它可能需要针对您的情况进行性能调整。
对于那些认为是网络问题的人来说,也许在端口下使用 mode:host
可以帮助绕过 ipvs 限制(但是你需要一个外部负载均衡器来支持你的群)
ports:
- target: 80
published: 80
protocol: tcp
mode: host