容器之於微服務架構
不一樣微服務之間可能存在一些異構,爲了讓每個團隊在微服務體系下發揮最大效能,咱們容許不一樣團隊採用不一樣的編程語言,甚至不一樣的運行環境來去運行這些微服務。所以,咱們在運維和管理微服務時,最初其實並無一套統一的標準去處理的異構環境,這也是爲何後來容器技術變得流行起來,它的一個重要做用就是經過一層標準的封裝以及標準的運行時,來標準化微服務部署。這樣從生命週期管理的角度來看,每個微服務之間的差別就會變少,共同點變多。編程
Kubernetes 的做用是幫助把已經標準化的微服務最便捷地運行到底層資源上面。咱們講到的存儲、計算、網絡都經過 Kubernetes 這層進行了統一抽象和封裝,讓已經被容器統一的微服務可以直接運行到 Kubernetes 平臺。所以,運維人員不用再苦惱如何去把某個微服務分配到具體的某一個資源或計算單元上去。經過容器和容器平臺,大大簡化了微服務自己的生命週期管理,簡化了微服務自身的運維管理問題,也促進了微服務更多地被企業所採用。網絡
此外,Kubernetes 具備一個 Pod 的概念。一個 Pod 其實是一組容器的集合,在一個 Pod 中能夠運行一個或多個容器。通常來說,當咱們採用微服務架構時,會把微服務的主體運行在主容器中,主容器的生命週期跟 Pod 自身的生命週期是一個耦合的狀態。架構
除了主容器以外,在同一個 Pod 中還會運行一些邊車容器(Sidecar 容器),爲主容器提供一些輔助功能,好比:日誌採集、網絡代理、身份鑑權等,這樣微服務除了自身提供的核心業務服務之外,經過 Kubernetes 咱們還能夠動態添加一些額外的輔助能力,讓微服務管理變得更健壯。運維
另外一方面,Pod 還提供了一些很是有用的功能:編程語言
狀態信息:Pod 會提供一個標準接口顯示運行狀態。例如,是否已經準備好接收流量,若是準備好接收流量,那麼從 Ingress 流量就能夠打到微服務上。若是運行狀態不良,咱們能夠嘗試對這個容器進行修理、重啓或刪除,甚至是換到另外一個計算單元上去運行,爲微服務總體的穩定性提供了保障。ide
地址服務:每個 Pod 都有一個標準化的 DNS 地址服務,能夠被統一的尋址。這樣對於須要統一暴露出來 API 的日誌、監控、追蹤能力都有着很是大的幫助,能夠根據這個 DNS 的地址來訪問 Pod 所暴露的可觀測性信息,便捷及時的發現運行時問題。微服務
因此咱們能夠看到容器平臺及容器其實在微觀上也幫助了微服務具備更多能力、具備更強的健壯性以及具備更好的可觀測性。單元測試
當咱們將大型的單體應用拆解爲多個微服務,也必定會增長 IT 系統研發協同、交付、運維的複雜性。雲原生就在於幫助微服務解決生命週期管理以及運維管理難題。測試
由於微服務的數量很是多,部署、管理的工做量很大。代理
而隨着 CI/CD 概念推廣以及容器技術普及,微服務將這兩種理念和技術結合起來,造成新的:「微服務 + API + 平臺」 的開發模式,提出了容器化微服務的持續交付概念。
傳統單體架構 DevOps 開發方式,要求產品隊伍橫跨產品管理、開發、QA、DBA 以及系統運維管理。
微服務架構 DevOps 開發方式,將一個大臃腫的總體產品開發隊伍切分爲根據不一樣微服務的劃分的產品隊伍,以及一個大的總體的平臺隊伍負責運營管理,二者之間經過 API 交互,作到了鬆耦合隔絕。
在測試方面,微服務架構下的測試分爲三個層次:
三種測試從上到下實施的容易程度遞增,可是測試效果遞減。端到端測試最費時費力,可是經過測試後咱們對系統最有信心。單元測試最容易實施,效率也最高,可是測試後不能保證整個系統沒有問題。
綜上,咱們能夠感覺到微服務架構與容器、Kubernetes、DevOps 等雲原生關鍵技術天然地走到了一塊兒,構成了雲原生應用架構的雛形。
雲原生應用架構具備下述特色: