云原生技術和架構概述
2014年,谷歌開源了一個主要用于容器編排的Borg內部項目。由于沒有機構來管理這個項目,谷歌就與Linux基金會聯合創建了旨在鼓勵Kubernetes和其他云原生解決方案的開發和協作的云原生計算基金會(CNCF)。而后來Borg項目就更名為Kubernetes,并用Go語言重寫了實現部分,成為了CNCF的啟動捐贈項目。毫無疑問地講,Kubernetes只是開始,后續有大批的新項目先后加入到CNCF,圍繞著Kubernetes不斷地擴展功能。
1. 云原生(Cloud Native)
在講云原生之前,我們先了解一下CNCF,即云原生計算基金會,2015年由谷歌牽頭成立,基金會成員目前已有一百多企業與機構,包括亞馬遜、微軟。思科等巨頭。
CNCF在云端的自我使命是通過提供多種選項的開發軟件社區,幫助最終用戶構建云原生應用。從而培育云原生開源項目的生態體系。CNCF鼓勵項目之間的相互協作,希望實現完全由CNCF成員項目演化出來的成熟技術棧。
1.1 CNCF組織
目前共有25個項目已經被CNCF接受,在跟進Kubernetes生態發展。希望加入到CNCF的項目,必須是由技術監督委員會(TOC)選定并通過投票評比,取得絕大多數的投票認同才可以加入。投票過程由TOC貢獻者組成的一個優秀社區來輔助進行,而TOC貢獻者是來自CNCF成員公司的代表。
評選通過的項目就叫CNCF成員項目,CNCF將根據成員項目代碼成熟度級別分別定義為沙箱、孵化或畢業階段。下圖為其公布的Cloud Native Landscape,給出了云原生生態的參考體系。
Cloud Native Landscape
CNCF成員項目包括12個類別:編排、應用程序開發、監控、日志記錄、跟蹤、容器注冊、存儲和數據庫、運行時間、服務發現、服務網格、服務代理、安全以及數據流和消息流,下面內容重點介紹前幾個類別。
編排:Kubernetes這個單詞在古希臘語是舵手的意思。強調自動化和聲明性配置,可自動化完成容器化應用的部署、伸縮和管理。Kubernetes進行容器編排,而所編排的容器是可移植和模塊化的微服務包。它為應用添加了一個抽象層,將容器分組運行在Pod中,從而實現容器的編排。
應用程序開發:Helm是程序包管理器,以chart的形式讓用戶輕松地查找、共享、安裝和升級Kubernetes應用。幫助終端用戶使用KubeApps Hub部署已有應用(包括MySQL、Jenkins、Artifactory等)
監控:Prometheus是第二個加入到CNCF的項目,也是第二個畢業的項目。它是一個適合動態云環境和容器環境的監視解決方案,靈感來自于谷歌的Borgman監控系統。OpenMetrics其實是基于Prometheus的指標格式,而后者又是采用Borgmon的運營經驗,Borgmon實現了“白盒監控”和低開銷的海量數據收集,有著超過300家的服務輸出商。
日志和跟蹤:Fluentd采用統一的方法,對應用程序的日志進行收集、解析和傳輸。使用戶可以更好地理解和利用這些日志信息。另外,還有Jaeger是一個開源的分布式跟蹤系統解決方案,它與OpenTracing日志跟蹤軟件兼容。
容器注冊:Harbor最初是由VMWare作為開源解決方案開發的,是一個開源可信任的容器注冊器,用于存儲、標記和掃描Docker鏡像,提供了免費的、增強的Docker注冊特性和功能。
1.2 云原生介紹
CNCF給出了云原生應用的三大特征:
容器化封裝:以容器為基礎,提高整體開發水平,形成代碼和組件重用,簡化云原生應用程序的維護。在容器中運行應用程序和進程,并作為應用程序部署的獨立單元,實現高水平資源隔離。
動態管理:通過集中式的編排調度系統來動態的管理和調度。
面向微服務:明確服務間的依賴,互相解耦。
云原生包含了一組應用的模式,用于幫助企業快速,持續,可靠,規模化地交付業務軟件。云原生由微服務架構,DevOps 和以容器為代表的敏捷基礎架構組成。
這邊引用網上關于云原生所需要的能力和特征總結,如下圖。
云原生所需要的能力和特征
1.3 The Twelve Factors
12-Factors經常被直譯為12要素,也被稱為12原則,12原則由公有云PaaS的先驅Heroku于2012年提出,目的是告訴開發者如何利用云平臺提供的便利來開發更具可靠性和擴展性、更加易于維護的云原生應用。具體如下:
基準代碼
顯式聲明依賴關系
在環境中存儲配置
把后端服務當作附加資源
嚴格分離構建、發布和運行
無狀態進程
通過端口綁定提供服務
通過進程模型進行擴展
快速啟動和優雅終止
開發環境與線上環境等價
日志作為事件流
管理進程
另外,除了上述的12要素外,還有補充的三點跟API、認證授權和監控告警相關的要素。
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等所有邏輯。其架構如下圖所示。
傳統的單體架構
單體架構進行演化升級之后,過渡到SOA架構,即面向服務架構。近幾年微服務架構(Micro-Service Archeticture)是最流行的架構風格,旨在通過將功能模塊分解到各個獨立的子系統中以實現解耦,它并沒有一成不變的規定,而是需要根據業務來做設計。微服務架構是對SOA的傳承,是SOA的具體實踐方法。微服務架構中,每個微服務模塊只是對簡單、獨立、明確的任務進行處理,通過REST API返回處理結果給外部。
在微服務推廣實踐角度來看,微服務將整個系統進行拆分,拆分成更小的粒度,保持這些服務獨立運行,應用容器化技術將微服務獨立運行在容器中。過去設計架構時,是在內存中以參數或對象的方式實現粒度細化。微服務使用各個子服務控制模塊的思想代替總線。不同的業務要求,服務控制模塊至少包含服務的發布、注冊、路由、代理功能。
容器化的出現,一定程度上帶動了微服務架構。架構演化從單體式應用到分布式,再從分布式架構到云原生架構,微服務在其中有著不可或缺的角色。微服務帶給我們很多開發和部署上的靈活性和技術多樣性,但是也增加了服務調用的開銷、分布式系事務、調試與服務治理方面的難題。
Spring Cloud整體架構圖
從上圖Spring Cloud組件的架構可以看出在微服務架構中所必須的組件,包括:服務發現與注冊、熔斷機制、路由、全局鎖、中心配置管理、控制總線、決策競選、分布式會話和集群狀態管理等基礎組件。
Spring Cloud VS Kubernetes
Spring Cloud和Kubernetes有很大的不同,Spring Cloud和Kubernetes處理了不同范圍的微服務架構技術點,而且是用了不同的方法。Spring Cloud方法是試圖解決在JVM中的微服務架構要點,而Kubernetes方法是試圖讓問題消失,為開發者在平臺層解決。Spring Cloud在JVM中非常強大,Kubernetes管理那些JVM很強大。看起來各取所長,充分利用這兩者的優勢是自然而然的趨勢了。
5. 總結
技術架構的演變非常快,各種新的名詞也是層出不窮。本文主要是對云原生的概述。云原生應用的三大特征:容器化封裝、動態管理、面向微服務。首先由CNCF組織介紹了云原生的概念,然后分別對這三個特征進行詳述。云原生架構是當下很火的討論話題,是不同思想的集合,集目前各種熱門技術之大成。
參考鏈接:http://dockone.io/article/2991