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