Microservices
Microservices(微服務) 是什麼
此篇文章為 What are microservices? 的筆記
1 Microservices 的重點
Microservices 是一種建立 Application 的方法,將程式碼拆分成 小
且 能互動
的 服務
。
有以下特質
所有的 Application 都是由許多能互動的
服務
架構而成,服務
例如有 Databases, API endpoints, Frontend通常,這些服務會在 (1)同個 infrastructure (2) 同一個 Codebase 上同時運作
在 Microservices 架構上,服務會被「拆分」成多個小單位獨立運作
優點: 容易規模化、能避免服務斷線 ; 缺點: 複雜度提升
多數的大型公司 (例如 Google, Uber, Facebook) 都會以 Microservices 的架構來建立 Application。
2 服務是什麼
服務是「任何能獨立運作的 Application」,通常用在 Backend、但 Frontend 也有服務。
有可能
pricing endpoint: 在 Uber machine learning model 中提供
match endpoint: 可能是某種演算法或 if/else 判斷式
available drives: 可能是內部資料庫的資料
但細節不重要。重要的是每一個 endpoint 都是一個服務,在 backend 扮演他的角色。(ps. 前端現在也有 services,像是 micro-frontend 就可以當成一個 service)
3 單體式架構 (Monolithic Architecture)
單體式架構指「把 services, database, frontend...etc 全部部屬在同個 infratructure 上,都在同個程式檔案中」。
單體式架構
很簡單而且 make sense,因為不用去想要如何拆分 code
不會影響到 performance 太多
那為什麼大型科技公司不採取單體式架構呢?
因為隨著公司長大,有愈來愈多的 request (例如愈來愈多人叫車),公司發現了一些問題
Scale: 每個 Application 的使用頻率都不相同,如果所有的服務都放在同一個 infrastructure 上,那會非常難規模化。
Uptime (正常運行時間): 如果一個服務有問題掛了,整個 Server 都會掛掉
Specialized Infrastructure: 一些特殊的服務如 machine learning, 影片處理服務需要高強度的 GPU。如果把所有服務都放在同個 infrastructure 上,會非常不符合成本。
Developer experience
如果把所有服務都放在同一台 Server 上,如果工程師需要微調其中一個服務時,需要重新部屬、重新啟動 Server/Application。
所有的服務都要使用同樣的程式開發語言
使用 Microservices 後
Scale: 可以單獨地規模化任何服務
Uptime (正常運行時間): 如果一個服務有問題掛了,不會讓整個產品停止運作
Specialized Infrastructure: 可以對特殊的服務如 machine learning, 影片處理服務實行客製化需求,例如需要高強度的 GPU。
Developer experience
每個服務可以各別微調
不同服務可以使用不同的程式開發語言
可以形象化的比喻是貨櫃運輸,例如有以下 4 種貨物
火柴: 易燃
毛衣: 輕、怕水
米: 重、容易腐爛
食物處理器: 重、怕水、脆弱
如果全部包裝在一個貨櫃運送將會是一場災難,如果分不同貨櫃包裝則可以客製化。
4 Microservices 不是唯一解答,必須考量整個系統需求
Microservices 聽起來好處多多,但致命缺點就是: 非常複雜。
必須考慮
服務間要如何取授權驗證 (authenticate) 彼此?
服務間要如何知道彼此的存在?
如何確保不同服務間的協定(SLA, Service-level Agreement)? 例如靠文件嗎
如果一個語言是用 GO 寫的,但團隊成員只會 Javascript,怎麼辦?
目前已經有公司在試著解決這樣的困難,例如 Service mesh 服務、Optic 工具。
Last updated