我有一個基本上執行進程(而不是OS進程,只是需要完成的任務)的分佈式系統。經過幾次不成功的嘗試(超時)後,它會通知失敗。我應該使用簡單的延遲還是指數回退
我想繼續嘗試在後臺執行該過程,問題是:我應該使用更大的超時時間嗎?或者越來越大的超時(每次嘗試越來越大)
- 有一個過程失敗的原因很多,主要是網絡問題。
我有一個基本上執行進程(而不是OS進程,只是需要完成的任務)的分佈式系統。經過幾次不成功的嘗試(超時)後,它會通知失敗。我應該使用簡單的延遲還是指數回退
我想繼續嘗試在後臺執行該過程,問題是:我應該使用更大的超時時間嗎?或者越來越大的超時(每次嘗試越來越大)
這取決於第一次嘗試失敗的原因。
如果是由於某些資源可能超載/暫時耗盡,您可能需要嘗試一些exponential back off策略。原因是,不斷嘗試獲得你想要的東西可能會使事情變得更糟,因此可能永遠不會導致成功。
如果您基本上正在等待某些事情發生或可用,例如一個正在打開的端口或一個正在存在的文件(基本上是「輪詢」),您可能只想等待一段固定的時間。
這有點過於簡單,但可能會提供一些基本的想法。只要確保你徹底地測試你選擇的任何策略(或其組合),以確保它(顯然)實際上起作用並且不會惡化任何事情。
我認爲第一個選擇是更好的選擇,因爲如果你在每次嘗試時都會做的越來越大,那麼如果你在大約1小時的失敗後1分鐘開始下一次嘗試,也許在1天后。 。! 1-> 2, 2 -> 4, 4 -> 8, 8 -> 16..
我會採用第一種方法並定義合理的超時時間。
如果有很多原因,它會失敗,可能是看看重新設計流程,以使他們能夠一個選項,以繼續後出事了。
根據我簡化的邏輯,一個進程失敗的時間越長,它就越有可能在一段固定的時間內成功。 因此,您需要將其從一次重新發送到下一次。 反正這不正確嗎? – i3arnon
這取決於它一般實現的概率。例如,如果您正在等待某些任意條件變爲真,並且您知道這不受負載影響,則可以使用固定週期。然而,對於你的情況,有網絡問題等等,使用(指數式)增加等待時間可能會更好(所以不要讓事情變得更糟)。然而,正如我所說的,你真的想在實踐中進行測試(負載測試,拔掉電纜等) –