天池第四届中间件比赛第一题本地开发环境搭建笔记

引言


参加了阿里天池第四届中间比赛,官方给的环境搭建文档含糊不清,无奈只能自己去读官方给的测评脚本的源码,然后在自己本地折腾一个差不多的环境,方便开发与debug,过程记录如下。我的本地环境为Win10,用的IDE是IntelliJ。这篇文章的目标是在本地将官方的agent-demo跑通并且可以在源码级别进行debug。本文的JVM启动参数都是从官方的测评脚本中摘录,鉴于本地内存资源可能有限,可以根据需要自行调节。(本文是按照官方给JVM参数,如果按照官方的JVM参数总计需要14G内存,大多数笔记本电脑可能吃不消,所以大家最好根据自己电脑的内存大小调小些)。

总体思路


  1. 安装windows版etcd;
  2. 写一个python脚本启动consumer和三个provider(通过java -jar)直接启动他们的jar包,jar包来自于官方给的consumer和provider示例;
  3. 在IntelliJ中配置不同的启动参数(分别是一个consumer-agent与provider-agent);
  4. 使用Postman进行测试代码是否跑通;
  5. 使用wrk模拟官方的四轮压测;

第一步 安装windows版的etcd并且启动


这一步就不多说了,直接去https://github.com/coreos/etcd/releases下载解压即可。建议再安装一个可视化管理界面:etcd-browser
安装完成后运行etcd

启动Consumer和三个Provider


我写了一个的启动脚本,脚本按照官方给的JVM参数和jar包分别启动Consumer和Provider,在github的地址如下:https://github.com/DQinYuan/boot_p_c
按照github上给的说明使用即可。

在IntelliJ中中配置不同的启动参数


用IntelliJ打开官方给agent-demo项目,打开运行参数配置窗口,如下:

运行参数配置窗口

然后添加四个SpringBoot的启动项,如下:

添加SpringBoot启动项

然后需要配置的内容如下:

启动项配置

首先需要起一个形象生动的名字,我把这四个agent分别叫做consumer_agent,small_provider_agent,medium_provider_agent和large_provider_agent。

然后这四个启动项最大的不同其实就是VM options,我从官方的测评脚本中提取了四个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。

选择启动的agent
运行多个agent

使用Postman测试代码能否跑通


Postman是一个模拟http请求的工具,下载地址如下:
https://www.getpostman.com/apps

下面我们来用Postman来测一下这整个调用过程能否正确进行。

consumer是整个调用过程的开始,官方的consumer示例的入口是:

http://localhost:8087/invoke

尝试着用Postman请求这个地址:

模拟请求

如果你对官方的agent-demo没有做任何修改的话,返回类似如下:

返回500

服务器出了500错误,打开IntellJ,看到consumer_agent报如下的错误:

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模拟请求,果然错误被修正了:

返回200

用wrk模拟官方的四轮测评


wrk没有windows版本,比较无奈,这里只能用另一台linux机器或者虚拟机了,如果使用另一台linux机器来压测本地代码的话,切记要把本地Win10的防火墙关闭,不然请求都会被墙住。

首先在linux机器上安装wrk,这个就不多说了。

官方给的评测脚本(benchmarker)中的benchmarker\workflow\benchmark目录下有一个叫wrk.lua的文件,把这个文件拷贝到linux机器上,在这个文件所在的目录下运行如下的一些命令进行四轮测试(参数是按照官方给的脚本与要求):

第一轮(预热):

wrk -t2 -c512 -d30s -T5 \
        --script=./wrk.lua \
        --latency http://192.168.3.12:8087/invoke

第二轮:

wrk -t2 -c128 -d60s -T5 \
        --script=./wrk.lua \
        --latency http://192.168.3.12:8087/invoke

第三轮:

wrk -t2 -c256 -d60s -T5 \
        --script=./wrk.lua \
        --latency http://192.168.3.12:8087/invoke

第四轮:

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 20891/dubbo调用接口

官方的agent_demo占用的端口

占用端口/用途
consumer_agent 20000/http请求入口
small_provider_agent 30000/http请求入口
medium_provider_agent 30001/http请求入口
large_provider_agent 30002/http请求入口

官方Agent-Demo代码流程分析

agent_demo流程分析

图中,C-Agent是指Consumer Agent,P-Agent是指Provider Agent。图的上半部分是整个RPC调用的流程,下半部分则是具体描绘了P-Agent与Provider之间Netty通信过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350