問題描述
在使用Table Store的過程中,偶爾會出現503錯誤,詳細錯誤資訊請參見下表。
HTTPStatus | ErrorCode | ErrorMsg |
503 | OTSPartitionUnavailable | The partition is not available. |
503 | OTSServerUnavailable | Server is not available. |
503 | OTSServerBusy | Server is busy. |
503 | OTSTimeout | Operation timeout. |
問題原因
Table Store使用的是共用儲存的機制,以資料分區為邏輯單位,因此在負載平衡的過程中不會有實際資料的遷移,只是資料表元資訊的變更。
在元資訊變更的過程中,為了保證資料的一致性,涉及到的資料分區會有短暫的不可用時間,正常情況下影響時間為百毫秒層級,在資料分區負載較大時可能會持續到秒層級,在這段時間內對該分區的讀寫操作有可能會出現上述的503錯誤。
解決方案
一般重試即可解決。
在Table StoreSDK中預設提供了一些重試策略,在初始化Client時可以指定重試策略。更多資訊,請參見初始化Client。同時,Table Store提供了標準Restful API協議,由於網路環境的不可控,所有的讀寫操作均建議增加重試策略,能夠對網路錯誤等有一定的容錯能力。
重要
批量讀寫操作BatchWriteRow和BatchGetRow讀寫的資料可能屬於多張表或者一張表的多個資料分區,有可能某一個分區正在分裂,所以整個操作是非原子性的,只能夠保證每個單行操作的原子性,該操作返回碼為200時,仍然需要檢查response中的getFailedRows()是否有失敗的單行操作。