运维教程-测试Docker多主机网络性能

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

在过去的博文里,我测试过Docker的网络。MySQL服务器团队(http://mysqlserverteam.com/mysql-with-docker-performance-characteristics/)提供了他们自己的结果,和我的观察是一致的。

本文里一系列的测试,想更多关注使用多主机的Docker网络。因为当我们搭建高可用(HA)环境(比如,使用Percona XtraDB Cluster)时,就会期望实例运行在不同的主机上。

本文测试的另一个原因是Docker最近发布了1.12版本,支持Swarm Mode。Swarm Mode本身很有意思——在这个版本里,Docker决定在编排部署领域更深入,从而和Kubernetes以及Apache Mesos竞争。我认为Swarm Mode还很粗糙(毕竟是第一个版本),但是我确信Docker会在接下来的几个版本里继续优化这个特性。

Swarm Mode还假定用户在不同的物理主机上运行服务,并且服务通过Docker的网络通信。我想了解在多主机上使用Docker网络时性能如何。

网络性能对于像Percona XtraDB Cluster 和MySQL Group Replication(刚刚发布了另一个Lab版本)这样的集群来说尤为重要。

在我的环境里,使用了两台物理服务器,之间通过10GB网络连接。这两台服务器各有56个核的Intel CPU。

Sysbench环境:数据在内存里,仅仅使用主键查找。网络测试中网络往返很严重,但是能够更清楚得看到对性能的影响。

如下是Docker网络的可选方案:

  • 没有Docker容器(在下面的结果里标记成“direct”)
  • Docker容器使用“host”网络(标记为“host”)
  • Docker容器使用“bridge”网络,这里服务端口通过端口转发来暴露(标记为“bridge”)
  • Docker容器使用“overlay”网络,客户端和服务器都在通过overlay网络连接的容器里启动(结果里标记为“overlay”)。对于“overlay”网络,可以使用第三方插件,使用不同的网络实现,最知名的是:1. Calico network
    https://github.com/projectcalico/calico-containers

    2. Weave network
    https://github.com/weaveworks/weave

对于多主机网络搭建,只有“overlay”(以及插件实现)可用。我使用“direct”,“host”和“bridge”作为参考以及比对,来衡量overlay实现的额外消耗。

我观察到的结果如下:

观察

测试Docker多主机网络性能

  • “Bridge”网络会增加额外消耗,大概12%,这和我之前的benchmark是一致的。但是我想知道这是Docker的额外消耗,还是Linux bridge网络实现的额外消耗。Docker应该使用的是我在《在相同主机上使用Linux Network命名空间运行Percona XtraDB Cluster节点》(https://www.percona.com/blog/2016/06/20/running-percona-xtradb-cluster-nodes-with-linux-network-namespaces-on-the-same-host/)一文里讲述的搭建方式,我怀疑Linux网络命名空间和bridge也会带来额外消耗。需要更多的测试来验证这一点。
  • 原生的“Overlay”Docker网络受性能问题困扰。我用ksoftirq在一个CPU内核使用100%时观察到了问题,并且看到了类似的报告。似乎Docker“overlay”里的网络中断并没有适当分布到多个CPU里。“direct”和“bridge”配置里没有这样的问题。我认为这是Docker“overlay”网络的问题(期望这个问题最终能够解决)。
  • Weave网络结果非常糟糕。我看到了很多CPU分配给“weave”容器,因此我认为其实现有很严重的扩展性问题。
  • Calico插件在多主机容器场景下性能最佳,甚至比“bridge-bridge”网络更好。

结论

如果你需要使用Docker“overlay”网络——如果想要部署多主机环境,或者使用Docker Swarm Mode,这是必须的——我推荐考虑使用Calico的Docker网络插件。原生的Docker“overlay”网络可以用来做原型设计或者快速测试,但是目前其在高端硬件上的性能有问题。

崔婧雯 译

文章出处:Docker

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。运维教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/02/运维教程-测试docker多主机网络性能/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注