此文件說明一些關鍵概念和功能,這些概念和功能使 YARN 成為一級平台,以便原生支援 YARN 上的長期執行服務。
已實作一個容器協調架構,以協助在 YARN 上部署服務。簡而言之,此架構是一個 ApplicationMaster,它會根據使用者提供的服務定義,向 ResourceManager 要求容器,並根據配置政策在叢集上啟動容器。它還會執行所有繁重的任務,例如解析服務定義和組態、管理元件生命週期(例如自動重新啟動失敗的容器)、監控元件的正常運作和準備狀態、確保元件之間的依賴啟動順序、調整元件的數量、升級元件等。此架構的最終目標是確保服務已啟動並執行,並符合使用者的期望狀態。
此外,它還利用 YARN 核心中的許多功能來完成排程約束,例如親和性和反親和性排程、服務的記錄彙總、在容器失敗時自動重新啟動容器,以及執行容器的原地升級。
已開發一個 Restful API 伺服器,讓使用者可以使用簡單的 JSON 規格在 YARN 上部署/管理他們的服務。這讓使用者不必處理低階 API,不必撰寫複雜的程式碼,就能將他們的服務帶到 YARN 上。REST 層作為建立和管理 YARN 服務生命週期的統一 REST 入口。這裡的服務範圍從簡單的單元件應用程式到最複雜的多元件應用程式,需要特殊的協調需求。請參閱此 API 文件,以取得詳細的 API 文件。
API 伺服器是無狀態的,這表示使用者可以輕鬆地啟動多個執行個體,並讓負載平衡器在它們前面支援 HA、分配負載等。
實作 DNS 伺服器以透過標準機制:DNS 查詢,在 YARN 上發現服務。
架構會將容器資訊(例如主機名稱和 IP)張貼到 YARN 服務註冊表 中。而 DNS 伺服器基本上會透過將 YARN 服務註冊表中的資訊轉換成 DNS 記錄(例如 A 記錄和 SRV 記錄)來公開這些資訊。然後,客戶端可以透過標準 DNS 查詢來發現容器的 IP。
YARN 服務註冊表的先前讀取機制僅限於註冊表特定的 (java) API 和 REST 介面,而且難以連接現有的客戶端和服務。基於 DNS 的服務發現消除了這個差距。請參閱此 服務發現文件 以取得更多詳細資訊。