2016-06-13 31 views
0

我們想知道是否有一種內置的方式來預熱服務,作爲服務結構中服務升級的一部分,類似於您可以預熱的各種方式,例如,基於IIS的應用程序池在被請求命中之前。理想情況下,我們希望單個服務在作爲其初始化的一部分(可能是緩存加載,恢復等)之前執行一些預熱任務,然後才能將其視爲已啓動並可供其他服務聯繫。此升級應該是升級域處理的一部分,因此升級過程應等待暖機完成,並將服務報告爲OK/Ready。服務結構升級時的熱身服務

其他人是如何處理這樣的場景的,控制向服務結構發信號通知特定服務已完全啓動並準備好與其他服務聯繫的進程?

回答

1

在衛生政策有這個概念:

HealthCheckWaitDurationSec等待的時間(秒)在升級上的升級域完成後,之前服務織物評估應用程序的運行狀況。這個持續時間也可以被認爲是應用程序在被視爲健康之前應該運行的時間。如果運行狀況檢查通過,則升級過程繼續到下一個升級域。如果運行狀況檢查失敗,Service Fabric將等待一段時間(UpgradeHealthCheckInterval),然後再次重新運行狀況檢查,直到達到HealthCheckRetryTimeout。默認值和推薦值是0秒。

Source

這是一個固定的觀望期,雖然。

您還可以發出健康事件yourself。例如,您可以在熱身時報告健康狀況「未知」。並調整您的健康政策(HealthCheckWaitDurationSec)來檢查這一點。

+0

感謝您的回覆@LoekD。我們已經嘗試了這一點,但升級過程從最初的升級域繼續進行,無論等待時間如何。從迄今爲止我們所閱讀的內容來看,似乎我們需要儘早發出未知健康事件,並在暖機完成後將其設置爲OK。 –

0

報告健康可以提供幫助。您無法報告未知,您必須儘早報告錯誤,然後在服務準備就緒時清除錯誤。警告並確定不影響升級。要清除錯誤,您的服務可以報告健康狀況Ok,RemoveWhenExpired = true,低TTL(請參閱how to report的更多信息)。

您必須根據最長預熱時間增加HealthCheckRetryTimeout。否則,如果執行運行狀況檢查並且羣集評估爲錯誤,則升級將失敗(並且根據您的策略回滾或暫停)。

所以,事件的順序是:

  • 您服務報告錯誤 -
  • 升級等待「正在預熱」固定HealthCheckWaitDurationSec(你可以將其設置爲最短時間熱身)
  • 升級會執行健康狀況檢查:如果服務尚未預熱,健康狀態爲錯誤,則升級將重試,直至達到HealthCheckRetryTimeout或您的服務不再處於錯誤狀態(預熱完成並且服務清除錯誤) 。
+0

對不起,@ oana-platon在這個球上丟球。我剛剛對此進行了測試,並且有一個可以延遲升級域進度的工作解決方案,直到服務進入正常狀態,由自定義運行狀況事件控制(請參閱https://github.com/enemaerke/servicefabric-upgradetests)。 –