兩三年前筆者開始接觸被稱為下一代雲計算技術 Container,雖然知道Amazon及Google等已用上此技術多年,但當時在一般企業的應用仍在很初步和概念的階段。這兩年發展非常快,越來越多大型企業開始採用,在世界各大雲計算和架構的研討會無人不談,如 Docker, Container as a Service, Microservices 等等名詞。究竟Container有什麼吸引力,能幫助企業解決什麼問題?
首先要了解什麼是Container。 概念其實很簡單,大家每天使用的手機app就是最好的例子。所有 app 在 apps store下載後就能獨立運行,而且只會使用分配好給它的資源。其實同樣的概念都能應用在企業軟件上。以Container中最盛行的 Docker 為例,和傳統虛擬化方式(Virtual Machine)最大的不同是,Docker是在作業系統 (OS) 層面上作虛擬化, 而傳統VM方式則是在硬體層面。有研究指出,在同一硬件運行Docker比VM可多出4至5倍或更多的資源,能直接為公司省錢,看似很吸引。筆者認為,單是Container應用並不能帶來太多價值,若能配合軟件開發模式和架構,就能夠大大解決IT人員時常面對的挑戰:如何加快軟件開發(Time to market)和加強可擴充性(Scalability)等。
相信很多IT朋友都曾經被企業用戶質問:「公司網站很慢,為何加了servers 仍看不見成效?」、「只是更改版面的layout,為何要更改這麼多 code 和測試?」這些問題都令IT人十分苦惱。
傳統的軟件開發都是採用一體化架構 (monolithic architecture),筆者形容為「大象」架構,有任何改動都會牽一髮而動全身。既缺乏彈性,也大大減慢軟件推出的時間。在這個快速轉變的時代,絕對不能滿足企業需求。另外,在擴充性方面,一體化架構很難按企業需求去擴充和分配server資源,很多時候只能做到向上發展(scale up),而並不能做到真正的向橫發展(scale out)。
相反,現在提倡如「螞蟻」般細小的微服務 (micro-services)架構,正正是要解決「大象」的問題。微服務將大型系統拆解成細小的服務,令代碼變更(code change)與發怖週期(release)兩方面都更具優勢,程式員可更加專注編寫程式,與產品客戶有更密切的溝通和良好的關係;成功的Internet公司, 如Netflix、Twitter等都紛紛採用微服務。微服務的特性是細小,當應用在傳統的VM架構上,就可能出現資源錯配和管理的問題,細小的Container如Docker的出現正好能相互配合並發揮其特性。
總括而言,Container 絕對不是取締VM的技術,而它的好處也不只是善用資源這麼簡單,當配合整個軟件開發流程和架構,Container 會令企業架構帶到另一個境界,這才是它的真正實力。筆者建議企業IT應著手探討 Container技術,並先和開發團隊了解現在的問題,也可利用試產式(Pilot-Run)項目,和分開多階段推出,預早找出運作上的問題。如果你也使用了 Container,歡迎分享你的使用案例和心得。
作者:陳俊偉 Dave Chen
從事資料科技及大型系統架構設計十多年,近年積極在香港推廣企業架構 (Enterprise Architecture),現為香港電腦學會企業架構分部 (HKCS EASIG)主席及企業架構師協會香港區 (AEA-HK) 創會主席。