趨勢觀點

DevOps、微服務與容器協作技術發展

工研院資通所 楊玉奇、蔣是文、鄧鴻毅

自Cloud Native概念提出後,企業也隨之展開新一代雲端應用服務架構的探索,DevOps、微服務與容器協作技術成為不可或缺的重要角色。歷經數年推動,針對缺點不斷改善,這些新觀念與技術已為更多企業所採用與熟悉,為落實持續交付奠定良好基礎。

雲端服務轉型問題浮現

隨著雲端運算概念普及,許多企業相繼投入搭建雲端平台,開始從雲端化的角度思考服務部署的策略,並且展開將傳統應用搬移到雲端的規劃與執行。或許企業開始受到雲端化吸引的主要因素是成本的降低,但始料未及的卻是雲端化過程中,遭遇到搬移到雲端上的服務,不但運作效率變得遲緩,而且功能故障時,要花上比以往多數倍以上的時間,才能找到問題所在。前述的種種狀況,突顯出服務雲端化成敗的關鍵,就是應用程式與服務是否遵循雲端環境條件設計與開發。
另一方面,服務提供者為了滿足使用者或者用戶多變的需求,必須快速回應並調整修改,而且可能必須在不中斷營運的情況下修改。傳統的雲端應用仍然有缺乏彈性、升級緩慢、架構龐雜的缺點,而且通常必須僵固的按照開發流程進行設計,無論是效率或成本都無法配合快速部署和發布的要求。
隨著客戶因應市場變革速度加快,需要更複雜且更龐大的應用。在敏捷開發管理下,開發人員得以快速發布服務,但卻常出現問題,維運人員必須不定時的救火。這種情況下,開發人員常指責維運人員未備妥IT基礎設施,導致新程式運作失敗;維運人員則認為開發人員只知貪快發布服務,但程式品質漏洞百出。開發與維運部門之間的隔閡極深,而且運作過程中常有衝突。
為了實現雲端應用服務運行時應有的敏捷性、彈性與復原性,可貫穿軟體開發生命週期的Cloud Native概念,指出必須將應用程式發展與運作的各環節自動化,方能有效的持續發布。DevOps、微服務(Micro Services)與容器技術即是實現Cloud Native的文化、架構與工具。

導入DevOps重塑開發文化

DevOps最主要的目標就是加快上線速度但也兼顧品質,從其字面意義Development + Operations,即可約略感覺到此概念有促進開發與維運人員整合的意味。DevOps目前仍未有標準定義,最常見的說法為「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例,提供支援ALM(Application Lifecycle Management)全流程的管理工具。
零散的程式開發工作不斷複雜化,成為專案或進而成為產品或形成服務時,開發團隊也必須陸續加入品質確保、版本交付和維運的流程。隨著程式代碼從敏捷開發到持續整合、持續交付進而成為雲端化服務的同時,DevOps也重整了企業以往的破碎流程與工具集。一旦Dev與Ops完美整合貫穿ALM全流程時,應用服務的發布週期不但大幅縮短,也將應用生命週期推升到最高價值的階段,如下圖所示。

圖 1 應用服務開發生命週期價值活動圖 1 應用服務開發生命週期價值活動

容器化微服務提升開發效率

掌握了DevOps概念對於落實Cloud Native的策略性地位後,另一個值得探討的議題,即是微服務架構對雲端應用服務開發實務面的戰術性影響。傳統應用系統架構中,每部署一套實體主機的應用系統即需要一套對應的作業系統,繼虛擬化技術出現後可在一台實體主機中安裝多台虛擬機器,而且執行不同的應用,實現了一對多的架構,使資源利用率提高並且使應用服務的擴充彈性加大。然而,因應輕量級容器技術如Docker的普及,許多現代化的雲端應用服務開發者,都採用微服務架構進行開發,使得已習慣於以虛擬化整併工作量的多數企業,面臨新型態架構模式部署帶來的改變與挑戰。
微服務架構與DevOps一樣,目前還沒有標準或完整的定義,但顧名思義應是一種分散式的應用架構,而且是由多個小型的服務組成一完整應用系統的概念。如何將一個整體應用切分為多個可獨立部署的服務流程,還要能透過開放程式語言和資料持久化等措施,達到交付速度最大化,是微服務架構規劃時的最大挑戰。許多人質疑微服務是否只是服務導向架構(SOA)雲端化後的名詞,但從其強調智慧端點與管道扁平化的精簡特性,就與SOA架構較複雜的主要技術如Web Service、BPM(Business Process Management System)或ESB(Enterprise Service Bus)明顯不同。

工具市場蓬勃發展

DevOps工具是落實概念不可或缺的關鍵要素,而近年來相關系統工具廠商遍地開花,短時間內應用服務開發流程所需工具產品即相當齊備。初期通常將DevOps工具依開發流程階段概分為建構、部署、維運等三類,隨著對DevOps概念瞭解日深,進而出現了包括建構、持續整合、配置管理、日誌紀錄、監控等更細部的次分類,以及適用於開發與維運部門間協同運作(Collaborate)和測試環節的工具族群。然而,工具雖多,如何選擇與搭配使自動化程序無縫銜接且完整配套的最適解決方案,才是自動化的關鍵成功因素。
另一方面,容器技術的普及快速也不容輕忽,根據Docker的CEO即Ben Golub指出,目前全球採用容器技術的企業已超過70%。自動化資料處理大廠ADP與科技大廠GE相繼部署Docker的消息發布後,更大力的推動了輕量型容器工具普及的趨勢。根據VMfive的調查結果亦可顯示,2017年Docker的使用率已超過Chef與Puppet,後二者皆是2013年即開始流行的容器技術,但過於笨重、導入不易且使用困難的問題也常為人詬病。因此,過去一年間,Docker、Kubernetes和Amazon推出了可託管Amazon EC2實例的Docker高性能容器管理服務,則一舉改善了Puppet和Chef的缺點,企業使用率因而大幅提升。

市場需求快速浮現

DevOps概念提出時間不到10年,但技術層面已針對缺點不斷改善,企業因為已為虛擬化進行了多年的優化,經驗可延伸至容器技術,導入與採用自動化工具的意願也持續提高。初期的DevOps工具如SALTSTACK,雖然已將部份DevOps概念具象化為功能與介面,但運作過程消耗大量資源且需要撰寫程式才能達到自動化功能,而且需要安裝在客戶端,增加了部署的困難。繼Docker推出後,高度的可用性與易用性吸引了大量開發者的支持,輕量化的優勢充份發揮在部署與資源利用的效率提升上,但還無法作到跨機器容器的溝通與管理,而這項需求對於在PaaS(Platform as a Service)環境下自行建置與維護私有雲的企業而言相對迫切。因此,可整合Docker格式與容器資源調度服務將會是下一代自動化工具技術的發展方向,除了跨平台管理的效益外,也可加強與持續整合和自動部署功能之間的連結。
隨著Cloud Native概念的迅速擴散,企業認同其訴求的價值進而紛紛嘗試導入,以回應客戶快速的變化。根據國際調研機構發布研究結果指出,目前約80%企業的應用軟體開發工作已導入DevOps,其中31%用於事業群層級,29%應用於小組專案層級,21%應用於企業整體範圍內。引發企業對導入DevOps感到高度興趣的主要動機有三,分別為速度、價值與成本。近9成企業表示必須加快跟上客戶的布局,可主動提供應產品或服務的價值貢獻,以及可大幅提高效率與降低成本。

圖2 企業採用DevOps現況與考量因素圖2 企業採用DevOps現況與考量因素

Kubernetes容器協作領航潮流

乘著容器技術快速發展的風潮,容器協作平台Kubernetes自從Google將其開源後,一直受到社群關注,也紛紛吸引許多大廠如VMWare、Microsoft、Amazon等投入由Google主導的CNCF (Cloud Native Computing Foundation)組織。Kubernetes的出現大大強化容器應用程式的管理,縮短並簡化開發與維運的工作時程,加上極佳的效能表現,非常適合應用在微服務架構中。Kubernetes所提供的服務發現(Service Discovery)與負載平衡、服務監控、滾動升級(Rolling upgrade)與降級、自我修復(Self-healing)、自動水平擴展(Horizontal scaling)等功能,讓開發人員有更多時間可以專注在應用服務的開發,不用再煩惱這些功能如何實現,同時也滿足日常維運之所需。除此之外,Kubernetes亦可連結開發測試與維運的平台,無需任何修改,就可由開發測試平台無縫地轉移至維運平台,且可橫跨不同的雲端供應商(GCP、AWS、Azure),達到持續交付(Continuous Delivery)的目的 [1]。

圖3 DevOps技術發展方向圖3 DevOps技術發展方向

台灣軟體產業可分為資訊服務與軟體兩大類,資訊服務為提供基礎架構、開發佈署、商業流程、顧問諮詢、軟體支援與硬體維運等服務,而軟體則是提供企業解決方案(如:應用軟體、資料庫、開發工具、資訊安全等)、大眾套裝軟體(如:生產力軟體、遊戲與影音軟體等)、嵌入式系統等產品。綜觀台灣整體軟體產業現況,台灣本土業者雖比不上外商強勢,但因具有通路優勢,主要有兩種經營型態:(1)以代理國產或外商之資訊服務與軟體產品來營利;(2)依用戶各自的需求提供軟硬體之整合解決方案與後續維運服務,以達到效能最佳化、功能客製化之附加價值。以第二種型態來說,DevOps的發展將有助於提升軟體廠商的開發效率與品質,更快解決客戶的痛點,進而強化市場競爭力。為了推動台灣軟體產業轉型升級,工研院資通所在執行法人科專時,一改過去傳統的瀑布式開發法,採用敏捷開發(Scrum)與DevOps,使軟體研發專案能如期如質的達到專案目標,並持續將DevOps技術能量擴散至產業界。針對軟體測試部分,工研院資通所也研發出了一套測試即服務(Test as a Service;TaaS)的雲端服務,讓為數眾多的中小型軟體專案無需逐一建置專屬的測試流程與環境,只需將測試程式上傳至雲端後,以網頁介面設定好測試腳本與測試環境,即可自動化產生測試報告。除此之外,「參與開源社群,運用開源資源」是近年來全球軟體發展之重要趨勢,投入開源軟體專案已成為全球軟體大廠(如:Google、Facebook、Microsoft、Red Hat)的主要商業策略之一。藉由參與開源軟體專案,軟體公司可以更有效地取得開發人員的支援,以更快速的方式獲得測試客戶,並在開源軟體社群所建立的聲譽/權威也能轉變為實際的商業利益。因此,工研院資通所也積極投入Kubernetes Taiwan User Group社群,於106.4.13與106.9.21舉辦了2場開源社群研討會「虛擬化2.0 “Kubernetes”容器Container再進化」、「Kubernetes 開源容器 技術論壇」,擴展國內Kubernetes使用者社群(User Group),參與技術人員超過550位,以持續提升國內軟體生態之技術水平。

Cloud Native概念指出必須將應用程式發展與運作的各環節自動化,方能有效的持續發布。DevOps、微服務與容器技術即是實現Cloud Native持續整合與持續交付目標的關鍵因素。經過數年發展,目前DevOps各流程階段,已有許多自動化工具支持。截至目前已有80%企業導入DevOps,微服務架構也正逐漸成為雲端應用開發的新主流架構,容器技術也持續針對缺點改善朝向輕量化發展。將機器學習應用於DevOps實務運作,進而降低人力耗損,以及將DevOps概念應用於資安漏洞補強,是DevOps後續發展的可能機會。此外,隨著Kubernetes平台的成熟,降低了DevOps與微服務實現的門檻,正是開始轉型的好時機,加上人工智慧的發展,相信未來必然會產生新的產業潮流。

參考文獻

[1] T. C. Chen, "Adopting containers and kubernetes in production," 2017. [Online]. Available: https://www.slideshare.net/TaChingChen/adopting-containers-and-kubernetes-in-production.