本文探讨Docker多主机网络的性能。node
在过去的博文里,我测试过 Docker的网络 。 MySQL服务器团队 提供了他们本身的结果,和个人观察是一致的。mysql
本文里一系列的测试,想更多关注使用多主机的Docker网络。由于当咱们搭建高可用(HA)环境(好比,使用Percona XtraDB Cluster)时,就会指望实例运行在不一样的主机上。linux
本文测试的另外一个缘由是Docker最近发布了1.12版本,支持Swarm Mode。Swarm Mode自己颇有意思——在这个版本里,Docker决定在编排部署领域更深刻,从而和Kubernetes以及Apache Mesos竞争。我认为Swarm Mode还很粗糙(毕竟是第一个版本),可是我确信Docker会在接下来的几个版本里继续优化这个特性。git
Swarm Mode还假定用户在不一样的物理主机上运行服务,而且服务经过Docker的网络通讯。我想了解在多主机上使用Docker网络时性能如何。github
网络性能对于像Percona XtraDB Cluster 和MySQL Group Replication(刚刚发布了另外一个 Lab版本 )这样的集群来讲尤其重要。sql
在个人环境里,使用了两台物理服务器,之间经过10GB网络链接。这两台服务器各有56个核的Intel CPU。docker
Sysbench环境:数据在内存里,仅仅使用主键查找。网络测试中网络往返很严重,可是可以更清楚得看到对性能的影响。服务器
以下是Docker网络的可选方案:网络
- 没有Docker容器(在下面的结果里标记成“direct”)sqlserver
- Docker容器使用“host”网络(标记为“host”)
- Docker容器使用“bridge”网络,这里服务端口经过端口转发来暴露(标记为“bridge”)
- Docker容器使用“overlay”网络,客户端和服务器都在经过overlay网络链接的容器里启动(结果里标记为“overlay”)。对于“overlay”网络,可使用第三方插件,使用不一样的网络实现,最知名的是:
- Calico network https://github.com/projectcalico/calico-containers
- Weave network https://github.com/weaveworks/weave
对于多主机网络搭建,只有“overlay”(以及插件实现)可用。我使用“direct”,“host”和“bridge”做为参考以及比对,来衡量overlay实现的额外消耗。
我观察到的结果以下:
若是你须要使用Docker“overlay”网络——若是想要部署多主机环境,或者使用Docker Swarm Mode,这是必须的——我推荐考虑使用Calico的Docker网络插件。原生的Docker“overlay”网络能够用来作原型设计或者快速测试,可是目前其在高端硬件上的性能有问题。