T
H
R
E
A
D
N
E
W

从三个方面聊一聊RPC远程过程调用

从三个方面聊一聊RPC远程过程调用

直奔主题。

三个方面

  • 传输:

    采用什么通道将数据发送给对方,BIO,NIO或者AIO,IO模型很大程度上决定了框架的性能。

  • 协议:

    公有协议还是私有协议,协议不同,性能表现也不同。和公有协议,内部私有协议能被设计的更优。

  • 线程模型:

    数据报如何读取?读取之后的编解码在哪个线程进行,编解码后的消息如何发送。线程模型的不同也会影响性能。

优化建议

在RPC调用过程中,消息的序列化和反序列是重量级操作。通常,对性能敏感的框架都会对这一块进行性能优化。一般对序列化操作进行性能优化有以下三个实践:

  • 减少字段,即使用更加复杂的映射从而减少网络中字段的传输和编解码
  • 使用零拷贝的序列化,例如利用Prostostuff实现序列化零拷贝。通常的反序列化都是ByteBuf→byte[]→Biz 转换过程,我们可以将中间的byte[]转换过程砍掉,实现序列化的零拷贝。
  • 将字段拆分在不同的线程里进行反序列化。

参考文献

Demo地址

基于Netty+Zookeeper的小型分布式RPC框架PowerRPC,Github地址:https://github.com/ThreadNew/PowerRPC.git

posted @ 2021-05-17 20:23  ThreadNew  阅读(124)  评论(0)    收藏  举报