iThome
今年6月,新創公司Gogolook架構師葉秉哲一直苦惱於一個問題。他從網路上下載了開源OpenVPN程式,想要裝到公司內很多人慣用的Ubuntu系統時,儘管編譯成功了,執行起來卻還是有問題,他遲遲找不出原因,網路上也缺乏相關的討論。
擔心是程式碼出錯,他改在其他作業系統中安裝,Debian同樣完成編譯卻執行起來有問題,反而是在CentOS環境中可以順利執行。他表示,我不想為了只是讓程式在多個OS中執行,花大量時間來精通每個OS。因為看到Docker可以將環境打包起來,映象檔又不會像虛擬機器的映象檔那樣龐大。因此,今年8月,他開始評估導入Docker的可行性,考慮是否能將後端系統打包到Docker的Container內執行。
Gogolook推出的WhoscallApp吸引了全球超過1千萬人下載,後端系統超過20臺伺服器。App串連到的後端系統,包括了後端主要處理程式的Python API伺服器群,使用Amazon SQS服務來提供的Queue服務、MongoDB伺服器群、用來提供子系統共用資料庫和快取的Redis資料庫、其他周邊系統還有如Elasticsearch搜尋引擎。葉秉哲想要動手改變後端系統的環境,可是非同小可的大事。
葉秉哲首先先評估Docker生態系的成熟度,他用1個月時間,來了解Docker陣營是否處理過Container議題、Log議題、效能議題、服務串連議題、可用性議題等。之後再決定要先從哪一個內部系統開始動手Docker化。
他選擇了3個軟體放入Docker的Container環境來測試效能,包括了Redis資料庫用來測試記憶體存取效能、ElasticSearch資料庫來測試測試記憶體效能和I/O效能的影響,另外還有壓力測試工具WRK來測試對網路封包的影響。
Docker官方說法是,程式在Container下的執行效能和原生程式相當。葉秉哲參考了IBM先前釋出的Docker和KVM的效能比較報告,根據這份報告結果,同樣一隻程式在Linux原生環境執行的效能和在Docker下執行的效能相當,但遠快於在KVM環境中執行。葉秉哲實測Redis的結果也和這個比較結果相當,甚至有時程式在Docker中執行還比原生環境快。
葉秉哲表示,因為在Docker中執行的程式也是一個正常的Process程序,所以,在運算上幾乎沒有影響,只有存取記憶體時、I/O、網路存取需多經過一層執行可能影響效能,不過對I/O效能的影響,則與Dockerfile的設定有關。
因為Dockerfle採用了Copy On Write的設計,當從一個Base Image來建立新的Image映象檔時,系統只會儲存新增加有差異的內容,不會將Base Image內容多儲存一份。等到Docker要用這個新的Image檔案來建立Container環境時,需要額外將Base Image資料和差異的內容即時整合後來建立新環境,這部分影響了I/O的效能。葉秉哲表示,只要關閉Copy On Write功能就可以大幅減少影響。
先由上而下了解生態系,再由下而上把握元件實務表現
葉秉哲表示,他先由上而下了解整個Docker生態系概況,再由下而上逐步把握住每一個雲端服務或App元件部建在Docker時的實務表現,最終是希望盡量全盤Docker化。
不過,架構轉換有兩種作法,一種是漸進式轉換,先將部分伺服器Docker化取代現有服務,再讓其他還未Docker化的服務,連結到這些Docker化的伺服器上,分批逐步Docker化所有伺服器。
另一種則是葉秉哲決定用的作法,那就是激進式架構轉換。一次就將所有後端系統全面Docker化,也就是一口氣將所有伺服器都放入Docker環境中執行,讓架構轉換一步到位。
漸進式架構轉換容易缺乏全局觀
他表示,漸進式作法的缺點是會容易缺乏全局觀。例如沒有一次看清整體架構,實際系統中還有許多議題如Logging、監控機制等,一次汰換一項服務,可能第一項服務的考慮不夠周全,等到汰換第二項服務時,才發現第一項服務還需要加上更多機制,得要重頭蒐集在第一項服務中的資訊。
或像是跨系統間的協同作業(orchestration)議題,若是逐一汰換服務,每次更新一個服務後,往往會先手動解決與這個服務相關的協同作業,而不會大費功夫採取自動化作法,例如就不會考慮導入Google的Kubernetes工具。這工具可用來管理伺服器叢集內的Docker,例如當一個節點當機時,自動在另一個節點啟用同樣的Docker Container來接手提供服務。
葉秉哲8月決定導入後,9月開始建立每個內部系統所需Image的Dockerfile,來建立一個模擬公司現有資訊架構的新架構。因為Gogolook資訊架構還在持續成長,例如最近剛導入了fluentd來蒐集Log。葉秉哲也同步建立了一個fluentd的Dockerfile。
他說,新架構開始追上實際架構,新服務也Docker化,就可以用實際環境來作為高標準的效能對照組,來比較放入Docker後對效能的影響。
葉秉哲目前也先將Redis和Elasticsearch導入門檻低的應用Docker化,最後才會處理複雜的資料庫伺服器和Ap伺服器。甚至,他考慮也要全面改用CoreOS,徹底地實現Docker化。
他預定明年可以完成這套Docker化的Gogolook資訊新架構。「Gogolook願意讓架構師有充足的評估時間,才能進行這樣激進式的全面性轉換。」他說。
Gogolook資訊架構全面Docker化計畫
相關報導請參考「Container技術三部曲(一)迎接下一個雲端火紅技術Docker」
相關報導請參考「Container技術三部曲(二)不只快,還要更快──臺灣Docker應用案例的啟發」
相關報導請參考「Container技術三部曲(三)Container三部曲(三)IT架構的新奈米革命:Container OS」
熱門新聞
2024-12-24
2024-12-22
2024-12-20
2024-08-14
2024-11-29