HBAse-クライアント-再試行メカニズム
背景
HBAseは分散型データベースです
ダウンタイムが発生した場合、クライアントはデータの移行をどのように認識しますか?
データregion分裂に遭遇した場合、最新のデータregionをどのように識別するか
ネットワークジッタなどに遭遇してリクエストに失敗した場合、クライアントは失敗したリクエストをどのように処理しますか?
入手
まず、hbaseクライアントに再試行回数パラメータの設定があることを知っています.
reties=hbase.client.retries.number
また別の角度から(一方の方向が入手しにくい場合は、別の角度から入手してみます)
クラス名を見ても再試行をサポートするcallerであることがわかります
RpcRetryingCallerでretiesをどのように適用するかを具体的に見てみましょう
callWithRetriesメソッドで使用されていることがわかります(メソッド名から再試行専用のメソッドであることがわかります)
callWithRetriesコード説明
再試行ごとの間隔sleep時間
上のコードの
expectedSleep = callable.sleep(pause,tries);
callable.sleepメソッドの実装:
sleepは2つの部分を含み、第1の部分getPauseTime
配列の下に再試行回数と表示され、
1.N回目の再試行で対応する配列要素の数を見つけ、*pause
配列の役割:再試行回数の累積に伴い、間隔時間が長くなるべきである.常に高周波の再試行ではなく
2.ランダムな数値を追加し、すべての操作が同時に再試行されることを防止
このメソッドで使用される配列
HBAseは分散型データベースです
ダウンタイムが発生した場合、クライアントはデータの移行をどのように認識しますか?
データregion分裂に遭遇した場合、最新のデータregionをどのように識別するか
ネットワークジッタなどに遭遇してリクエストに失敗した場合、クライアントは失敗したリクエストをどのように処理しますか?
入手
まず、hbaseクライアントに再試行回数パラメータの設定があることを知っています.
hbase.client.retries.number
RpcRetryingCallerFactory
reties=hbase.client.retries.number
また別の角度から(一方の方向が入手しにくい場合は、別の角度から入手してみます)
HBase RPC caller RpcRetryingCaller
クラス名を見ても再試行をサポートするcallerであることがわかります
RpcRetryingCallerでretiesをどのように適用するかを具体的に見てみましょう
callWithRetriesメソッドで使用されていることがわかります(メソッド名から再試行専用のメソッドであることがわかります)
callWithRetriesコード説明
再試行ごとの間隔sleep時間
上のコードの
expectedSleep = callable.sleep(pause,tries);
callable.sleepメソッドの実装:
sleepは2つの部分を含み、第1の部分getPauseTime
配列の下に再試行回数と表示され、
1.N回目の再試行で対応する配列要素の数を見つけ、*pause
配列の役割:再試行回数の累積に伴い、間隔時間が長くなるべきである.常に高周波の再試行ではなく
2.ランダムな数値を追加し、すべての操作が同時に再試行されることを防止
このメソッドで使用される配列
/**
* Retrying we multiply hbase.client.pause setting by what we have in this array until we
* run out of array items. Retries beyond this use the last number in the array. So, for
* example, if hbase.client.pause is 1 second, and maximum retries count
* hbase.client.retries.number is 10, we will retry at the following intervals:
* 1, 2, 3, 5, 10, 20, 40, 100, 100, 100.
* With 100ms, a back-off of 200 means 20s
*/
public
static
final
int
RETRY_BACKOFF[] = {
1
,
2
,
3
,
5
,
10
,
20
,
40
,
100
,
100
,
100
,
100
,
200
,
200
};