雲原生架構概述

1. 什麼是雲原生

1.1 CNCF組織

在講雲原生以前,咱們先了解一下CNCF,即雲原生計算基金會,2015年由谷歌牽頭成立,基金會成員目前已有一百多企業與機構,包括亞馬遜、微軟。思科等巨頭。git

cncf
CNCF

目前CNCF所託管的應用已達14個,下圖爲其公佈的Cloud Native Landscape,給出了雲原生生態的參考體系。 github

Cloud Native Landscape
Cloud Native Landscape

1.2 雲原生

CNCF給出了雲原生應用的三大特徵:web

  • 容器化封裝:以容器爲基礎,提升總體開發水平,造成代碼和組件重用,簡化雲原生應用程序的維護。在容器中運行應用程序和進程,並做爲應用程序部署的獨立單元,實現高水平資源隔離。
  • 動態管理:經過集中式的編排調度系統來動態的管理和調度。
  • 面向微服務:明確服務間的依賴,互相解耦。

雲原生包含了一組應用的模式,用於幫助企業快速,持續,可靠,規模化地交付業務軟件。雲原生由微服務架構,DevOps 和以容器爲表明的敏捷基礎架構組成。docker

這邊引用網上關於雲原生所須要的能力和特徵總結,以下圖。後端

cca
雲原生所須要的能力和特徵

1.3 The Twelve Factors

12-Factors常常被直譯爲12要素,也被稱爲12原則,12原則由公有云PaaS的先驅Heroku於2012年提出(https://12factor.net/),目的是告訴開發者如何利用雲平臺提供的便利來開發更具可靠性和擴展性、更加易於維護的雲原生應用。具體以下:微信

  • 基準代碼
  • 顯式聲明依賴關係
  • 在環境中存儲配置
  • 把後端服務看成附加資源
  • 嚴格分離構建、發佈和運行
  • 無狀態進程
  • 經過端口綁定提供服務
  • 經過進程模型進行擴展
  • 快速啓動和優雅終止
  • 開發環境與線上環境等價
  • 日誌做爲事件流
  • 管理進程

另外還有補充的三點:網絡

  • API聲明管理
  • 認證和受權
  • 監控與告警

距離12原則的提出已有五年多,12原則的有些細節可能已經不那麼跟得上時代,也有人批評12原則的提出從一開始就有過於依賴Heroku自身特性的傾向。不過無論怎麼說,12原則依舊是業界最爲系統的雲原生應用開發指南。架構

2. 容器化封裝

最近幾年docker容器化技術很火,常常在各類場合可以聽到關於docker的分享。Docker讓開發工程師能夠將他們的應用和依賴封裝到一個可移植的容器中。Docker背後的想法是建立軟件程序可移植的輕量容器,讓其能夠在任何安裝了Docker的機器上運行,而不用關心底層操做系統。運維

Docker能夠解決虛擬機可以解決的問題,同時也可以解決虛擬機因爲資源要求太高而沒法解決的問題。其優點包括:分佈式

  • 隔離應用依賴
  • 建立應用鏡像並進行復制
  • 建立容易分發的即啓即用的應用
  • 容許實例簡單、快速地擴展
  • 測試應用並隨後銷燬它們

自動化運維工具能夠下降環境搭建的複雜度,但仍然不能從根本上解決環境的問題。在看似穩定而成熟的場景下,使用Docker的好處愈來愈多。

3. 服務編排

筆者看到Jimmy Song對雲原生架構中運用服務編排的總結是:

Kubernetes——讓容器應用進入大規模工業生產。

這個總結確實很貼切。編排調度的開源組件還有:Kubernetes、Mesos和Docker swarm。

Kubernetes是目前世界上關注度最高的開源項目,它是一個出色的容器編排系統。Kubernetes出身於互聯網行業的巨頭Google公司,它借鑑了由上百位工程師花費十多年時間打造Borg系統的理念,經過極其簡易的安裝,以及靈活的網絡層對接方式,提供一站式的服務。

Mesos則更善於構建一個可靠的平臺,用以運行多任務關鍵工做負載,包括Docker容器、遺留應用程序(例如Java)和分佈式數據服務(例如Spark、Kafka、Cassandra、Elastic)。Mesos採用兩級調度的架構,開發人員能夠很方便的結合公司業務場景自定製MesosFramework。

他們爲雲原生應用提供的強有力的編排和調度能力,它們是雲平臺上的分佈式操做系統。在單機上運行容器,沒法發揮它的最大效能,只有造成集羣,才能最大程度發揮容器的良好隔離、資源分配與編排管理的優點,而對於容器的編排管理,Swarm、Mesos和Kubernetes的大戰已經基本宣告結束,kubernetes成爲了無可爭議的贏家。

4. 微服務架構

傳統的web開發方式,通常被稱爲單體架構(Monolithic)全部的功能打包在一個WAR包裏,基本沒有外部依賴(除了容器),部署在一個JEE容器(Tomcat,JBoss,WebLogic)裏,包含了DO/DAO,Service,UI等全部邏輯。其架構以下圖所示。

monolithic
傳統的單體架構

單體架構進行演化升級以後,過渡到SOA架構,即面向服務架構。近幾年微服務架構(Micro-Service Archeticture)是最流行的架構風格,旨在經過將功能模塊分解到各個獨立的子系統中以實現解耦,它並無一成不變的規定,而是須要根據業務來作設計。微服務架構是對SOA的傳承,是SOA的具體實踐方法。微服務架構中,每一個微服務模塊只是對簡單、獨立、明確的任務進行處理,經過REST API返回處理結果給外部。在微服務推廣實踐角度來看,微服務將整個系統進行拆分,拆分紅更小的粒度,保持這些服務獨立運行,應用容器化技術將微服務獨立運行在容器中。過去設計架構時,是在內存中以參數或對象的方式實現粒度細化。微服務使用各個子服務控制模塊的思想代替總線。不一樣的業務要求,服務控制模塊至少包含服務的發佈、註冊、路由、代理功能。

容器化的出現,必定程度上帶動了微服務架構。架構演化從單體式應用到分佈式,再從分佈式架構到雲原生架構,微服務在其中有着不可或缺的角色。微服務帶給咱們不少開發和部署上的靈活性和技術多樣性,可是也增長了服務調用的開銷、分佈式系事務、調試與服務治理方面的難題。

cloud structure
Spring Cloud總體架構圖

從上圖Spring Cloud組件的架構能夠看出在微服務架構中所必須的組件,包括:服務發現與註冊、熔斷機制、路由、全局鎖、中心配置管理、控制總線、決策競選、分佈式會話和集羣狀態管理等基礎組件。

scvsk8s
Spring Cloud VS Kubernetes

Spring Cloud和Kubernetes有很大的不一樣,Spring Cloud和Kubernetes處理了不一樣範圍的微服務架構技術點,並且是用了不一樣的方法。Spring Cloud方法是試圖解決在JVM中的微服務架構要點,而Kubernetes方法是試圖讓問題消失,爲開發者在平臺層解決。Spring Cloud在JVM中很是強大,Kubernetes管理那些JVM很強大。看起來各取所長,充分利用這二者的優點是天然而然的趨勢了。

5. 總結

技術架構的演變很是快,各類新的名詞也是層出不窮。本文主要是對雲原生的概述。雲原生應用的三大特徵:容器化封裝、動態管理、面向微服務。首先由CNCF組織介紹了雲原生的概念,而後分別對這三個特徵進行詳述。雲原生架構是當下很火的討論話題,是不一樣思想的集合,集目前各類熱門技術之大成。

最後,祝你們聖誕節快樂😆!

訂閱最新文章,歡迎關注個人公衆號

微信公衆號

參考

  1. 雲原生應用之路
  2. 架構演化:雲原生時代正式開啓
  3. cncf/landscape
相關文章
相關標籤/搜索