本文探討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」網絡能夠用來作原型設計或者快速測試,可是目前其在高端硬件上的性能有問題。