作者/數位發展部部長室 柯維然

「雲端」已經不只存在於雲端,我們的日常生活中也有許多常常使用「雲端」的場景。主流的三大公有雲平台(Microsoft Azure、Amazon Web Services、Google Cloud Platform)發展十多年至今,「雲端運算」也從熱門討論走向習以為常,改變了軟體與服務設計的架構思維:開發者無需自行準備各種伺服器、網路設備與機房空間,只需利用雲端平台所提供的各種運算、儲存及頻寬服務,就可以更快速地推出新的數位服務。今天能有如此生機蓬勃的數位世界,雲端是最重要的數位基礎建設之一。

雲端平台就像是一個有無窮無盡資源的世界,但打造一個新服務,就如同在這個新世界中蓋一座城堡,如何蓋出設施完善、又能承受敵人攻擊,甚至可以快速方便更換城門的城堡,並不是容易的事。

因此「雲原生(cloud native)」概念應運而生,其旨在充分利用雲端技術,讓開發者可以在雲端平台上順暢的設計和開發高效率且可以擴展的服務。具體來說,雲原生引入了一些新的流程與技術,例如 DevOps 與容器,讓開發者能夠好的建構程式與運行服務。

數位發展部(後簡稱「數位部」)期許自身相關的數位服務都能使用雲原生架構,不論是已經熟悉雲端的資訊人員,還是從未聽過雲端技術的同仁,都可以體驗到雲端技術帶來的優勢與好處。因此從成立之初,資訊單位便以「In the cloud」為目標,嘗試將服務以雲原生方式實作,並分享經驗給其他公務機關一起參考學習;同時,也透過導入各種辦公雲端服務,取代原有公務溝通流程並重塑成即時協作方式,讓公務流程更有彈性與效率。

本文將會從雲原生技術的基本概念開始,說明數位部實作雲服務的方法;此外,也具體描述數位部同仁公務流程中如何操作雲原生服務。


淺談雲原生

在談「雲原生」和它如何實踐之前,我們要先了解在此領域中很重要的幾個概念:分別是容器化和 DevOps。

 容器化 

「容器化」是雲原生領域中的核心技術之一,可以視為一種輕量虛擬化技術。傳統的虛擬化技術是模擬整個硬體資源與作業系統,而容器則是以服務為核心,只將執行此服務所需的相關環境、套件打包起來。這個打包好的容器就像是一個標準大小的貨櫃,可以裝載到任何支援容器的平台上運行。因此,容器化相較於一般的虛擬化技術更輕量化且啟動速度更快,並且可以省去很多額外負擔。

將服務打包成容器部署至雲端平台上就能運行,但這時也出現了新的問題:該如何管理這些容器化服務呢?如何自動化部署與更新?當服務發生異常時該如何重新啟動、甚至依照目前需求來調整服務量?

這些需求讓容器調度與管理的工具應運而生,例如:Kubernetes(常簡稱為 k8s)就是由 Google 開源貢獻給社群的一個管理平台,目前也是主流的容器管理與調度平台,三大公有雲都有支援。將服務打包成容器後,就可以在雲端上使用 k8s 平台來管理,也可以在不同公有雲之間遷移。

 DevOps 

DevOps 一詞是由開發(Development)與維護(Operations)組成,意思是將服務的開發與維護階段整合更緊密。一般來說,軟體開發流程可以簡化為:由開發團隊根據需求負責撰寫程式開發新服務或是增加新功能,服務開發到一定階段後(例如新增了一個新功能按鈕),再交給維護團隊把服務部署到正式環境(例如雲端平台)。這樣一次的軟體開發週期,過程中需要開發和維護兩個團隊的互相配合才能完成。

導入 DevOps 流程和工具的好處在於,能夠以自動化和程式化的方式執行持續整合(Continuous Integration,簡稱 CI)和持續部署(Continuous Deployment,簡稱 CD)。所有該做的事情列成一項項的指令,這些指令可以規範新版本的程式碼應該先進行哪些檢測和掃描,然後才能打包成容器,以及最後應該上傳到哪個平台以及啟動哪些指令。因為完全是按照預先設計好的指令順序來執行程式,可以大幅減少很多當下輸入程式碼或是其他人為操作可能發生的錯誤,進而提升服務部署的效率與安全。

雲原生實踐

網站與功能的維護常常會碰到許多挑戰。例如,網站會因為瀏覽次數驟然增加或是遭受惡意攻擊,而導致服務中斷等。因此,建構一個具有韌性的官方網站,是公司到政府的各資訊單位的重要目標;而快速而有彈性的雲原生架構就是很適合的解決方案。

那要如何實踐雲原生呢?在這裡我們以官方網站建置作為案例來解釋。

我們可以將官網依據不同的功能拆解,把整個官網分成多個功能模組,像是:靜態化網站產生、管理介面、後端 API 等,然後個別打包成容器。

這樣做的好處是,我們可以獨立更新與維護這些拆解成多個功能模組的容器,也可以依照功能常用與否或是需求多開幾個子服務。此外,還能將單體服務拆解成多個子服務或是功能,這樣的做法在雲原生領域中被稱為「微服務」設計方式。

我們可以將網站想像成潛艇堡,它可以依據我們的喜好和需求去選擇麵包、不同種類的配料、要不要多加幾片生菜,而不用每次都必須接受同樣的潛艇堡。

圖片來源/數位部

在拆解成多個功能模組後就,可以進行開發,並導入 DevOps 來自動化與開發與部署流程。

開發者將程式碼推送到程式碼倉庫後,會由 DevOps 平台來執行設定好的流程:平台首先會掃描程式碼,確認沒有有中高風險漏洞,然後將程式碼編譯並生成容器映像檔,這樣就完成了整個官網服務所需的功能模組容器的打包。最後,將這些容器映像檔推送到雲端的容器管理平台上,逐一啟動每個功能模組的啟動指令,就成功完成一次官網服務的開發與部署流程。

辦公室上雲

雲端技術讓資訊單位可以更快速便利地打造各式服務,數位部也以此為基礎,積極進行部內流程的數位再造工作。

你可以想像,政府部門裡面非常多各式各樣的流程:以往遇到一個新流程,就要開發新的系統;然後 A 流程用 A 系統、B 流程用 B 系統,10 個流程就有 10 個專用系統。這使得資訊部門需要不斷因應新流程製作新系統、每個服務都以客製化方式處理,不但開發成本高且後續管理也相當麻煩。

其實,這些流程中很多步驟是一樣的,只是因為不同單位而互不知悉。數位部認為,如果我們能有一個平台整合這些步驟,就像積木一樣,大家可以自行選擇需要的積木,搭建自己所需的流程。以公務機關的預算的概算和控管為例,過程中有很多的規定和檢核,以及各單位的意見來往,同時還涉及主計與簽核會辦流程,是非常龐雜的過程。數位部便自己建構了一個表單服務系統,透過這個表單服務系統,不同單位可以自行拖拉需要的服務,去搭建自己想要的流程。

除了龐大的流程服務,日常的行政工作也可以善用雲端服務而精進效率。過去各種文件都散落在同仁的電腦裡,需要協作時就透過電子郵件來回寄送檔案,導致時常出現大家需要仔細確認哪份檔案是最新版,或是該如何回復到前一個版本等版本控制的問題。導入雲端辦公服務後,同仁不再需要以檔案來回編修,而是在線上文件內設定權限,給需要協作的同仁編輯同一份檔案即可。如此一來,相關業務的同仁不僅可以隨時在文件上註記討論,而且還能隨時回溯到先前的版本。

雲端的共享和協作即時性,讓同仁溝通與對齊討論更有效率,還可以互相整合不同的功能。例如:在管考施政計畫時,通常需要各單位提報說明目前的執行進度,再由業務單位彙整成完整計畫進度。現在透過承辦人線上共同編輯計畫管考試算表,不僅可以即時更新、省去檔案傳遞的困擾,還可以與其他服務介接,自動將各計畫進度以甘特圖、心智圖等視覺化方式呈現。

這看來是數位再造的一小步,卻是 moda 雲原生的一大步:從這些逐步取代原有紙本或是冗餘流程的作法開始,數位部希望所有同仁都能享受雲端服務帶來的優勢與好處,讓本部從基礎建設到多元應用,都能有即時彈性的雲端特質,成為公務部門的數位轉型先行者。

(本文轉載自moda blog)

熱門新聞

Advertisement