1. 程式人生 > >測試Docker多主機網路效能

測試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