从三个方面聊一聊RPC远程过程调用
从三个方面聊一聊RPC远程过程调用
直奔主题。
三个方面
-
传输:
采用什么通道将数据发送给对方,BIO,NIO或者AIO,IO模型很大程度上决定了框架的性能。
-
协议:
公有协议还是私有协议,协议不同,性能表现也不同。和公有协议,内部私有协议能被设计的更优。
-
线程模型:
数据报如何读取?读取之后的编解码在哪个线程进行,编解码后的消息如何发送。线程模型的不同也会影响性能。
优化建议
在RPC调用过程中,消息的序列化和反序列是重量级操作。通常,对性能敏感的框架都会对这一块进行性能优化。一般对序列化操作进行性能优化有以下三个实践:
- 减少字段,即使用更加复杂的映射从而减少网络中字段的传输和编解码
- 使用零拷贝的序列化,例如利用Prostostuff实现序列化零拷贝。通常的反序列化都是ByteBuf→byte[]→Biz 转换过程,我们可以将中间的byte[]转换过程砍掉,实现序列化的零拷贝。
- 将字段拆分在不同的线程里进行反序列化。
参考文献
Demo地址
基于Netty+Zookeeper的小型分布式RPC框架PowerRPC,Github地址:https://github.com/ThreadNew/PowerRPC.git

浙公网安备 33010602011771号