天天看點

測試Docker多主機網絡性能

本文講的是<b>測試Docker多主機網絡性能</b>【編者的話】本文探讨Docker多主機網絡的性能。

本文裡一系列的測試,想更多關注使用多主機的Docker網絡。因為當我們搭建高可用(HA)環境(比如,使用Percona XtraDB Cluster)時,就會期望執行個體運作在不同的主機上。

本文測試的另一個原因是Docker最近釋出了1.12版本,支援Swarm Mode。Swarm Mode本身很有意思——在這個版本裡,Docker決定在編排部署領域更深入,進而和Kubernetes以及Apache Mesos競争。我認為Swarm Mode還很粗糙(畢竟是第一個版本),但是我确信Docker會在接下來的幾個版本裡繼續優化這個特性。

Swarm Mode還假定使用者在不同的實體主機上運作服務,并且服務通過Docker的網絡通信。我想了解在多主機上使用Docker網絡時性能如何。

在我的環境裡,使用了兩台實體伺服器,之間通過10GB網絡連接配接。這兩台伺服器各有56個核的Intel CPU。

Sysbench環境:資料在記憶體裡,僅僅使用主鍵查找。網絡測試中網絡往返很嚴重,但是能夠更清楚得看到對性能的影響。

如下是Docker網絡的可選方案:

沒有Docker容器(在下面的結果裡标記成“direct”)

Docker容器使用“host”網絡(标記為“host”)

Docker容器使用“bridge”網絡,這裡服務端口通過端口轉發來暴露(标記為“bridge”)

Docker容器使用“overlay”網絡,用戶端和伺服器都在通過overlay網絡連接配接的容器裡啟動(結果裡标記為“overlay”)。對于“overlay”網絡,可以使用第三方插件,使用不同的網絡實作,最知名的是:

對于多主機網絡搭建,隻有“overlay”(以及插件實作)可用。我使用“direct”,“host”和“bridge”作為參考以及比對,來衡量overlay實作的額外消耗。

我觀察到的結果如下:

<a href="http://dockerone.com/uploads/article/20160818/b74dd2aa9bfd4aac899be7f9caf28849.jpg" target="_blank"></a>

原生的“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”網絡可以用來做原型設計或者快速測試,但是目前其在高端硬體上的性能有問題。

===========================

譯者介紹

崔婧雯,現就職于IBM,進階軟體工程師,負責IBM WebSphere業務流程管理軟體的系統測試工作。曾就職于VMware從事桌面虛拟化産品的品質保證工作。對虛拟化,中間件技術,業務流程管理有濃厚的興趣。

原文釋出時間為:2016-08-18

本文作者:崔婧雯

本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。

原文标題:測試Docker多主機網絡性能