本文介紹在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.