2013-05-18 44 views
4

當請求的操作導致數據庫死鎖時,服務器返回503 ("Service Unavailable")是否合適?爲了響應數據庫死鎖,返回HTTP 503是否合適?

這裏是我的推理:

眼見爲:

  • 它更容易讓客戶重複操作。
  • 無論如何他們需要能夠處理503 Service Unavailable
  • 數據庫死鎖相當罕見。

我傾向於這個解決方案。你怎麼看?

UPDATE:我認爲如果您願意,返回503 ("Service Unavailable")仍然可以接受,但我不再認爲這是技術上的要求。見https://stackoverflow.com/a/17960047/14731

+0

即使您在生產環境中對此進行編程,您仍可能會以超時結束,這會導致您的負載平衡代理向客戶端發送504。 –

+0

@agilevic,你是什麼意思?你是否說我需要確保按超時配置死鎖,以便使用較小的超時值來避免「HTTP 504」? – Gili

+0

數據庫死鎖的持續時間可能比負載均衡器的超時長,從而阻止響應。如果您能夠在超時之前檢測到死鎖,則可以使用503響應客戶端 - 一個明智的選擇。 –

回答

0

只要整個事務回滾或者請求是冪等的,我認爲它是好的。

1

我認爲語義上409衝突是一個更好的選擇 - 基本上如果你有一個死鎖有爭奪某些資源,所以操作無法完成。

現在根據死鎖的原因,如果第二次提交請求可能會失敗,但對於任何事情都是如此。

對於503客戶,由於系統速率有限,因此作爲客戶我會執行某種回退/斷路器操作,而409則與特定請求有關。