Nomad技术手册:整体架构(Architecture)
Nomad是一個(gè)復(fù)雜的系統(tǒng),有許多不同的部分。為了幫助Nomad的用戶和開發(fā)人員構(gòu)建一個(gè)關(guān)于它如何工作的心理模型,這個(gè)文檔說明了Nomad的系統(tǒng)架構(gòu)。
高級(jí)主題!這篇文章涵蓋了Nomad的技術(shù)細(xì)節(jié)。您不需要了解這些細(xì)節(jié)就可以有效地使用Nomad。對(duì)于那些希望了解它們而不需要通過源代碼進(jìn)行深入研究的人來說,這里提供了詳細(xì)的文檔。
術(shù)語表
在描述系統(tǒng)架構(gòu)之前,我們提供了以下術(shù)語表,以幫助闡述所討論的內(nèi)容:
-
作業(yè)(job) -?作業(yè)是用戶提供的一種規(guī)范,用于聲明Nomad的工作負(fù)載。作業(yè)是理想狀態(tài)的一種形式;用戶表示作業(yè)應(yīng)該在運(yùn)行,而不是應(yīng)該在哪里運(yùn)行。Nomad的職責(zé)是確保實(shí)際狀態(tài)與用戶理想的狀態(tài)匹配。一個(gè)作業(yè)由一個(gè)或多個(gè)任務(wù)組組成。
-
任務(wù)組(task group)?- 任務(wù)組是一組必須一起運(yùn)行的任務(wù)。例如,web服務(wù)器可能要求日志傳輸協(xié)同進(jìn)程也始終在運(yùn)行。任務(wù)組是調(diào)度單元,這意味著整個(gè)組必須在同一個(gè)客戶機(jī)節(jié)點(diǎn)上運(yùn)行,不能分割。
-
驅(qū)動(dòng)(driver)?-?驅(qū)動(dòng)表示執(zhí)行任務(wù)的基本方法。典型驅(qū)動(dòng)包括Docker、Qemu、Java和靜態(tài)二進(jìn)制文件。
-
任務(wù)(task)?- 任務(wù)是Nomad中最小的工作單元。任務(wù)由驅(qū)動(dòng)執(zhí)行,這使得Nomad在它支持的任務(wù)類型上具有靈活性。任務(wù)指定它們的驅(qū)動(dòng)、驅(qū)動(dòng)的配置、約束和所需的資源。
-
客戶端(client)?- Nomad的客戶端是一臺(tái)可以運(yùn)行任務(wù)的機(jī)器。所有客戶端都運(yùn)行Nomad代理。代理負(fù)責(zé)向服務(wù)器注冊(cè)、監(jiān)視要分配的工作和執(zhí)行任務(wù)。Nomad代理是一個(gè)長(zhǎng)期存活的進(jìn)程,它與服務(wù)端交互。
-
分配(Allocation) - 分配是作業(yè)中的任務(wù)組和客戶端節(jié)點(diǎn)之間的映射。一個(gè)作業(yè)可能有成百上千個(gè)任務(wù)組,這意味著必須存在等量的分配來將工作映射到客戶端。分配由Nomad服務(wù)端創(chuàng)建,作為評(píng)估期間的調(diào)度決策的一部分。
-
評(píng)估(Evaluation)?- 評(píng)估是Nomad做出調(diào)度決策的機(jī)制。當(dāng)理想的狀態(tài)(作業(yè))或?qū)嶋H的狀態(tài)(客戶端)發(fā)生變化時(shí),Nomad創(chuàng)建一個(gè)新的評(píng)估,以確定是否必須采取任何行動(dòng)。如有必要,評(píng)估可能導(dǎo)致分配的改變。
-
服務(wù)端(Server)?- Nomad服務(wù)端是集群的大腦。每個(gè)區(qū)域都有一個(gè)服務(wù)器集群,它們管理所有作業(yè)和客戶端、運(yùn)行評(píng)估并創(chuàng)建任務(wù)分配。服務(wù)端之間相互復(fù)制數(shù)據(jù),并進(jìn)行領(lǐng)導(dǎo)人選舉,以確保高可用性。服務(wù)端跨區(qū)域聯(lián)合以使Nomad具有全局意識(shí)。
-
區(qū)域和數(shù)據(jù)中心(Regions and Datacenters)?- Nomad將基礎(chǔ)架構(gòu)建模為區(qū)域和數(shù)據(jù)中心。區(qū)域可能包含多個(gè)數(shù)據(jù)中心。服務(wù)端被分配到特定的區(qū)域,管理狀態(tài)并在該區(qū)域內(nèi)做出調(diào)度決策。多個(gè)區(qū)域可以聯(lián)合在一起。例如,您可能擁有一個(gè)包含US -east-1和US -west-1數(shù)據(jù)中心的美國(guó)區(qū)域,該區(qū)域與EU -fr-1和EU -uk-1數(shù)據(jù)中心連接在一起。區(qū)域之間的請(qǐng)求被轉(zhuǎn)發(fā)到適當(dāng)?shù)姆?wù)器。數(shù)據(jù)不會(huì)在區(qū)域之間復(fù)制。
-
裝箱(Bin Packing)?- 裝箱是用箱子裝滿物品的過程,使箱子的利用率最大化。擴(kuò)展到Nomad,其中客戶端是“箱子”,物品是任務(wù)組。Nomad通過在客戶端機(jī)器上高效地裝箱任務(wù)來優(yōu)化資源。
高級(jí)概述
只觀察單個(gè)區(qū)域,在高層次上,Nomad是這樣的:
在每個(gè)區(qū)域內(nèi),我們都有客戶端和服務(wù)端。服務(wù)端負(fù)責(zé)接收用戶的作業(yè)、管理客戶端和計(jì)算任務(wù)分配。每個(gè)區(qū)域可能有來自多個(gè)數(shù)據(jù)中心的客戶端,允許少量服務(wù)器處理非常大的集群。
在某些情況下,為了獲得可用性或可伸縮性,您可能需要運(yùn)行多個(gè)區(qū)域。Nomad支持將多個(gè)區(qū)域聯(lián)合成一個(gè)集群。在高層次上,這個(gè)設(shè)置看起來是這樣的:
區(qū)域之間完全獨(dú)立,不共享工作、客戶端或狀態(tài)。它們使用gossip協(xié)議松散耦合,允許用戶向任何區(qū)域提交作業(yè)或透明地查詢?nèi)魏螀^(qū)域的狀態(tài)。請(qǐng)求被轉(zhuǎn)發(fā)到需要處理的適當(dāng)服務(wù)器并返回結(jié)果。數(shù)據(jù)不會(huì)在區(qū)域之間復(fù)制。
每個(gè)區(qū)域的服務(wù)端都是一個(gè)共識(shí)組的一部分。這意味著他們共同努力選出一個(gè)有額外職責(zé)的領(lǐng)導(dǎo)人。領(lǐng)導(dǎo)人負(fù)責(zé)處理所有查詢和事務(wù)。Nomad樂觀地認(rèn)為是并發(fā)的,這意味著所有的服務(wù)端都并行地參與調(diào)度決策。領(lǐng)導(dǎo)人提供必要的額外協(xié)調(diào),以確保安全完成調(diào)度,并確保客戶端沒有超額認(rèn)購(gòu)。
每個(gè)區(qū)域預(yù)計(jì)有三個(gè)或五個(gè)服務(wù)端。這就在出現(xiàn)故障時(shí)的可用性和性能之間取得了平衡,因?yàn)殡S著添加更多的服務(wù)器,共識(shí)變得越來越慢。但是,每個(gè)區(qū)域的客戶端數(shù)量沒有限制。
客戶端被配置為與其區(qū)域服務(wù)端通信,并使用遠(yuǎn)程過程調(diào)用(RPC)進(jìn)行通信,以注冊(cè)自己、發(fā)送心跳以獲取活性、等待新的分配以及更新分配狀態(tài)。客戶端向服務(wù)端注冊(cè),以提供可用的資源、屬性和已安裝的驅(qū)動(dòng)。服務(wù)端使用這些信息來調(diào)度決策,并創(chuàng)建分配來指派工作給客戶端。
用戶使用Nomad CLI或API向服務(wù)端提交作業(yè)。作業(yè)表示理想的狀態(tài),并提供應(yīng)該運(yùn)行的任務(wù)集。服務(wù)端負(fù)責(zé)調(diào)度任務(wù),這是通過為每個(gè)任務(wù)找到一個(gè)最佳位置來完成的,以便在滿足作業(yè)指定的所有約束的同時(shí)最大化資源利用率。裝箱能最大限度地利用資源,在裝箱過程中,調(diào)度盡量利用機(jī)器的所有資源,而不消耗任何維數(shù)。作業(yè)約束可用于確保應(yīng)用程序在適當(dāng)?shù)沫h(huán)境中運(yùn)行。約束可以是基于硬件特性(如gpu的體系結(jié)構(gòu)和可用性)的技術(shù)需求,也可以是操作系統(tǒng)和內(nèi)核版本等軟件特性,也可以是業(yè)務(wù)約束(如確保在適當(dāng)?shù)姆?wù)器上運(yùn)行符合PCI的工作負(fù)載)。
深入理解
本文簡(jiǎn)要概述了Nomad的體系結(jié)構(gòu)。每個(gè)子系統(tǒng)都有更多的詳細(xì)信息。共識(shí)協(xié)議、gossip協(xié)議和調(diào)度器設(shè)計(jì)都有更詳細(xì)的文檔說明。
要了解其他詳細(xì)信息,請(qǐng)查閱代碼、在IRC中詢問或訪問郵件列表。
總結(jié)
以上是生活随笔為你收集整理的Nomad技术手册:整体架构(Architecture)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot Admin 2.
- 下一篇: Nomad技术手册:共识协议(Conse