微服務與混合雲 (一): 淺談從互聯網進化到微服務的過程

Patrick Fu
Gemini Open Cloud 雙子星雲端
8 min readJan 3, 2021

第一章: 淺談從互聯網進化到微服務的過程

互聯網 (Internet) 緣自 1969 年 美國國防部的 ARPANet 計劃,但真正達成全球普及,是靠 1980 年代 CERN Tim Berners-Lee 建立 的 World Wide Web 概念, 利用 Hyperlink 把 不同電腦上的文件串連起來。1990 年代,互聯網 因社交通訊應用 (email, SMS, blogs, forums) 被廣泛使用。隨之而來是 2000 年代興起的電子商務,2010年代興起的智慧手機,使大家幾乎一天二十四小時都在線上。目前互聯網保守估計已經有超過四十億使用者,成為全球最大 的運算網路。

傳統互聯網應用架構

雖然互聯網在 90 年代已經被廣泛使用,那時候主要的運算模式還是集中在 伺服器端 (server side)。當時最流行的應用領域為社交通訊、Browser瀏覽器、forums論壇、blogs部落格等等。這些應用主要就是把客戶端 (client) 的電腦視為 display device。就算在 90年代中期,隨著 Javascript 跟 Adobe flash 被植入到 Browser 內,互聯網應用架構 (web application framework) 還是以 MVC framework(e.g. Ruby on Rails)跟微軟的 Active Server Pages (ASP) 為主。

由於當時是以伺服器端作為主運算架構,加上當時企業大型伺服器的普及,通常使得企業及應用開發商偏向採用以 IT 為中心的開發模式。企業 IT 通常會採購大型伺服器於數據中心(data center)給大家共用。當時的應用程式開發,通常都要經過一些複雜編譯+linkedit 流程,建立出一個龐大的封存檔 (e.g. WAR file),部署在這些伺服器上。當時的應用更新,通常都要停機好幾個小時以上。

除此之外,更棘手的是這種開發模式很曠日費時。開發跟測試人員都要花很多時間在應用程式整合上,也要依賴 IT 維運人員為開發人員部署環境。每次程式進版,都至少花上好幾個月、甚至以年為單位的開發測試時間,造成終端使用者極度不滿。

虛擬化技術,與公有雲的來臨

除了互聯網外,另一個主流的雲端科技就是「虛擬化技術」。在90年代末期,VMware 的 vSphere 與開源的 KVM 技術開始被普遍接受。主機虛擬化技術不僅僅是增加伺服器的使用效率,同樣重要的是它提供了影像服務 (Image),能在幾分鐘之內,就啟動一個預先封存好的伺服器影像而運行起來,省掉很多軟體安裝的時間。

虛擬機影像的封存技術,也間接使 LAMP 成為互聯網應用的主流軟體框架。LAMP 是 Linux, Apache, MySQL, PHP 四個單字的縮寫。使用 LAMP 的 VM 影像,開發人員就可以直接開發互聯網應用、上網測試,LAMP+SOA (Service Oriented Architecture) 助長了互聯網應用的模組化,更使一個互聯網應用更容易地分散到不同的虛擬主機上。

2000年代中後期,公有雲漸漸進入主流,Amazon Web Services,Google,跟 Microsoft Azure 都開始大力推行以虛擬主機為架構的服務平台,也就是後來為人所熟知的 Infrastructure as a Service (IaaS)。應用開發商不再需要建購自己的 IDC,也能享受到 IaaS 平台服務商的延展性、高可用性和穩定性的好處。

然而,以 VM 為底層架構的互聯網服務,還是擺脫不了單體模組 (monolithic) 的框架。一個 WAR file 往往還是包了很多不相干的 software library,而啟動一個 VM 還是需要數分鐘到數十分鐘,就互聯網架構來說,這分鐘級的啟動時間還是太長了。

容器化的時代

Linux 軟體容器技術 (LXC),其實早在 70年代就已被開發出來,但容器技術變成互聯網服務的主流,主要還是歸功於 2013 年 Docker 公司 加州 Python Conference 的發表會。Docker 容器把原來 VM 的虛擬技術更往前推一步,Docker 容器不再需要像 KVM 這樣的 Hypervisor,而是讓多個 Linux distribution (Linux 發行版,例如 Ubuntu 或 CentOS ),能共享在同一個主機上的 Linux Kernel。這樣啟動一個 Docker 容器,只需要幾秒鐘時間,而不像 VM 的幾分鐘。同時,Docker 容器也大幅減低了Linux 主機的記憶體使用量 (memory footprint),讓一台伺服器可以同時負載數十個或更多的 Docker 容器。這種不使用 Hypervisor 的虛擬雲端服務架構,叫做「雲原生技術」 (Cloud Native)。

而另一個讓容器發揚光大的技術,則是 Kubernetes (K8S)。由於 Google 內部早已大量使用容器技術,為了方便容器的管理與調度,Google 就開發出來一套管理容器叢集生命週期的工具,並以開源軟體形式釋出,在短短幾年內就蔚為風行,成為雲原生互聯網服務的主流架構。Gartner 估計在 2019 年底,全球已有 35% 的企業在使用或者提供容器為架構的服務,而到了2022年,使用率將會增長到 75%;到2025年,容器的使用率更會增長到 85%。

微服務架構

如上所述,在 90 年代,以 J2EE 平台來開發的應用服務大行其道,加上當時 大型電腦(mainframe computer) 的普及,使得企業及應用開發商傾向以 IT 為中心的開發模式,使互聯網服務模組都很「笨重」,一個新版的互聯網服務,通常都要花上數個月的計劃開發才能上線。

2005 年,Rod Johnson 開發了 Spring Framework,也是以開源的方式釋出,這個框架提供了Spring 容器 (註: Spring 容器 跟 Docker 容器並無任何直接 關係 ) 的 概念, 讓 Java 互聯網應用更模組化。Spring 容器是 Spring 框架的核心。容器創建物件(Objects),把它們連接在一起,配置它們,並從創建到銷毀,以管理物件的整個生命周期。這些物件被稱為Spring Beans 。開發人員可以提供相對獨立的 Spring Beans ,在上線後讓其他 Java 應用直接使用,不必在 release 前就把它綁在 WAR file 內。這是 一個讓互聯網服務記憶體使用量 (footprint) 大幅減少的一個重要里程碑。

Spring container + beans 的框架是一個重要的里程碑,因為它激勵了開發人員把一個互聯網服務看成一組「鬆散耦合」(loosely coupled) 的微型互聯網 服務 (micro web service)。每一個 micro web service 都可以有它自己的生命週期。雖然如此,但微服務這個名詞還是到了 2014 年,才被 Martin Fowler, James Lewis 跟 Adrian Cockcroft 等人正名。

「微服務」是一種軟體架構風格,它專注於單一責任與功能的小型功能區塊 (Small Building Blocks) 為基礎,利用模組化的方式組合出複雜的大型應用程式,各功能區塊使用與語言無關的API界面相互通訊。微服務最通用的 API 就是基於 HTTP 的 REST (Representational State Transfer) API。

我們下一章將會繼續仔細介紹微服務,以及如何在混合雲平台上有效開發以微服務為架構的互聯網應用。

作者介紹

符儒嘉,現為 Gemini Open Cloud 雙子星雲端的 CEO。於美國矽谷資訊軟體業工作約30 年,曾在IBM、Amdahl、Sun Micro、Interwoven任職,2009回台加入工研院雲端中心之研發團隊,擔任雲端中心關鍵計畫 Cloud OS 系統軟體開發之計畫主持人,將其在美國所累積的系統軟體開發知識與經驗,運用於 Cloud OS 之計畫執行中。

Gemini Open Cloud 雙子星雲端簡介

在NASA著名的阿波羅登月計畫之前,有個成功的前導任務「雙子星」,為人類太空旅行寫下成功的里程碑,雙子星雲端運算因而以此命名;期許雲端產品能立足台灣,放眼世界,能像NASA雙子星任務一樣的成功,為台灣的雲端產業貢獻心力,攜手軟硬體夥伴共創雲端商機。

www.geminiopencloud.com

--

--

Patrick Fu
Gemini Open Cloud 雙子星雲端

符儒嘉於美國矽谷資訊軟體業工作約30 年,曾在IBM、Amdahl、Sun、Interwoven任職,2009回國加入雲端中心之研發團隊,擔任雲端中心關鍵計畫Cloud OS 系統軟體開發之計畫主持人,將其在美國所累積的系統軟體開發知識與經驗,運用於雲端中心之計畫執行中。