dubbo-基礎原語と配置解読


本文は主にdubboに関する基礎知識を紹介し、プロファイルの解読を紹介し、dubboのより良い理解、学習を助ける.
Overview
Architecture
  • Provider:サービスを暴露するサービスプロバイダ.
  • Consumer:リモート・サービスを呼び出すサービス・コンシューマ.
  • Registry:サービス登録と発見の登録センター.
  • Monitor:サービスのコールセカンダリとコール時間を統計するモニタセンター.
  • Container:サービス実行コンテナ.

  • Relations
    0.サービスコンテナは、サービスプロバイダの起動、ロード、実行を担当します.1.サービスプロバイダは起動時に、登録センターに自分が提供したサービスを登録する.2.サービス消費者は起動時に、登録センターに自分の必要なサービスを購読する.3.登録センターはサービスプロバイダのアドレスリストを消費者に返し、変更があれば、登録センターは長接続に基づいて変更データを消費者にプッシュする.4.サービス消費者は、プロバイダアドレスリストから、ソフトロード等化アルゴリズムに基づいて、1台のプロバイダを選択して呼び出し、呼び出しに失敗した場合、もう1台の呼び出しを選択する.5.サービス消費者とプロバイダは、メモリに呼び出し回数と呼び出し時間を累計し、毎分統計データを監視センタに送信する.6.登録センター、サービス提供者、サービス消費者の三者の間は長い接続であり、監視センターを除く.登録センターは、サービスプロバイダの存在を長い接続で感知する、サービスプロバイダがダウンタイムし、登録センターは直ちにイベントをプッシュして消費者8に通知する.登録センターとモニタセンターはすべてダウンタイムし、実行中のプロバイダと消費者に影響を与えず、消費者はローカルでプロバイダリストをキャッシュします.
    Invoker Procedures !important
    0.    Invoker Provider      Service   ,Invoker   Provider   Service    。
    1. Directory    Invoker,      List,  List    ,           ,          。
    2. Cluster Directory    Invoker     Invoker,     ,           ,     ,     。
    3. Router     Invoker          ,      ,     。
    4. LoadBalance     Invoker              ,             ,     ,    。
    
    

    Configuration Prorioty
    Service
    メソッドレベルが優先され、インタフェースレベルが次に、グローバル構成が再び行われます.レベルが同じであれば、消費者が優先し、提供者がそれに次ぐ.
    Basic
    JVM起動-Dパラメータを優先することで、起動時にプロトコルのポートを変更するなど、導入と起動時にパラメータの書き換えを行うことができます.XMLに次いで、XMLに構成があるとdubbo.propertiesの対応する構成項目が無効です.Properties最後に、デフォルト値に相当し、XMLのみが構成されていない場合、dubbo.propertiesの対応する構成項目は有効になります.通常、アプリケーション名などの共通構成を共有するために使用されます.
    Features
    Check on Start
    Dubbo                  ,         ,  Spring     ,     ,       ,  check=true。
    
    #    Spring       ,    API        ,   check,          ,
    #     ,  null  ,  check=false,       ,      ,     。
    
        check="false"    ,  ,   ,       ,         ,        。
    
    

    Fault Tolerance
    Failover Cluster # DEFAULT
          ,     ,       。(  )
           ,          。
       retries="2"       (     )。
    
    Failfast Cluster
        ,       ,      。
                ,      。
    
    Failsafe Cluster
        ,     ,    。
                 。
    
    Failback Cluster
          ,        ,    。
              。
    
    Forking Cluster
             ,         。
                   ,           。
       forks="2"        。
    
    Broadcast Cluster
             ,    ,         。(2.1.0    )
                             。
    
    

    importantはデフォルトでFailoverを使用していますが、私たちのシステムはこの方法を使用しています.実際には最大の再試行回数を2回制限する必要があります(一般的に1台が失敗するため、他のものも失敗します).
    #set max retry time 2
    "2" />
    OR:
    "2" />
    OR:
    
        "findFoo" retries="2" />
    
    
    

    Load Balancing
    importantソフト負荷等化アルゴリズムに基づく
    Random LoadBalance
      ,         。
                ,           ,               ,            。
    
    RoundRobin LoadBalance
      ,             。
                 ,  :       ,   ,             ,    ,             。
    
    LeastActive LoadBalance
           ,        ,           。
                ,                   。
    
    ConsistentHash LoadBalance
       Hash,                。
             ,           ,      ,        ,        。
        :http://en.wikipedia.org/wiki/Consistent_hashing。
             Hash,     ,   "hash.arguments" value="0,1" />
       160     ,     ,   "hash.nodes" value="320" /> 

    Thread Model
    イベント処理スレッドの説明
    0.               ,        IO  ,            ,    IO       ,          。
    1.            ,        IO  ,         ,         ,  IO    ,           。
    2.    IO      ,             IO  ,              ,  “      ”  ,      。
    
    

    Dispatcher #all default
    0. all            ,    ,  ,    ,    ,   。
    1. direct             ,   IO       。
    2. message               ,        ,     ,   IO     。
    3. execution            ,    ,           ,     ,   IO     。
    4. connection  IO   ,           ,      ,          。
    
    

    ThreadPool #fixed default
    0. fixed        ,       ,   ,    。(  )
    1. cached      ,         ,     。
    2. limited       ,               。(                    )。
    
    

    E.G
    "dubbo" dispatcher="all" threadpool="fixed" threads="100" />
    
    

    パラメータはiothread epollモデルを説明するのでCPUコア数+1
    threads intオプション100パフォーマンスチューニングサービススレッドプールサイズ(固定サイズ)2.0.5以上iothreads intオプションcpu個数+1パフォーマンスチューニングioスレッドプールサイズ(固定サイズ)2.0.5以上
    Multi-protocol
    異なるサービスは、大データ用短接続プロトコル、小データ大同時用長接続プロトコルなど、異なるプロトコルを性能的に適用して伝送される.我々のシステムはdubboプロトコルを用い,長接続プロトコル(伝送サイズに制限がある)に基づいている.大きなファイルであればRMIが使えます
    Multi-Registry,Multi-Group,Multi-Version,Group-Aggregation
    マニュアルを見ていますが、Group-Aggregationは面白いです.
    interface="com.xxx.MenuService" group="*">
        "getMenuItems" merger="mymerge" />  # :(      ,                ,                    ) interface="com.xxx.MenuService" group="*"> "getMenuItems" merger=".addAll" />  

    JSR303 based validation
    #interface
    
        javax.validation
        validation-api
        1.0.0.GA
    
    
    #implement
    
        org.hibernate
        hibernate-validator
        4.2.0.Final
    
    
    

    E.G
    "validationService" interface="com.alibaba.dubbo.examples.validation.api.ValidationService" validation="true" /> OR: interface="com.alibaba.dubbo.examples.validation.api.ValidationService" ref="validationService" validation="true" /> 

    Cache
    結果キャッシュは、人気データへのアクセス速度を速めるために使用され、Dubboは宣言キャッシュを提供し、ユーザーがキャッシュするワークロードを削減します.
    interface="com.foo.BarService">
        "findBar" cache="lru" />
    
    
    

    汎話引用、汎話実現
    POJOの代わりにMapを使用
    エコーテスト
    すべてのサービスは自動的にEchoServiceインタフェースを実現し、任意のサービス参照を強制的にEchoServiceに変換するだけで使用できます.
    MemberService memberService = ctx.getBean("memberService"); //       
    
    EchoService echoService = (EchoService) memberService; //      EchoService
    
    String status = echoService.$echo("OK"); //         

    サービスコンテキストと暗黙的なパラメータ、AppContextはこの実装に基づいて
    スキーマ#スキーマ#
    すべての構成情報はURLのパラメータに変換され、文字列プロトコルでHTTP HEADER転送と類似しています.
    RpcContextはThreadLocalの一時状態レコーダであり、RPC要求を受信したり、RPC要求を開始したりすると、RpcContextの状態が変化する.
    RpcContext.getContext()
    
    

    非同期呼び出し、ローカル呼び出しbased on injvm
    フローチャート
    パラメータコールバック、ローカルルート
    パラメータコールバック方式は、ローカルcallbackまたはlistenerを呼び出すのと同じで、Springのプロファイルでどのパラメータがcallbackタイプであるかを宣言するだけでよい.Dubboは、長接続に基づいて逆プロキシを生成し、サーバ側からクライアントロジックを呼び出すことができる.
    コードを渡すのではなく
    どちらかというと、応用するシーンは思いもよらなかった
    service:
    "callbackService" class="com.callback.impl.CallbackServiceImpl" />
    interface="com.callback.CallbackService" ref="callbackService" connections="1" callbacks="1000"> "addListener"> "1" callback="true" />     consumer: "callbackService" interface="com.callback.CallbackService" /> 
    callbackService.addListener("http://10.20.160.198/wiki/display/dubbo/foo.bar", new CallbackListener(){
        public void changed(String msg) { System.out.println("callback1:" + msg); } }); 

    ちえんばくろ
    露出時間について
    !importantはSpringが解析されると、サービスが外部に露出し、Springは他のBeanを初期化します.
    1.                applicationContext.getBean()   ,    IoC       Spring Bean。
    2.       getBean(),   Dubbo     Spring     。
    3.           ,    , Dubbo Spring       ,     。
    4.       getBean(),      Spring         ,   Dubbo        Spring  。
    
    

    Shutdown
    サービスプロバイダが停止した場合、新しいリクエストを受信しないとマークし、新しいリクエストが来たときに直接エラーを報告し、クライアントに他のマシンを再試行させる.次に、スレッドプール内のスレッドが実行されているかどうかを検出し、タイムアウトしない限り、すべてのスレッドの実行が完了するまで待機します.
    サービス消費者が停止すると、新しい呼び出し要求は開始されず、すべての新しい呼び出しはクライアントでエラーが発生します.その後、リクエストの有無を検出した応答はまだ返されず、タイムアウトしない限り強制的に閉じられます.
    DubboはJDKのShutdownHookでエレガントダウンを完了しているので、ユーザーが「kill-9 PID」などの強制クローズコマンドを使用すると、エレガントダウンは実行されず、「kill PID」を通過した場合にのみ実行されます.
    私たちのシステムではKill-9で実行されています
    Container
    サービスコンテナはstandaloneの起動プログラムであり、バックグラウンドサービスはTomcatやJBossなどのWebコンテナの機能を必要としないため、無理にWebコンテナでサービスプロバイダをロードし、複雑さを増やし、リソースを浪費する.サービスコンテナは単純なMainメソッドにすぎず,サービスを暴露するための単純なSpringコンテナをロードする
    Spring Container
        META-INF/spring      Spring  。
      :(  java  -D    dubbo.properties )
    dubbo.spring.config=classpath*:META-INF/spring/*.xml ----  spring      
    
    Jetty Container
          Jetty,      。
      :(  java  -D    dubbo.properties )
    dubbo.jetty.port=8080 ----  jetty    
    dubbo.jetty.directory=/foo/bar ----     jetty       ,        
    dubbo.jetty.page=log,status,system ----       ,        
    
    Log4j Container
        log4j   ,       ,             。
      :(  java  -D    dubbo.properties )
    dubbo.log4j.file=/foo/bar.log ----        
    dubbo.log4j.level=WARN ----      
    dubbo.log4j.subdirectory=20880 ----       ,       ,