HBAse-クライアント-再試行メカニズム


背景
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 };