這是說好的 2015 Cloud & Datacenter EXPO 的心得兼筆記文的中篇,這篇僅記錄一場議程,因為同樣的整理一場就夠累人了,所以我真的很佩服這世上的眾多優質部落客,可以一直產出文章。當然更不用說對那些 Code 寫的好、演講講得棒、文章更是寫的呱呱叫的大神們,我根本就是一直跪著在看電腦。
雲端時代不可不知的Micro Services架構 - Gogolook 軟體架構師 / 葉秉哲 第三場議程是由 Gogolook (也就是 Whoscall 的公司) 的架構師葉秉哲帶來的精彩內容,我個人近期已多次聽過葉大上台簡報,每一場都令人讚嘆,講題內容具備深度,內容主軸與架構安排得宜,準確的時間控制,畫面切換的順場,可以說是專業級的講者,能聽到高品質的議程真的是十分享受的一件事。
這場的題目也正好是我個人最近有些困惑的東西「Microservices」,我甚至還去下載了《Building Microservices》 的試讀本。就在我覺得最近資訊量過多,決定先繼續擱置它時,想不到在這次的 EXPO 葉大就開講了,時間點實在是恰到好處!
回到正題,下面就開始筆記這次葉大所講的內容,葉大也已經將簡報釋出,大家可以自行前往觀賞! https://prezi.com/e-fjaizjyell/microservices/
開場
葉大首先用 Whoscall 作為開場,主要提到了小團隊也能有大成就,而其中的關鍵之一就是善用雲端資源。接著他提到另一個將雲端運用得淋漓盡致的公司 NETFLIX,他引用了一篇報導,他提到 NETFLIX 是一間比 Amazon 還要懂得如何使用 AWS 的公司,據說在 2011 AWS 大當機的時候,很多網站都掛了,但是 NETFLIX 卻僅僅只有速度變慢的影響而已。
不是說只要使用了雲端,就代表你可以跟其他人一樣厲害,因為使用雲端也有雲端需要去面對的問題與挑戰。而雲端的優勢在於彈性,唯有透過「自動化」才能善用這種優勢,例如你需要有基本的 Monitoring、Measurement、auto scaling、rapid provisioning…等,這些綜合起來簡單地說就是你有沒有好的 DevOps 文化!
題外話,葉大也有稍微提到如果覺得資料放在別人家不安全,你可以嘗試加上額外的加密機制,他就有替他們公司設計自己的加密機制。
在 Microservices 之前
前面開場講了一堆雲端,也提到了 DevOps 文化,為什麼要提這些呢?因為這些是繼續談 Microservices 之前的重要前提,在簡報中葉大則是用「體質」來形容這件事。他表示要先具備這樣的體質,才能開始 Microservices,而這樣的投資是值得的,不然你根本無法開始導入 Microservices,也就更不用說要從中獲得好處。
What is Microservices?
用文字來看 Microservices 其實就是 Micro - Services,有些人會翻成「微服務」,葉大則說這是「把服務微小化,將大服務切成許多的小服務。用許多的小服務建構成最終的大系統。」
Microservices and SOA?
若只是將大服務切成很多小服務,那麼下一個疑問就出來了「Microservices 與 SOA 有什麼差別?」
我自己在這場議程之前,就有看到類似的文章在講這件事情,所以葉大一講,我當下是點頭如搗蒜啊!而葉大則用了三方人馬的說法來解釋這件事情:
- PHP之父 Rasmus Lerdorf Rasmus 表示他才不管其他人用現在用什麼名稱,因為他一直以來就是用這種方式在設計系統的。對他而言 Microservices 與 SOA 是一樣的。現在大家要怎麼爭論名稱與他無關。
- Netflix 的 Adrian Cockcroft Adrian 表示他當初在建構系統時,做的事情是比 SOA 更 SOA 的 fine-grained SOA,只是現在有一些人將這稱作「Microservices」。因為詞不是他發明的,所以爭論名稱的事情也與他無關。
- The ThoughtWorks people 像是 Martin Fowler 或 James Lewis Martin 說也不是他發明的,他也是在與人討論之中覺得應該要用一個新的名稱來稱呼這種新版的 SOA。 (所以說穿了沒人想對名詞爭議這件事情負責啊!)
其實你也懂得 Microservices
接著葉大提到了一個關鍵重點,就是「其實你也懂得 Microservices,只是你沒有意識到這件事!」
葉大的意思其實很容易理解,他在簡報中用網站服務為例,現在如果你要設計建構一個網站服務時,你必然會思考不要每件事情都自己來,反而會思考如何善用各種外部服務,像是登入系統可以會引用 FB Login,Analytics 則引用 Google Analytics,Monitoring 可能會引用 New Relic。而這種設計系統的思維其實就是 Microservices 的思維。
Microservices 的特色
葉大有提到 Martin Fowler 他們所列出的 Microservices 的九個特色,但其中三點他認為這就是前面提過的「體質」。
- Products not Projects
- Infrastructure Automation
- Evolutionary Design
剩下六個特色,我就僅節錄部分重點:
- Componentization via Services 不要用太小的物件作為單位來提供功能,而是以服務 (Service) 作為最小單位。
- Smart endpoints and dumb pipes 服務與服務之間的溝通與串聯要用最簡單的方式,像現在大多都是用 REST 的方式。
- Organized around Business Capabilities 服務與服務之間是單獨分離的,就像是分屬於不同的組織一樣,個別的服務可能會分別擁有自己的 UI、DB、Storage…。
- Decentralized Governance 續上的觀念,服務與服務各自是分權而立的。每一個服務可以各自選擇最合適的技術來實作。
- Decentralized Data Management 再續前面的觀念,既然服務與服務可各自單獨存在,因此在資料庫及資料管理當然也可以分開。
- Design for failure 莫非定律,隨時都有可能出錯,因此服務需要有良好的 Monitoring。
導入 Microservices 的方法
講完前面的內容後,最後葉大提供三個導入 Microservices 的重點:
- 殺雞焉用牛刀 如果軟體架構本身不大,其實不需要採用 Microservices,因為只會造成生產力的下降,反而用傳統的方式可以快速的解決它。反之如果軟體架構夠大夠複雜,採用 Microservices 則能讓生產力維持在一個水平。
- 先搞定「DevOps 體質」 你今天 DevOps 了嗎?體質先顧好,再來談 Microservices!
- 積極重構 安全考量,先由小處、局部著手,將大架構的小地方一步一步地改成 Microservices,切勿躁進。
延伸閱讀
葉大也有列出幾個延伸閱讀的內容:
本場議程結束
葉大的講題最後都會有一個快速回顧,這一點值得學習起來,有助於聽眾回憶並強化所聽到的內容。
基本上聽完這一場,對我而言等於是幫助我消化完上面「延伸閱讀」的第一篇文章,除了能更快理解他們在講些什麼,更知道應該如何看待 Microservices。