RPC框架实现分布式

2025-05-23 02:42:37

1、网络中数据都将会被转化为字节进行传送,在代码层面上,一个RPC框架需要实现特定格式的数据与字节数组之间的相互转化。如Java已经提供了默认的序列化方式,但是是在高并发的场景下,使用Java原生的序列化方式可能会遇到性能瓶颈。于是,出现了许多开源的、高效的序列化框架:如Kryo、fastjson和Protobuf等。buddha目前支持Kryo和fastjson两种序列化框架。

RPC框架实现分布式

3、解决这类问题在于向数据包添加边界信息,发源捍悉刈送端给每个数据包添加包首部,首部中至少包含数据包的长度,这样在接收端接收到数据时,通过读取首部的长度信息得到该数据包有效数据的长度。发送端将每个数据包封装为固定长度(多余用0填充),这样接收端在接收到数据后根据约定好的固定长度读取每个数据包的数据。使用特殊符号将每个数据包区分开来,接收端也是通过该特殊符号的划分数据包的边界。如buddha采用添加包首部来解决TCP拆包、粘包的问题。

RPC框架实现分布式

5、线程切换带来的开销还是存在。所以在高并发的场景下,传统的BIO是无能为力的。而NIO的重要特点是:读、写、注册和接收函数,在等待就绪阶段都是非阻塞的,可以立即返回,这就允许我们不使用多线程充分利用CPU。如果一个连接不能读写,可以把这个事件记录下来,然后切换到别的就绪的连接进行数据读写。如在buddha中,Netty被用来编写结构更加清晰的NIO程序。

RPC框架实现分布式
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢