RedissonLock分散ロック

1526 ワード

  • の一般的な分散ロックは、簡単なluaスクリプトに依存する.しかし、欠点はredis単点故障問題が解決できないことである.プライマリ・スレーブ・アーキテクチャがプライマリ・フックを保証することができない場合、プライマリ・スレーブは完全に同期された
  • である.
  • 実行時間はロックの期限切れ時間を超えた.ドアマンドッグタイマーを起動し、継続期間を停止する必要があります.現在のスレッドの未処理が完了するまで分散ロックが無効にならないことを保証するために
  • .
  • redis単一障害の問題を解決するために、ここではredissionLockを導入した.主従関係のないいくつかのredisノード
  • に依存する
  • Redlockの実現は以下の通りである:
    1、      
    
    2、    N     。             。      ,                  ,               :
                    500ms;
                   1ms,                499ms;
                   2ms,                497ms;
                    0 ,             ,      。
    
    3、         。  client          (N/2 + 1)    ,              0 ,      ,    。      。
    
    4、    ,            ;                 ,               
    
    
  • 分布式ロックのピット
    1、    
       1)       。  redlock          ,  N master  ,       ,      ,      。         ,              ,    TTL >       +      
       2)          ,       ;                  ;     
                   ,                  
    
    2、         client             ;          ,  client         ,               ;      ;     ,                ,               
    
    3、     
         redis    A B C D  E     
             ABC       ;   C  
             DE   ;  C             CDE       
                        
       
           :    (        )            
    
    4、          TTL
    
    Client1    ;
    Client1    ,     STW GC,           ;
    Client2     ,     ;
    Client1 GC  ,    ,    Client1 Client2         ,      ,      。
    
                   TTL,         ,     watchdog,watchdog        ,                  
    
    
    5、