云原生—编排及管理
前面的文章介紹過:云原生應(yīng)用的定義和部署。今天主要介紹云原生編排及管理。云原生—應(yīng)用定義及部署
目錄
一、Orchestration & Management?編排及管理?
二、Scheduling & Orchestration編排和調(diào)度
三、Coordination & Service Discovery?協(xié)調(diào)和服務(wù)發(fā)現(xiàn)
四、Remote Procedure Call??遠(yuǎn)程過程調(diào)用RPC
五、Service Proxy?服務(wù)代理
六、API Gateway?API網(wǎng)關(guān)
七、Service Mesh?服務(wù)網(wǎng)格
一、Orchestration & Management?編排及管理?
前面已經(jīng)講解了關(guān)于云原生應(yīng)用定義和及部署,我們現(xiàn)在可以深入研究編排和管理流程。
本節(jié)內(nèi)容里面,你可以找到用于處理運(yùn)行和連接云原生應(yīng)用程序的工具。
另外,本節(jié)內(nèi)容也涵蓋了從 Kubernetes 本身到負(fù)責(zé)應(yīng)用程序間和外部通信的基礎(chǔ)設(shè)施層的所有內(nèi)容。
本質(zhì)上來看,可擴(kuò)展的云原生應(yīng)用程序依賴于這些工具所支持的自動化和彈性化。
這一層主要負(fù)責(zé)容器平臺的編排和調(diào)度工作。包括服務(wù)的發(fā)現(xiàn)治理、遠(yuǎn)程調(diào)用、服務(wù)代理、微服務(wù)治理等組件。
編排和管理的基本結(jié)構(gòu)如下,
二、Scheduling & Orchestration編排和調(diào)度
編排和調(diào)度是指跨集群運(yùn)行和管理容器。集群是一組通過網(wǎng)絡(luò)連接的物理或虛擬機(jī)器。
容器編排器(和調(diào)度器)有點(diǎn)類似于筆記本電腦上的操作系統(tǒng)。
操作系統(tǒng)管理您的所有應(yīng)用程序,例如 Microsoft Office、微信和QQ等;操作系統(tǒng)會執(zhí)行它們,并安排每個應(yīng)用程序何時使用筆記本電腦的硬件資源,如 CPU、內(nèi)存和存儲等。
雖然在一臺機(jī)器上運(yùn)行一切在管理層面看是最好不過的,但今天的大多數(shù)應(yīng)用程序?qū)嶋H上所處理的數(shù)據(jù)可能都比一臺計算機(jī)要大得多。
例如,目前像很京東、淘寶這種大型的電商平臺。他們擁有非常龐大的應(yīng)用程序并分布在數(shù)萬臺不同的機(jī)器上,形成了一個分布式集群。
目前,大多數(shù)應(yīng)用程序都是以這種方式構(gòu)建的,因此,我們需要一個能夠管理在這些不同機(jī)器上運(yùn)行的所有組件的一款軟件——“集群操作系統(tǒng)”。
這個工具就是容器編排器。
我們所熟知的K8S就行當(dāng)下很火的容器編排器。K8S供了這些容器的強(qiáng)大管理能力。而且容器和K8S都是云原生架構(gòu)的核心組件。
所解決的問題
在云原生架構(gòu)中,應(yīng)用程序被分解為許多小的組件或服務(wù),每個組件或服務(wù)都放置在一個獨(dú)立容器中。這些被切分后的組件或者服務(wù)就被稱為微服務(wù)。
與傳統(tǒng)的單體應(yīng)用相比,現(xiàn)在一般企業(yè)動輒則擁有數(shù)十個甚至數(shù)百個服務(wù)。如果出現(xiàn)問題,這些服務(wù)中的每一個都需要資源、監(jiān)控和修復(fù)。
如果僅針對單個服務(wù)手動完成資源分配、監(jiān)控和修復(fù)是有可能的,但如果是處理多個服務(wù)時,這種情形下仍以手動方式逐一維護(hù)就顯得捉襟見肘了。
這是就需要引入集群容器編排器來管理整個集群應(yīng)用。
引入云原生的意義
我們知道,K8S是名副其實(shí)的容器編排器。
K8S架構(gòu)和組件工作原則利用了 “期望狀態(tài)” 。也就是說,你定義了組件的期望狀態(tài),而?K8S?要將它們始終調(diào)整到你所期望的這個狀態(tài)。
例如,服務(wù)的10個實(shí)例在3個節(jié)點(diǎn)上運(yùn)行,可以訪問數(shù)據(jù)庫等,K8S不斷與實(shí)際狀態(tài)進(jìn)行比較。如果期望和實(shí)際狀態(tài)不匹配,K8S通過創(chuàng)建或銷毀對象來協(xié)調(diào)它們。如果一個容器崩潰,那么K8S就會啟動一個新容器。
總之,K8S可以將整個集群視為“一臺計算機(jī)”。它只關(guān)注環(huán)境應(yīng)該是什么樣子,并為您處理具體的實(shí)現(xiàn)細(xì)節(jié)。
另外,開發(fā)人員可以使用這種核心控制器模式來擴(kuò)展?K8S。操作員模式允許人們?yōu)樽远x資源編寫自定義控制器,并將任意邏輯和自動化構(gòu)建到?K8S中。
三、Coordination & Service Discovery?協(xié)調(diào)和服務(wù)發(fā)現(xiàn)
業(yè)務(wù)應(yīng)用程序中,一般是由多個單獨(dú)的服務(wù)組合而成,這些應(yīng)用之間需要很好的協(xié)作才能為用戶提供有效的價值。
為了協(xié)作,服務(wù)之間通過網(wǎng)絡(luò)進(jìn)行通信,為了實(shí)現(xiàn)通信這一機(jī)制,應(yīng)用之間必須首先找到對方。那服務(wù)發(fā)現(xiàn)組件就是來解決這一問題的。
解決的問題
我們知道,云原生架構(gòu)的特點(diǎn)就是動態(tài)性,這也意味著云原生架構(gòu)內(nèi)部的服務(wù)組織形式也在不斷發(fā)生變化。
當(dāng)一個容器在一個節(jié)點(diǎn)上崩潰時,會在另一個節(jié)點(diǎn)上啟動一個新容器來替換它。然后應(yīng)用程序會部署在新的容器中并需要及時為外界提供服務(wù)。那在整個集群環(huán)境中,如何快速跟蹤網(wǎng)絡(luò)中新的服務(wù)并發(fā)現(xiàn)它,以便在需要時能快速訪問到這臺機(jī)器。
這個問題就需要由我們的協(xié)調(diào)和發(fā)現(xiàn)組件來解決。
引入云原生意義
服務(wù)發(fā)現(xiàn)工具通過提供一個公共場所來查找和潛在地識別單個服務(wù)來解決這個問題。解決此類問題基本上有兩種類型的工具:
1)服務(wù)發(fā)現(xiàn)引擎
?服務(wù)發(fā)現(xiàn)引起,類似與數(shù)據(jù)庫的工具,用于存儲所有服務(wù)的信息以及如何定位它們。
2)名稱解析工具
名稱解析工具,主要接收服務(wù)位置請求并返回網(wǎng)絡(luò)地址信息的一種工具。
在K8S中,為了使 pod可訪問,引入了一個名為“服務(wù)”的新抽象層。服務(wù)為一組動態(tài)變化的 Pod 提供一個穩(wěn)定的地址。這個“服務(wù)”通常是指放置在容器和 pod 中的服務(wù)。它是實(shí)際應(yīng)用程序中具有特定功能的應(yīng)用程序組件或微服務(wù),比如手機(jī)上安裝的人臉識別應(yīng)用等。
隨著分布式系統(tǒng)變得越來越普遍,傳統(tǒng)的 DNS 流程和傳統(tǒng)的負(fù)載均衡器往往無法跟上不斷變化的端點(diǎn)信息。為了彌補(bǔ)這些缺點(diǎn),服務(wù)發(fā)現(xiàn)工具可以處理各個應(yīng)用程序?qū)嵗目焖僮院妥N。
分布式計算中很重要的一點(diǎn)就是各個服務(wù)之間的協(xié)同以及服務(wù)發(fā)現(xiàn),從Zookeeper到近年來在很多互聯(lián)網(wǎng)廠商和應(yīng)用中流行的Consul,都可以用于分布式服務(wù)的發(fā)現(xiàn)和配置,Kubernetes默認(rèn)使用的則是CoreOS旗下的Etcd。
四、Remote Procedure Call??遠(yuǎn)程過程調(diào)用RPC
遠(yuǎn)程過程調(diào)用 (RPC) 是一種使應(yīng)用程序能夠相互通信的特殊技術(shù)。這是構(gòu)建應(yīng)用程序通信的一種方式。
解決的問題
現(xiàn)代應(yīng)用程序由許多單獨(dú)的服務(wù)組成,這些服務(wù)必須進(jìn)行通信才能進(jìn)行協(xié)作。RPC 是處理應(yīng)用程序之間通信的一種選擇。
引入云原生的意義
RPC 提供了一種緊密耦合的方式來處理服務(wù)之間的通信, 它可以支持多種編程語言支持,比如C++,C#,Java,JavaScript,Python等。
RPC有很多潛在的好處:它使編碼連接更容易,它允許非常有效地使用網(wǎng)絡(luò)層和服務(wù)之間結(jié)構(gòu)良好的通信。RPC 還因創(chuàng)建脆弱的連接點(diǎn)和迫使用戶對多個服務(wù)進(jìn)行協(xié)調(diào)升級而受到批評。gRPC 是一種特別流行的 RPC 實(shí)現(xiàn),已被 CNCF 采用。
微服務(wù)間進(jìn)行通信,通常有兩種方式,其一為HTTP REST-JSON的方式,另一種為RPC方式,相比起來RPC方式效率更高。常用的包括 Google開源的 GRPC 、Apache旗下的Thrift 框架、Netflix 開源的自帶負(fù)載均衡的 Ribbon 和 Avra 數(shù)據(jù)序列化框架。
五、Service Proxy?服務(wù)代理
服務(wù)代理是一種工具,類似于中間人的身份。它的主要作用就行間攔截進(jìn)出服務(wù)流量,收集有關(guān)網(wǎng)絡(luò)流量的信息,并對其應(yīng)用請求做一些特殊邏輯處理,最后將該流量轉(zhuǎn)發(fā)到其他服務(wù)上。
這個工具既有點(diǎn)類似于我們?nèi)粘Kf的負(fù)載平衡器一樣簡單,也可以像與處理所有互連代理網(wǎng)格一樣復(fù)雜。
雖然服務(wù)代理本身很有用,特別是在將流量從更廣泛的網(wǎng)絡(luò)驅(qū)動到K8S集群時,服務(wù)代理也是其他系統(tǒng)的構(gòu)建模塊,例如后面講提到的API網(wǎng)關(guān)和服務(wù)網(wǎng)格。
解決的問題
應(yīng)用程序應(yīng)以受控方式發(fā)送和接收網(wǎng)絡(luò)流量。為了跟蹤流量并可能對其進(jìn)行轉(zhuǎn)換或重定向,我們需要收集數(shù)據(jù)。傳統(tǒng)上,支持?jǐn)?shù)據(jù)收集和網(wǎng)絡(luò)流量管理的代碼嵌入在每個應(yīng)用程序中。
而服務(wù)代理,則是將此功能“外部化”。它不再必須存在于應(yīng)用程序中。相反,它嵌入在應(yīng)用程序運(yùn)行所運(yùn)行的平臺層。
這樣便能允許開發(fā)人員,完全專注于編寫應(yīng)用程序代碼,同時,允許處理流量的通用任務(wù)由平臺團(tuán)隊統(tǒng)一管理。在應(yīng)用領(lǐng)域?qū)用娣止じ用鞔_。
引入云原生的意義
代理充當(dāng)用戶和服務(wù)之間或不同服務(wù)之間的守護(hù)者。
憑借這種獨(dú)特的定位,代理服務(wù)可以快速洞察出正在發(fā)生的通信類型,然后確定將特定請求發(fā)送到那個服務(wù)上,或者完全拒絕某個請求等。
代理服務(wù)主要收集一些關(guān)鍵數(shù)據(jù),比如管理路由(在服務(wù)之間平均分配流量或在某些服務(wù)出現(xiàn)故障時重新路由)、加密連接和緩存內(nèi)容(減少資源消耗)等。
六、API Gateway?API網(wǎng)關(guān)
網(wǎng)關(guān)屬于一種軟件術(shù)語,如果兩個相互獨(dú)立的局域網(wǎng)之間通過路由器進(jìn)行通信,那么中間的這個路由層就被稱之為“網(wǎng)關(guān)”。
任何一個應(yīng)用系統(tǒng)如果需要被其他系統(tǒng)調(diào)用,就需要暴露 API,這些 API 代表著一個一個的功能點(diǎn)。
如果兩個系統(tǒng)中間通信,在系統(tǒng)之間加上一個中介者協(xié)助 API 的調(diào)用,這個中介者就是 API 網(wǎng)關(guān)。
API 網(wǎng)關(guān)允許組織將關(guān)鍵功能,比如授權(quán)或限制應(yīng)用程序之間的請求數(shù)量等移動到集中管理的位置。它還用作外部API使用者的通用接口。
解決的問題
雖然大多數(shù)容器和核心應(yīng)用程序都有一個 API,但 API 網(wǎng)關(guān)不僅僅是一個 API。API 網(wǎng)關(guān)簡化了組織管理和應(yīng)用規(guī)則到所有交互的方式。
API 網(wǎng)關(guān)允許開發(fā)人員編寫和維護(hù)更少的自定義代碼。也能夠查看和控制應(yīng)用程序用戶與應(yīng)用程序本身之間的交互等。
引入云原生的意義
API 網(wǎng)關(guān)位于用戶和應(yīng)用程序之間。它充當(dāng)中間人的角色,從用戶那里獲取請求并將它們轉(zhuǎn)發(fā)到適當(dāng)?shù)姆?wù)。但在發(fā)出請求之前,它會評估是否允許用戶做他們想做的事情,并記錄有關(guān)誰提出請求以及他們提出了多少請求的詳細(xì)信息。
簡而言之,API 網(wǎng)關(guān)為應(yīng)用程序用戶提供了一個帶有通用用戶界面的單一入口點(diǎn)。它還能夠?qū)⒃趹?yīng)用程序中實(shí)現(xiàn)的任務(wù)移交給網(wǎng)關(guān),從而節(jié)省開發(fā)人員的時間和金錢。
七、Service Mesh?服務(wù)網(wǎng)格
網(wǎng)格服務(wù)定義了一組接口,這些接口的定義明確并遵守特定的慣例,用于解決:服務(wù)器發(fā)現(xiàn)、動態(tài)服務(wù)創(chuàng)建、服務(wù)生命周期管理、通知等與服務(wù)生命周期有關(guān)的問題。
服務(wù)網(wǎng)格主要用于管理服務(wù)之間的流量通信。它們使平臺團(tuán)隊能夠在集群內(nèi)運(yùn)行的所有服務(wù)中統(tǒng)一添加可靠性、可觀察性和安全性功能,而無需更改任何代碼。
本質(zhì)上,服務(wù)網(wǎng)格是一個基礎(chǔ)設(shè)施層,它通過向服務(wù)代理網(wǎng)絡(luò)(網(wǎng)格)提供命令和控制信號來管理服務(wù)間通信。它的強(qiáng)大之處在于它能夠提供關(guān)鍵系統(tǒng)功能而無需修改應(yīng)用程序。
與K8S一起,服務(wù)網(wǎng)格已成為云原生堆棧中一些最關(guān)鍵的基礎(chǔ)設(shè)施組件。
解決的問題
在云原生世界中,我們正在處理多個需要通信的服務(wù)。這意味著更多的流量在本質(zhì)上不可靠且通常很慢的網(wǎng)絡(luò)上來回傳輸。為了應(yīng)對這一系列新挑戰(zhàn),工程師必須實(shí)施額外的功能。在服務(wù)網(wǎng)格之前,必須將該功能編碼到每個應(yīng)用程序中。這種自定義代碼經(jīng)常成為應(yīng)用架構(gòu)變形或代碼難以維護(hù)的根源,并為失敗或漏洞提供了新的可能途徑。
引入云原生的意義
服務(wù)網(wǎng)格在平臺層上的所有服務(wù)中統(tǒng)一添加可靠性、可觀察性和安全性功能,而無需觸及應(yīng)用程序代碼。它們與任何編程語言兼容,允許開發(fā)團(tuán)隊專注于編寫業(yè)務(wù)邏輯。
服務(wù)網(wǎng)格通過服務(wù)代理將集群上運(yùn)行的所有服務(wù)綁定在一起,創(chuàng)建服務(wù)網(wǎng)格,因此服務(wù)網(wǎng)格。這些通過服務(wù)網(wǎng)格控制平面進(jìn)行管理和控制。服務(wù)網(wǎng)格允許平臺所有者在應(yīng)用程序上執(zhí)行常見操作或收集數(shù)據(jù),而無需開發(fā)人員編寫自定義邏輯。
服務(wù)網(wǎng)格提供了許多有用的功能,包括顯示詳細(xì)指標(biāo)的能力、加密所有流量、限制哪些服務(wù)授權(quán)的操作、為其他工具提供額外的插件等等。有關(guān)更多詳細(xì)信息,請查看 服務(wù)網(wǎng)格接口規(guī)范。
總結(jié):本節(jié)內(nèi)容主要介紹了容器的編排和管理的概念。從中我們也了解到了K8S與容器在整個云原生架構(gòu)中的重要性。初次之外,也了解了API網(wǎng)格、服務(wù)代理以及服務(wù)網(wǎng)格這些基礎(chǔ)層工具來如何解耦及高效管理我們的應(yīng)用和請求流量。
下一節(jié):云原生的運(yùn)行環(huán)境。
關(guān)注公眾號?+ 輸入[面試題] + 免費(fèi)領(lǐng)取面試資料(面試大綱+面試答案)!??
總結(jié)
- 上一篇: Mac版R语言(四):pacman包——
- 下一篇: 酷比魔方iwork12 linux,【酷