我們前面花了一些時間了解 golang 的基本用法,以及資料一致性的重要性,並且在上一篇中討論到多 server 快取資料可能發生的狀況,其中在多 server 下如果能夠保持資料存取一致,並且依據流量更彈性的增減,便是 microservices 的最大特色。
分散式系統是當前主流,除非服務的流量與功能真的非常的小,不然目前架構設計都是分散式導向為前提,將數個主要的功能切分開來,分別放置不同實體運行。其中結合 container 快速部署的特性,發展出 Kubernetes 分散式管理系統,用以將服務劃分成更小的微服務,且管理、調度及監控其資源使用。
隨著分散式服務發展,如果我們將多個複雜的服務放在同一個 server 上,那想針對特定服務進行擴增或縮減時會十分困難,因此 mico services 的概念因應而生。盡可能的將服務獨立出來,若有需要共用的部分,也是讀出來後透過接口溝通,如此一來個別服務可因應需求量的變化,自由地調整所需佔用的的資源,將資源優先提供給需要的地方,或直接降低運行成本。
在開發上微服務很適合多團隊同時開發,團隊僅需定義好接口供日後溝通使用,個別服務便可依最適合的開發語言、DB scheme 與 design pattern 進行構築。確保微服務間解耦合,單一服務錯誤時其他服務不應該受到影響,在各自功能劃分的前提下,服務與服務間只是交遞的對象,若向下交遞對象錯誤時,需要可以正確的掌控損壞範圍不會擴及到其他服務。
我們了解到分散式是服務發展過程中,基於功能劃分或承載限制所自然產生的設計方向,而微服務則是在分散式發產過程中,為了個容易擴增、縮減、調度與開發,進而將服務更一進步的細分。下一篇開始我們將開始,學習如何使用 Kubernetes 管理我們的服務容器,享用其強大的模板與調度功能。