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