全部產品
Search
文件中心

Enterprise Distributed Application Service:無損上線HSF應用

更新時間:Dec 27, 2024

本文介紹在EDAS中如何無損上線HSF應用。

前提條件

  • 請確保您的EDAS Container版本為3.5.7及以上版本。如果您的EDAS Container版本低於3.5.7,請升級。具體操作,請參見升級或降級運行時環境
  • 請確保您的應用已經配置了健全狀態檢查URL。

    要實現HSF應用的無損上線,首先需要配置應用的健全狀態檢查URL,以便掛載應用啟動後自動執行的指令碼,告知EDAS應用何時啟動成功。

    EDAS預設不會開啟健全狀態檢查URL,需要在應用代碼中建立並配置對應的Controller。

    @RestController
    public class HealthCheckController {
    
        @RequestMapping("/health")
        public String healthCheck(){
            return "success";
        }
    
    }

    相比連接埠號碼健全狀態檢查,URL健全狀態檢查可以更加準確地反映出應用的健康情況。

    • 配置健全狀態檢查URL前。執行個體部署資訊-配置健全狀態檢查URL前
    • 配置健全狀態檢查URL後。執行個體部署資訊-配置健全狀態檢查URL後

背景資訊

在應用啟動過程中,服務會到註冊中心進行註冊,訂閱該服務的消費者在收到通知後則可以向服務提供者發起調用。由於應用啟動是一個持續進行的過程,在這個過程中,可能存在服務已經發布,但其依賴的組件(例如Redis或資料庫資源)未完成初始化的情況。如果此時有流量進入,會直接導致調用失敗。為了避免調用失敗的風險,可以使用HSF的無損上線功能。

HSF所有的ProviderBean在初始化階段都不會註冊到註冊中心,而是等Spring容器中所有Bean初始化成功並發出RefreshEvent事件後,再進行註冊。同時,Pandora會在所有服務註冊後設定status為true。 營運需要配合,在啟動app server(tomcat)後,啟動Web server前,發送curl localhost:12201/hsf/status命令來檢測服務是否初始化完畢,成功之後再啟動Web server(Apache/NGINX)。

為HSF應用配置延遲發布

  1. 登入EDAS控制台

  2. 在左側導覽列,單擊應用管理 > 應用列表

  3. 应用列表頁面選擇地區和所屬微服務空間,然後單擊需要無損上線的應用程式名稱。
  4. 在應用基本信息頁面的應用設定地區JVM參數右側單擊编辑
  5. 應用設定對話方塊單擊自訂,在自訂參數文字框中輸入-Dhsf.publish.delayed=true,然後單擊配置JVM參數
    配置延遲發布之後,HSF應用不會立刻發布,而是收到上線指令碼通知後才發布。
  6. 登入HSF應用部署的ECS執行個體進行驗證。
    1. 執行telnet localhost 12201登入ECS執行個體。
    2. 執行cd hsf進入HSF目錄。
    3. 執行ls查看服務的發布狀態。
      查看HSF服務發布狀態

掛載自動上線指令碼

  1. 登入EDAS控制台

  2. 在左側導覽列,單擊應用管理 > 應用列表

  3. 应用列表頁面選擇地區和所屬微服務空間,然後單擊需要無損上線的應用程式名稱。
  4. 在應用基本信息頁面的應用設定地區單擊掛載指令碼
  5. 掛載指令碼對話方塊單擊啟動後指令碼,輸入以下掛載指令碼。
    grep "PANDORA QOS PORT" /home/admin/edas-assist/edas-assist.pid | sed 's/\x0D$//' | awk -F":" '{ print "curl localhost:"$2"/hsf/online?k=hsf"}'| sh
    掛載指令碼說明:
    • edas-assist.pid檔案內容
      PID:19426
      HSF PORT:12200
      PANDORA QOS PORT:12203
      MONITOR PORT:8006
      CSP PORT:8719
    • /home/admin/edas-assist/edas-assist.pid為記錄Pandora Boot運行連接埠號碼的檔案。Pandora Boot連接埠號碼會在EDAS-Container啟動後隨機產生,一般為12201。當連接埠發生衝突時,會依次遞增。
    • curl localhost:"$2"/hsf/online?k=hsf命令用於執行上線操作,通知容器進行HSF服務發布,使用者也可以手動調用該命令。

結果驗證

驗證HSF應用無損上線包含QoS和日誌兩種方式。

  • QoS

    配置完指令碼以後,執行部署應用、重設等操作時,即可以實現HSF應用的無損上線。登入該應用部署的ECS執行個體,觀察服務的發布狀態。

    驗證HSF服務優雅上線-QoS
  • 日誌

    /home/admin/logs/hsf/hsf.log中觀察是否包含如下日誌。包含即代表HSF接收到了上線命令。

    01 2019-11-26 16:23:03.456 INFO [qos-worker-3-1:t.hsf] [38ef6d01-10a8-405d-8725-bd7bf121****] [] [] Receive online command.Do HSF online.