天池第4回中間部品試合第1題現地開発環境構築ノート


引用する


阿里天池の第4回中間試合に参加して、公式の与えた環境はドキュメントを構築してあいまいで、仕方なく自分で公式の与えた評価スクリプトのソースコードを読むしかなくて、それから自分の地元で1つの差の少ない環境を振り回して、開発とdebugを便利にして、過程は以下のように記録します.私のローカル環境はWin 10で、IDEはIntelliJです.この文章の目標は、ローカルで公式のagent-demoを開通させ、ソースレベルでdebugを行うことです.本明細書のJVM起動パラメータは、ローカルメモリリソースが限られている可能性があるため、必要に応じて自分で調整できる公式の評価スクリプトから抜粋されています.(本稿では、公式のJVMパラメータに従って、公式のJVMパラメータに従って合計14 Gメモリが必要な場合、ほとんどのノートパソコンは耐えられない可能性がありますので、自分のパソコンのメモリサイズに応じて小さくしたほうがいいです)

全体的な考え方.

  • windows版etcdをインストールします.
  • pythonスクリプト起動consumerと3つのprovider(java -jarを介して)がjarパッケージを直接起動し、jarパッケージは公式に与えられたconsumerとproviderの例から来ている.
  • はIntelliJにおいて異なる起動パラメータ(それぞれ1つのconsumer-agentとprovider-agent)を構成する.
  • Postmanを使用してコードが通じるかどうかをテストします.
  • wrkを用いて公式の四輪圧力測定をシミュレートした.

  • 最初のステップはwindows版のetcdをインストールして起動します


    この一歩はあまり言わないで、直接行きます.https://github.com/coreos/etcd/releasesダウンロードして解凍すればいいです.ビジュアル化管理インタフェース:etcd-browserをもう1つインストールすることをお勧めします.インストールが完了したらetcdを実行

    Consumerと3つのProviderの起動


    公式に与えられたJVMパラメータとjarパッケージに従ってConsumerとProviderをそれぞれ起動する起動スクリプトを書きました.githubのアドレスは以下の通りです.https://github.com/DQinYuan/boot_p_cgithubの説明に従って使えばいいです.

    IntelliJで異なる起動パラメータを設定する


    IntelliJでagent-demoプロジェクトを公式に開き、実行パラメータ構成ウィンドウを以下のように開きます.
    次に、次のように4つのSpringBootの起動項目を追加します.
    次に、次のように構成する必要があります.
    まずイメージの生き生きとした名前が必要です.私はこの4つのagentをそれぞれconsumerと呼んでいます.agent,small_provider_agent,medium_provider_Agentとlarge_provider_agent.
    そしてこの4つの起動項目の最大の違いは実はVM optionsで、私は公式の評価スクリプトから4つのJVMの起動パラメータを抽出してそれぞれ以下のようにして、直接それぞれ過去をコピーすればいいです.
    JVM起動パラメータ
    consumer_agent
    -Xms1536M -Xmx1536M -Dtype=consumer -Dserver.port=20000 -Detcd.url=http://127.0.0.1:2379
    small_provider_agent
    -Xms512M -Xmx512M -Dtype=provider -Dserver.port=30000 -Ddubbo.protocol.port=20889 -Detcd.url=http://127.0.0.1:2379
    medium_provider_agent
    -Xms1536M -Xmx1536M -Dtype=provider -Dserver.port=30001 -Ddubbo.protocol.port=20890 -Detcd.url=http://127.0.0.1:2379
    large_provider_agent
    -Xms2560M -Xmx2560M -Dtype=provider -Dserver.port=30002 -Ddubbo.protocol.port=20891 -Detcd.url=http://127.0.0.1:2379
    その後、自分の必要に応じていくつかまたは全部実行したり、debugモードで実行したりして、ソースコード上でdebugを容易に行うことができます.

    Postmanを使用してコードが通じるかどうかをテストします


    Postmanはhttpリクエストをシミュレートするツールで、ダウンロードアドレスは以下の通りです.https://www.getpostman.com/apps
    この呼び出しプロセス全体が正しく行われるかどうかをPostmanで測定します.
    consumerは呼び出しプロセス全体の開始であり、公式のconsumerの例のエントリは次のとおりです.
    http://localhost:8087/invoke

    このアドレスをPostmanでリクエストしてみます.
    公式のagent-demoに何の変更もしていない場合は、次のように戻ります.
    サーバに500エラーが発生し、IntelJを開くとconsumerが表示されます.Agentは次のエラーを報告します.
    興味があればdebugモードでブレークポイントを使ってconsumerに入ることができます.agent見て、私はここで直接あなたにこの間違いを修正する方法を教えます.com.alibaba.dubbo.performance.demo.agent.HelloControllerの84行目あたりのコードをString s = new String(bytes);からString s = new String(bytes).trim();に変更し、以下の図に示す.
    consumerを再実行Agent,Postmanシミュレーションリクエストで,やはりエラーが修正された.

    wrkで公式の四輪評価をシミュレートする


    wrkはwindowsバージョンがなくて、比較的に仕方がなくて、ここは別のlinux機械あるいは仮想機しか使えなくて、もし別のlinux機械を使ってローカルコードを圧測するならば、ローカルWin 10のファイアウォールを閉じて、さもなくば要求はすべて壁に住まれることを覚えています.
    まずlinuxマシンにwrkをインストールしますが、これはあまり言いません.
    公式に与えられた評価スクリプト(benchmarker)のbenchmarker\workflow\benchmarkディレクトリの下にwrk.luaというファイルがあり、このファイルをlinuxマシンにコピーし、このファイルが存在するディレクトリの下で以下のコマンドを実行して4回のテストを行います(パラメータは公式に与えられたスクリプトと要求に従います):
    第1ラウンド(予熱):
    wrk -t2 -c512 -d30s -T5 \
            --script=./wrk.lua \
            --latency http://192.168.3.12:8087/invoke

    第2ラウンド:
    wrk -t2 -c128 -d60s -T5 \
            --script=./wrk.lua \
            --latency http://192.168.3.12:8087/invoke

    第3ラウンド:
    wrk -t2 -c256 -d60s -T5 \
            --script=./wrk.lua \
            --latency http://192.168.3.12:8087/invoke

    第4ラウンド:
    wrk -t2 -c512 -d60s -T5 \
            --script=./wrk.lua \
            --latency http://192.168.3.12:8087/invoke

    注意その中の192.168.3.12はconsumerがいる機械の住所で、ここでは自分の機械の住所に変更します.

    END


    試合問題に関するいくつかの情報の総括


    以下のいくつかの内容は本稿のテーマとは関係なく、いくつかの試合問題情報の総括を行うだけです.

    ポート使用量の概要


    providerとconsumerの固定占有ポート
    使用ポート/用途
    consumer
    8087/httpリクエストエントリ
    small_provider
    20889/dubbo呼び出しインタフェース
    medium_provider
    20890/dubbo呼び出しインタフェース
    large_provider
    20991/dubbo呼び出しインタフェース
    公式のagent_demoが占有するポート
    使用ポート/用途
    consumer_agent
    20000/httpリクエストエントリ
    small_provider_agent
    30000/httpリクエストエントリ
    medium_provider_agent
    30001/httpリクエストエントリ
    large_provider_agent
    3002/httpリクエストエントリ

    公式Agent-Demoコードフロー分析


    図中、C−AgentはConsumer Agent、P−AgentはProvider Agentを示す.図の前半はRPC呼び出し全体の流れであり、後半はP-AgentとProvider間のNetty通信プロセスを具体的に描いている.