本文探讨Docker多主机网络的性能。

在过去的博文里,我测试过 Docker的网络 。 MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的。

本文里一系列的测试,想更多关注使用多主机的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”网络,可以使用第三方插件,使用不同的网络实现,最知名的是:

- Calico network https://github.com/projectcalico/calico-containers

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

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

我观察到的结果如下:

观察

  • “Bridge”网络会增加额外消耗,大概12%,这和我之前的benchmark是一致的。但是我想知道这是Docker的额外消耗,还是Linux bridge网络实现的额外消耗。Docker应该使用的是我在《 在相同主机上使用Linux Network命名空间运行Percona XtraDB Cluster节点 》一文里讲述的搭建方式,我怀疑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多主机网络方案的更多相关文章

  1. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  2. Docker跨主机网络——overlay

    前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...

  3. Docker系列04—跨主机网络方案(overlay/weave)

    在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...

  4. Docker 跨主机网络 overlay(十六)

    目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...

  5. Docker多主机网络 OpenvSwitch

    一.Open vSwitch    Open vSwitch(以下简称为OVS),英文全称:OpenVirtual Switch,顾名思义,Open vSwitch就是开放虚拟交换.我们可以把他理解成 ...

  6. Docker 多主机网络总结(非常全)

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. Docker多主机网络

    网络术语概念 二层交换技术:工作在OSI七层网络模型的第二层,通过MAC地址进行帧转发 三层交换技术:也称为IP交换技术,工作在OSI七层网络模型的第三层,通过IP地址进行包转发.它解决了局域网中网段 ...

  8. docker 跨主机网络:overlay 简介

    简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...

  9. Docker 单主机网络

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 当容器逐步向容器集群,容器云技术演进的时候,一个不得不面对的问题就是各 ...

随机推荐

  1. Go语言Web框架gwk介绍 1

    Go语言Web框架gwk介绍 (一)   今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布 ...

  2. .Net项目框架

    摘要:本文描述了在用VS.NET进行B/S开发时采用的框架结构,一般建立类库项目和Web项目,在Web基本aspx页面类中调用类库中方法,同时在aspx页面类中不需要写任何对数据库操作的SQL代码,便 ...

  3. Arduino 各种模块篇 光敏感应模块 light sensor

    It looks like this one: This one isn't a digital light sensor, so it's very simple. http://www.seeed ...

  4. spring不依赖注入得到实体bean

    如题,我们一般用spring的ioc,通过配置注入接口得到这个实现类,现在通过研究公司平台框架发现还有一种方法得到spring文件配置的bean方法,举个例子(注:这个ApplicationConte ...

  5. TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)

    4.3   原生代码标记传播 Native 代码是不受TaintDroid监控的.理想情况下,我们获得了相同的传播语义当使用相同的解释副本时.因此,为了精确的在Java层进行污点监控,我们定义了两个必 ...

  6. 最近学习了下BI(商业智能)做报表

    最近公司购买了Style intelligence 出的BI报表工具,接触新的东西不是很容易上手,这个东西是别的项目组用的,我们项目组由于进度比较快就让我先到他们项目组帮他们,为了使用这个东西,他们已 ...

  7. the selected server is enabled,but is not configured properly.Deployment to it will not be permitted

    用Tomcat添加部署项目的时候报错: the selected server is enabled,but is not configured properly.Deployment to it w ...

  8. 简单的遮罩层效果,user登陆显示效果

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. js splice比较好用的方法

    http://www.w3school.com.cn/jsref/jsref_splice.asp从w3c看到这个方法,感觉不错,记录一下.

  10. 记JavaScript的入门学习(二)

    2016年11月25号,利用上午时间学习了JavaScript的数据类型和变量,下午就该去图书馆泡书了. 看完变量的本章节,发现我可能不能一天结束,那我就利用上午和晚上九点回来的时间完成吧.把心态调整 ...