參數架構設定考驗功力 Docker效能調校有眉角

Docker容器技術素以輕量級且容易部署等特色著稱,也因此得到眾多開發管理人員的青睞,但是若未經過仔細的效能調校,實際運作時效能可能會不如預期,對此本文將透過多項測試來加以驗證,實際導入Docker容器技術後,還必須進一步地調整校正,才能發揮這項技術的真正優勢。

值得注意的是,在Weathervane的OS Performance效能選項中採用「Latency-Performance Profile」選項,是根據Weathervane的最佳建議作法,並在裸機Docker運作環境中運作13個Docker容器,且使用32 vCPU、150GB vRAM的硬體資源,如表2所示。

表2 裸機測試時Docker容器的效能測試角色和硬體資源配置

由於每個Docker容器使用的硬體資源不同,因此在執行「docker run」指令運作Docker容器時,將會搭配「--cpus及--memory」參數選項,定義每個Docker容器所能使用的硬體資源。

效能測試(Docker容器未最佳化)

在目前「容器」的應用情境中共有三種主流應用情境,分別是直接將x86硬體伺服器套用「裸機」(Bare-Metal)部署方式,也就是將實體伺服器安裝容器平台之後,直接在其上運作數量眾多的容器,以便提供應用程式和服務。

第二種及第三種主流應用情境,則是企業或組織已經建構好整個虛擬化基礎架構,所以透過以VM虛擬主機隔離的方式提供應用程式和服務,或是索性在VM虛擬主機中提供容器平台後運作多個容器,以提供營運需要的應用程式和服務,如圖9所示。


▲ 圖9 裸機、VM虛擬主機及容器部署模式示意圖。(圖片來源:GitHub - mikegcoleman/docker101: Resources to present an introduction to Docker presentation or workshop)

或許,有人在許多網路文章中會看到「容器」所訴求的輕量級,而認為將應用程式或服務運作在VM虛擬主機可能會顯得效能不彰。因此,本文將採用開放原始碼效能測試工具Weathervane,針對剛才上述三種主流部署應用程式或服務的情境進行效能測試,以便協助大家了解應用程式和服務在不同應用情境中的效能表現,如圖10所示:


▲ 圖10 效能測試 – Docker容器未最佳化。(圖片來源:VMware White Paper - Performance of Enterprise Web Applications in Docker Containers on VMware vSphere 6.5)

‧ VM虛擬主機:採用vSphere 6.5虛擬化平台中的VM虛擬主機,直接運作Weathervane開放原始碼效能測試工具,並未在VM虛擬主機中運作Docker容器。在測試結果中,直接以VM虛擬主機運作Weathervane效能測試工作負載為最佳表現,最多同時支援40,062個使用者,相當於每秒回應25,000個HTTP服務請求。

‧ VM虛擬主機 + Docker容器:採用vSphere 6.5虛擬化平台中的VM虛擬主機,並且在VM虛擬主機中運作Docker容器環境,然後運作Weathervane效能測試工具。採用VM虛擬主機搭配Docker容器環境後,效能測試工作負載最多同時支援35,969個使用者,效能表現大約是直接採用VM虛擬主機的90%。

‧ 裸機運作Docker容器:在裸機運作環境中提供Docker容器環境後,運作Weathervane開放原始碼效能測試工具,效能測試工作負載最多同時支援30,657個使用者,大約是直接採用VM虛擬主機77%的效能表現。

Docker容器最佳化 – VM虛擬主機

上述的效能測試結果,可能讓許多管理人員感到困惑,因為對於Docker容器技術的印象一直是輕量級並且能夠充分使用硬體資源,但測試結果卻是由VM虛擬主機直接運作工作負載時,反而運作效能最佳。

事實上,影響Docker容器運作效能的因素很多,例如執行「docker run」及「docker create」建立容器時,應該如何配置Docker容器能夠使用的CPU及記憶體硬體資源。此外,Docker容器採用的虛擬網路驅動程式類型,以及Docker Engine使用的儲存驅動程式類型,也都會影響Docker容器整體的效能表現。

在本文效能測試環境中,由於統一採用儲存設備提供儲存資源,所以在Docker容器內採用的儲存驅動程式類型,並未影響到效能測試的結果。然而,在「網路」類型方面則是影響效能表現的原因之一,在預設情況下,Docker容器會採用「Bridge」虛擬網路類型,好處是在「同一台」Docker主機中的容器彼此溝通非常快速,同時外部的存取需求也能透過TCP/UDP對應的方式存取容器服務。

但是,在本文效能測試環境中,由於每台VM虛擬主機僅會運作1個容器,因此容器與容器之間的通訊必須「跨Docker主機」,最直接的影響是除了「網路延遲時間拉長」外,也會增加Docker主機的「CPU工作負載」,所以便影響了Docker容器整體的效能表現。

最簡單的效能改善方式,便是讓Docker容器採用不同類型的虛擬網路驅動程式類型,將原本預設採用的Bridge虛擬網路類型,變更為直接使用Docker主機網路堆疊的「Host」虛擬網路類型。雖然會有容器使用連接埠對應的限制,但是在本文測試環境中1台VM虛擬主機只運作1個容器,因此並不會受到此限制所影響。



追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!