Storm DRPC

4583 ワード

DRPCの概要


DRPCは同時RPCアーキテクチャを実現するために実現され、DはDistributedであり、Storm分散、同時能力を利用してRPCの高性能を実現する.

DRPCアーキテクチャ


DRPCのアーキテクチャは以下の通りである.
  • クライアント:DRPCの呼び出しを開始するための
  • DRPC Server:クライアントとのドッキングを実現し、パラメータをStormに渡し、結果をクライアントに返す.
  • DPRCSpout:DRPC ServerとTopologyを接続し、パラメータをTopologyに渡します.
  • Topology:実際の関数機能を実現します.
  • ReturnResults:DRPCサーバとTopologyを接続し、DRPCサーバにパラメータを返します.プロセスの説明は次のとおりです.
  • クライアントは関数のパラメータをDRPC Server
  • に送信する
  • DRPC Serverは、要求ID、要求パラメータ、結果を返す情報を含む、関数呼び出しに関する情報をDRPC Spoutに送信する.
  • DRPC Spoutは、「id」、「request」をTopologyの最初のBoltに送信し、idは要求IDを表し、requestは要求パラメータを表す.
  • Topology最後のBoltは[id],[result]]をReturnResultsに送信し,idは要求IDを表し,resultは結果
  • を返す.
  • ReturnResults要求IDと結果をDRPCサーバ
  • に渡す
  • DRPC Serverは結果をDRPCクライアントに返します.


  • 注意:Topologyのemitのtupleで、最初のfieldは「id」で、値は要求IDでなければなりません.
    私たちはTopology部分を実現するだけでいいです.

    Storm DPRC APIの紹介


    まずDRPCクライアントのAPIを見てみましょう.
        DRPCClient client = new DRPCClient("drpc-host", 3772);
        String result = client.execute("reach", "http://twitter.com");

    まず、DRPCクライアントを表すDRPCClientオブジェクトを構築します.1番目のパラメータはホストアドレスで、2番目のパラメータはポート番号です.その後、このclientでexecute関数を呼び出し、リモートで関数を実行します.executeの最初のパラメータは関数名を表し、2番目のパラメータは関数パラメータです.
    DRPCサーバ側のAPIを見てみましょう.
    ローカルモードのDRPC:
        LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("exclamation");
        builder.addBolt(new ExclaimBolt(), 3);
    
        LocalDRPC drpc = new LocalDRPC();
        LocalCluster cluster = new LocalCluster();
    
        cluster.submitTopology("drpc-demo", conf, builder.createLocalTopology(drpc));
    
        System.out.println("Results for 'hello':" + drpc.execute("exclamation", "hello"));
    
        cluster.shutdown();
        drpc.shutdown();
  • LineardreDRPCTopologyBuilderは、関数の名前を指定するために使用されます.つまり、クライアントがexecuteを呼び出すときに指定した関数の名前です.builderでtopology
  • を構築する
  • LocalDRPCは、ローカルのDRPCサーバを構築するために使用されます.
  • LocalClusterローカルクラスタ
  • を構築するために使用
  • builder.createLocalTopology(drpc)では、StormにDRPCサーバの情報を知らせるDRPCサーバを指定する必要があります.

  • リモートモードのDRPC:
        StormSubmitter.submitTopology("exclamation-drpc", conf, builder.createRemoteTopology());

    リモートモードのDRPCとローカルモードのDRPCの違いは以下の点である.
  • リモートモードDRPCはDRPC Serverをシミュレートする必要はなく、実際のStormクラスタでDRPC Serverを構成することによって
  • を完了する.
  • リモートモードは、builderのcreateRemoteTopologyメソッドを呼び出すことによってtopologyを構築する.

  • Trident DRPC APIの紹介

  • Trident DRPCのクライアントは通常のStormのDRPCクライアントと同じ
  • である.
  • Trident DRPCサービス側API紹介
  •     TridentTopology topology = new TridentTopology();
        topology.newDRPCStream("words")
          .each(new Fields("args"), new Split(), new Fields("word"))
          .groupBy(new Fields("word"))
          .stateQuery(wordCounts, new Fields("word"), new MapGet(), new Fields("count"))
          .each(new Fields("count"), new FilterNull())
          .aggregate(new Fields("count"), new Sum(), new Fields("sum"));

    TridentTopologyでtopologyを構築し、newDRPCStreamを呼び出してDRPCストリームを構築します.パラメータは関数名です.後の内容は通常のTrident APIと同じです.