使用應用程式的存活性及就緒探測
使用 Code Engine,您可以設定性能檢查,以使用存活性及就緒探測來提高應用程式的穩健性。 您可以配置 Code Engine,以在建立或更新應用程式時使用這些探測器。
何謂存活性及就緒探測?
使用存活性及就緒探測,以檢查您的應用程式是否 作用中,並 備妥 以回應要求及提供資料流量。
- 活性探測
-
存活性探測會定期檢查應用程式是否可運作 (或作用中),並可回應送入的要求。 您可以使用存活性探測來檢查應用程式是否回應送入的要求,或應用程式是否處於需要系統停止實例並啟動新實例的狀況。 如果存活性探測失敗,則會重新啟動應用程式實例。 如果存活性探測成功,則應用程式實例可運作。 例如,您可能具有單一執行緒 Node.js 應用程式,其中程式碼停留在無窮迴圈中,這會阻止應用程式回應要求。 存活性探測可以偵測此案例並重新啟動實例。 依預設不會自動設定存活性探測。 您可以使用 存活性探測內容 來配置存活性探測。
- 就緒探測
-
就緒探測會定期檢查應用程式是否已準備好接收資料流量。 您可以使用就緒探測,從負載平衡暫時移除應用程式實例。 如果就緒性探測失敗,則在就緒性探測再次成功之前,應用程式實例無法接收更多要求。 例如,考量應用程式能夠處理要求的情況,例如當存活性探測傳回成功時。 不過,您的應用程式可能具有其他必要條件,然後才能提供預期的使用者工作負載。 您的應用程式可能需要先建立後端的工作中連線,然後應用程式才能回應使用者要求。 此實務範例需要不同類型的檢查,因為應用程式的狀態被視為可回復。 假設您的應用程式修訂實例處於作用中狀態一段時間; 不過,資料庫連線非預期地結束。 應用程式實例需要重新連接至資料庫。 應用程式實例處於
not ready狀態,因為它使就緒性探測要求失敗。 因此,就緒探測會指示負載平衡器暫時停止將要求傳送至該應用程式實例。 當資料庫連線回復時,就緒性探測會成功,且資料流量會再次開始遞送至應用程式實例。依預設,每個應用程式都具有已定義類型為
tcp的就緒探測,且此探測會檢查應用程式的已配置接聽埠是否已開啟。 當此就緒性檢查順利完成時,應用程式會處於備妥狀態。 您可以使用 就緒性探測內容 來進一步自訂就緒性探測。
存活性和就緒探測彼此獨立運作。
如果您同時配置存活性及就緒探針,則在啟動應用程式實例期間,存活性探針不會等待來自就緒探針的第一個成功回應。 如果您同時配置存活性及就緒性探測,且想要在傳送就緒性探測要求之前等待來自存活性探測的成功回應,則可以使用起始延遲內容,將第一個存活性探測要求延遲指定的秒數。
為何在我的應用程式中使用存活性及就緒探測?
當您在 Code Engine 應用程式中實作探測器時,存活性及就緒性探測器可讓您更精細地控制執行中應用程式,以檢查應用程式的 作用中 及 備妥 狀況。
例如,您的應用程式可能會有啟動延遲的情形。 應用程式進程可能會在應用程式完全準備好之前開始,這可能會影響回應,尤其是當應用程式跨多個實例擴展時。 透過將存活性及就緒探測設為性能檢查,您可以讓 Code Engine 知道您的應用程式是否在執行中並準備好接收要求及處理資料流量。 透過設定這些探測器,您還可以幫助防止在執行應用程式滾動更新時發生停機。
存活性及就緒探測適用於應用程式實例。 系統會探測應用程式的每一個實例。
存活性和就緒探測有不同的用途。
-
您可以使用 活性探測 來觸發應用程式實例重新啟動,這基本上會停止現行應用程式實例並啟動新的實例。 針對應用程式無法從內部失敗回復且需要重新啟動應用程式的狀況使用此探測。
-
相反地,如果 就緒探測 失敗,此探測會導致 Code Engine 暫時停止將要求遞送至應用程式實例,直到實例回復為止。 當您的應用程式遇到可回復而無需重新啟動實例的問題時,就緒探測非常有用。 在回復期間,應用程式無法處理使用者要求。 當就緒性探測成功時,實例可以重新處理使用者要求。
在程式碼中實作就緒或存活性探測
在 Code Engine中配置就緒或存活性探測之前,您必須先在 Code Engine 應用程式所參照的原始碼映像檔內實作探測。
如果您未在程式碼中先實作探測,則您在 Code Engine 中配置的探測一律會失敗,這會導致應用程式失敗。
當您在程式碼中實作就緒或存活性探測時,請考量下列要點。
-
決定要用於就緒或存活性探測的連線類型。 您可以指定
HTTP或TCP類型的探測。HTTP類型的探測器提供端點,可透過 HTTP GET 方法傳回探測器狀態。 如果探測在逾時限制內回應,且 HTTP 回覆碼大於或等於 200,但小於 400,則此類型的探測視為成功。 任何超出此範圍的值都會被視為探測失敗。TCP類型的探測器只會檢查埠是否已開啟。 如果埠已開啟,則此類型的探測視為成功。 如果埠未開啟,則會將此探測類型視為失敗。
-
判斷原始碼回應探測的埠。
- 一般而言,如果您的應用程式原始碼只開啟一個埠,就緒或存活性探測的埠配置通常與 Code Engine 應用程式的已配置接聽埠值相同。 如果您將 Code Engine 中的就緒或存活性探測埠設為
0,則探測的埠會預設為應用程式的已配置接聽埠。 - 如果您的應用程式原始碼同時在多個埠上接聽,則可以在原始碼中使用不同的埠來回應就緒或存活性探測要求。 在此情況下,當您在 Code Engine中配置就緒或存活性探測配置時,必須為探測指定正確的埠。
- 一般而言,如果您的應用程式原始碼只開啟一個埠,就緒或存活性探測的埠配置通常與 Code Engine 應用程式的已配置接聽埠值相同。 如果您將 Code Engine 中的就緒或存活性探測埠設為
-
因為探測器判定應用程式實例是否可用於處理要求,所以請確保您的程式碼快速回應探測器要求。
-
請確定您的程式碼安全地處理 SIGTERM 信號。 當存活性探測失敗時,會傳送 SIGTERM 信號,且您的程式碼必須處理此信號,以避免應用程式實例無回應。 請參閱 為何我的應用程式實例沒有如預期般縮減?
在 Code Engine 中配置存活性及就緒探測
您可以使用存活性及就緒探測作為應用程式的性能檢查。 您可以自訂就緒探測 (依預設設定),並選擇性地配置存活性探測。 當實例執行時,存活性及就緒性探測會以配置的間隔傳送至應用程式實例。
在配置存活性探測或自訂 Code Engine 應用程式的就緒探測之前,您必須先在程式碼內實作探測; 否則應用程式可能會失敗。
存活性及就緒探測的內容
下表彙總與應用程式的存活性及就緒探測搭配使用的內容。
| 內容 | 說明 |
|---|---|
| 類型 | 探測器執行的檢查類型。 有效值為 tcp 和 http。 此內容是必要項目。 |
| 路徑 | 應用程式的 HTTP 要求路徑。 只有在類型為 http 時,才需要此內容。 |
| 埠 | 探測器所連接的埠。 如果設為 0,探測器的埠會預設為應用程式的已配置接聽埠。 |
| 間隔 | 探測請求之間的時間間隔(以秒為單位)。 |
| 起始延遲 | 執行第一次活性探測檢查之前等待的時間(以秒為單位)。 |
| 逾時 | 探測器在超時並被視為失敗之前等待應用程式回應的時間(以秒為單位)。 |
| 失敗臨界值 | 將探測視為失敗的連續不成功檢查次數。 |
從主控台配置探測器
在 Code Engine 應用程式所參照的程式碼映像檔中實作探測器之後,您可以從主控台配置存活性及就緒探測,以在應用程式上執行性能檢查。
開始之前
-
在程式碼中實作探測器。(在 Code Engine之外)
-
建立專案。(來自 Code Engine)
- 從 Code Engine 專案頁面,移至您的專案。
- 建立應用程式。 例如,建立一個稱為
myapp的應用程式,以使用icr.io/codeengine/helloworld映像檔。 此映像檔可從 Samples for IBM Cloud Code Engine GitHub 儲存庫取得。 您可以在建立應用程式時配置存活性及就緒探測。 或者,當您從應用程式頁面上的 配置 > 映像檔啟動選項 標籤更新應用程式時,您可以檢視及更新存活性及就緒性探針的設定。 - 若要檢視應用程式的已配置探測器及其內容,請跳至應用程式頁面上的 配置 > 映像檔啟動選項 標籤。
- 從 映像檔啟動選項 標籤中編輯存活性及就緒性探測設定。 修改探測器會建立新的應用程式修訂。 例如,編輯預設就緒探測,以將連線類型從 TCP 變更為 HTTP,並將就緒探測的路徑設為
/readinessprobe。 如需探測器內容的相關資訊,請參閱 內容。 完成後點選 “完成”。 - 按一下 部署,以儲存您的變更,並使用已配置的探測設定來部署應用程式修訂。
使用 實例 標籤上的視圖來檢查應用程式實例。
使用 CLI 配置探測器
您可以使用 Code Engine CLI 來處理存活性及就緒探測。 在 ibmcloud ce app create 或 ibmcloud ce app update 指令中指定 --probe-live 或 --probe-ready 選項,以配置您想要的探測器。
如需您可以使用就緒或存活性探測來配置之內容的相關資訊,請參閱 存活性及就緒探測內容。
開始之前
-
在程式碼中實作探測器。 在程式碼中實作探測 (在 Code Engine之外) 之後,您可以配置 Code Engine 應用程式以使用探測。
-
從 Code Engine:
- 設定 Code Engine CLI 環境。
- 建立專案。
-
使用
ibmcloud ce application create指令建立應用程式。 在下列範例中,使用myapp作為應用程式的名稱,並指定icr.io/codeengine/helloworld作為要參照的映像檔。ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld -
執行
application get指令,以顯示應用程式的詳細資料。 請注意,依預設已配置就緒性探測。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: tcpsocket Port: 0 [...] -
使用
ibmcloud ce application update指令更新myapp應用程式,以配置存活性探測。 例如,指定--probe-live選項以配置 HTTP 類型的存活性探測,以便連線使用埠 8080,且所參照程式碼映像檔 * * 的起始目錄路徑為/。當您在
application create或application update指令上配置就緒或存活性探測的內容時,必須在您設定的每一個內容之前提供選項--probe-live或--probe-ready。ibmcloud ce application update --name myapp --probe-live type=http --probe-live path=/ --probe-live port=8080 -
執行
application get指令,以顯示已更新myapp應用程式的詳細資料。 詳細資料包括已配置存活性探測的相關資訊。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 10 Timeout: 1 FailureThreshold: 1 Readiness Probe: Type: tcpsocket Port: 0 [...]
既然您已同時為 myapp 應用程式配置存活性及備妥性探測,系統會根據它們的配置持續執行這兩個探測。
在 Code Engine 中檢視探測設定
您可以從主控台並使用 CLI 來檢視 Code Engine 中設定的存活性及就緒探測的相關資訊。
從主控台檢視探測設定
若要在主控台中檢視已配置的存活性及就緒探測的相關詳細資料,請跳至應用程式頁面上的 配置 > 映像檔啟動選項 標籤。
使用 CLI 檢視探測設定
若要使用 CLI 來檢視應用程式的相關詳細資料 (包括已配置的存活性及就緒探測的相關資訊),請執行 application get 指令。
ibmcloud ce application get --name myapp
輸出範例
[...]
OK
Name: myapp
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
[...]
Liveness Probe:
Type: httpget
Path: /
Port: 8080
Interval: 10
Timeout: 1
FailureThreshold: 1
Readiness Probe:
Type: tcpsocket
Port: 0
[...]
更新探測器
您可以修改應用程式的活性及就緒探測的內容。 當您更新探測器的內容時,會建立新的應用程式修訂。當實例執行時,活性及就緒探測會以配置的間隔傳送至應用程式實例。
從控制台更新探針
您可以從應用程式頁面上的 配置 > 映像檔啟動選項 標籤,在主控台中修改或編輯就緒或存活性探測。
- 前往您的申請頁面。 導覽至應用程式頁面的一種方式是
- 找出 Code Engine 專案頁面。
- 按一下專案名稱,以開啟「概觀」頁面。
- 點擊 “應用程式” 以開啟應用程式清單。 按一下應用程式的名稱,以開啟其應用程式頁面。
- 從應用程式頁面中,按一下應用程式頁面上的 配置 > 映像檔啟動選項 標籤。
- 從 映像檔啟動選項 標籤中編輯存活性及就緒性探測設定。 修改探測器會建立新的應用程式修訂。 按一下 編輯,以修改您要變更的就緒或存活性探測。
- 從「就緒探測」頁面或「存活性探測」頁面中,更新探測的 內容。 完成後點選 “完成”。
- 按一下 部署,以儲存您的變更,並使用已配置的探測設定來部署應用程式修訂。
使用 實例 標籤上的視圖來檢查應用程式實例。
使用 CLI 更新探針
假設您想要更新 myapp 的存活性探測,以便連線類型為 HTTP,失敗臨界值為 3,且探測要求之間的間隔為 5 秒。
-
使用
ibmcloud ce application update指令更新myapp應用程式,以更新存活性探測,使連線類型為 HTTP,失敗臨界值為 3,探測要求之間的間隔為 5 秒。當您在
application create或application update指令上配置就緒或存活性探測的內容時,必須在您設定的每一個內容之前提供選項--probe-live或--probe-ready。ibmcloud ce application update --name myapp --probe-live type=http --probe-live interval=5 --probe-live failure-threshold=3 -
執行
application get指令,以顯示已更新myapp應用程式的詳細資料。 詳細資料包括存活性探測之現行配置的相關資訊。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 Readiness Probe: Type: tcpsocket Port: 0 [...] -
使用
ibmcloud ce application update指令更新myapp應用程式,以更新就緒性探測,讓連線類型為 HTTP、埠為 8080、失敗臨界值為 3,且探測要求之間的間隔為 5 秒。當您在
application create或application update指令上配置就緒或存活性探測的內容時,必須在您設定的每一個內容之前提供選項--probe-live或--probe-ready。ibmcloud ce application update --name myapp --probe-ready type=http --probe-ready port=8080 --probe-ready interval=5 --probe-ready failure-threshold=3 -
執行
application get指令,以顯示已更新myapp應用程式的詳細資料。 詳細資料包括就緒性探測之已更新設定的相關資訊。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Liveness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 Readiness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 [...]
刪除探測器
您可以移除 (刪除) 活性探測。 不過,由於依預設一律會設定就緒性探測,因此您只能編輯以更新就緒性探測的內容。
從主控台刪除探測器
從主控台中,您可以從應用程式頁面上的 配置 > 映像檔啟動選項 標籤中移除存活性探測。
- 前往您的申請頁面。 導覽至應用程式頁面的一種方式是
- 找出 Code Engine 專案頁面。
- 按一下專案名稱,以開啟「概觀」頁面。
- 點擊 “應用程式” 以開啟應用程式清單。 按一下應用程式的名稱,以開啟其應用程式頁面。
- 從應用程式頁面中,按一下 配置 標籤,然後按一下應用程式頁面上的 映像檔啟動選項 標籤。
- 若要移除存活性探測,您必須建立新的應用程式修訂。
- 按一下 刪除 以移除存活性探測。
- 按一下 部署,以儲存變更並部署應用程式修訂。
雖然您無法刪除就緒性探測,但可以 更新 它。
使用 CLI 刪除探測器
-
若要移除存活性探測,請使用
ibmcloud ce application update指令搭配--probe-live-clear選項來更新myapp應用程式。ibmcloud ce application update --name myapp --probe-live-clear -
執行
application get指令,以顯示已更新myapp應用程式的詳細資料。 已刪除存活性探測。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: httpget Path: / Port: 8080 Interval: 5 Timeout: 1 FailureThreshold: 3 [...] -
若要將就緒探測重設為預設配置,請使用
ibmcloud ce application update指令與--probe-ready-reset選項來更新myapp應用程式。ibmcloud ce application update --name myapp --probe-ready-reset -
執行
application get指令,以顯示已更新myapp應用程式的詳細資料。 就緒性探測會重設為預設配置。ibmcloud ce application get --name myapp輸出範例
[...] OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject [...] Readiness Probe: Type: tcpsocket Port: 0 [...]