RPC通信原理

RPC通信原理,第1张

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 系列文章目录
  • 前言
  • 一、RPC是什么?
  • 二、RPC原理
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、RPC是什么?

RPC其实就是一个服务需要调用另一个服务的过程。比如有A,B两个服务,如果A服务想要调用B服务的接口,用传统的本地方法肯定是不行的。HTTP请求的速度又是很慢的,并且也是非长连接的,增加了网络开销。因为A服务识别不到B服务的接口的,RPC就是处理这种尴尬局面的。

二、RPC原理

如图:自己画的图,凑合看吧。

RPC优点:
1,RPC其实就是服务与服务之间的调用,消费方与服务方之间建立一个长连接,避免三次握手,避免频繁的建立链接,销毁了解,节约资源。
2,基于分布式设计,RPC一般都有注册中心,有丰富的监控管。
3,发布,下线接口,动态扩展,对于调用方来说是无感知的。
4,私密协议,安全新高。
5,内容更小,效率更高。
6,支持服务注册发现,负载均衡,超时重试,熔断等机制

RPC的执行流程,是消费者发送请求,rpc框架通过动态代理拦截到请求,对请求内的参数进行序列化 *** 作,然后进行协议编码,再通过网络传输发到服务端。服务端进行解码,反序列化得到正确的参数,然后将数据返回。

RPC动态代理
RPC会自动给接口生成一个代理实现,当项目注入接口的时候,实际运行过程中是绑定这个这个接口的实现,在方法被调用的时候,被代理类拦截,加入调用逻辑
常见的动态代理方式:
1,JDK动态代理代理。运行期间创建代理,通过接口生成代理类。缺点:代理类必须要有一个接口实现,否侧异常。性能上来说,因为是通过反射调用,比直接调用慢,而且生成的代理类文件会占用方法区空间,如果数据量过大,可能造成Full GC
2,GCLIB动态代理,动态生成一个要代理的子类,子类重写被代理类的所有非final方法,在子类中采用拦截技术,拦截所有弗雷方法的调用,采用切面模式,比JDK动态代理快

RPC为什么要序列化
网络中传输数据,必须采用二进制的形式,Java对象是不能在网络中进行传输的,这个 *** 作叫序列化,所以要求序列化的算法是可逆的,可以将一个对象序列化成二进制,也可以将一个二进制反序列化成一个对象。

协议编/解码
对数据的传输进行格式规定,以便于更好的获取对应的信息。例如:dubbo中的协议是16个字节,里面包含了所需要的信息,协议的规定,消费者和服务者必须是同步的。

网络调用
网络调用,必须知道对方的IP地址和端口才能进行正常的调用,不过我们一般通过注册中心进行服务的发现。


RPC通过注册中心实时获取节点信息,调用方能动态感知服务者信息变更,例如:a服务请求b服务,如果b服务挂了,a服务能动态感知到,避免造成严重问题。如果是配置在配置文件,那么b服务如果挂掉的话,需要修改配置文件才行,属于人肉运维了,不合理。

当然,如果用到rpc的话,一些机制是必不可少的,可以联合注册中心配置,容错降级,路由,负载均衡,超时机制,熔断,限流等。

总结

RPC主要是为了开发者开发的便利,使开发者不需要关注具体的服务调用,只需要像调用本地方法一样去调用服务接口,无论是网络传输效率,还是开发效率都得到了提升。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/741003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存