全Netty实现,最终得分5756,排名152,进入复赛。
优化点如下:
- 通信均采用了Netty实现,全异步调用。
- Agent之间采用ProtoBuf协议进行通信,去除了HTTP。
- 保持连接未断开,复用连接,通过RequestId进行消息绑定。
- 使用FastThreadLoacl存储RequsetId,减少线程切换。(这个优化的跑分没跑出来,当时以为比赛截至提交了)
- 1:2:2的绝对负载均衡,效果一般,略微提升。
- 各种Netty参数调优。
未实现的已知的优化点如下(不确定正确):
- Consumer Agent和Provider Agent之间的连接数似乎一个就够了,之前使用了自制的连接池,效果并没有。
- 线程切换在高并发下的消耗很多,应进一步减少线程切换带来的损失。
- GC方面可以优化,我的代码GC频率较高,也会产生许多消耗。
- 私以为瓶颈主要集中在Consumer Agent上,其性能提升影响较大。
- 后来看其他人答辩的时候发现dubbo本身连接数是有限制的,单client不超过200个连接,所以本身1:2:2的负载均衡其实会导致一些连接被丢弃。
- 答辩过程中看到冠军队c++用了新的向量化计算的指令集对协议进行解析等。
- 亚军队在Agent之间使用了udp传输,避免了建立连接的过程。
本人实力不佳,以上这些仅供参考,希望明年能取得好点的成绩。
附一位 6800+大神的代码地址
另一位 6800+大神的总结及代码地址