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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值