当前位置: 编码机 >> 编码机优势 >> Netty之自建RPC框架
1、RPC
在微服务大行其道的今天,分布式系统越来越重要,实现服务化首先就要考虑服务之间如何通信,也就是RPC。
RPC,全称为RemoteProcedureCall,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。
一次RPC调动过程可以简化为下图:
1.pngclient会调用本地动态代理proxy
这个代理会将调用通过协议转序列化字节流
通过网络框架(比如Netty),将字节流发送到服务端
服务端在受到这个字节流后,会根据协议,反序列化为原始的调用,利用反射原理调用服务方提供的方法
如果请求有返回值,又需要把结果根据协议序列化后,再通过网络框架返回给调用方
RPC框架有很多,比较知名的如阿里的Dubbo、google的gRPC、Go语言的rpcx、Apache的thrift。当然了,还有SpringCloud,不过对于SpringCloud来说,RPC只是它的一个功能模块。
RPC框架让调用方像调用本地函数一样调用远程服务,那么如何做到这一点呢?
在使用的时候,调用方是直接调用本地函数,传入相应参数,其他细节它不用管,至于通讯细节交给RPC框架来实现。实际上RPC框架采用代理类的方式,具体来说是动态代理的方式,在运行时动态创建新的类,也就是代理类,在该类中实现通讯的细节问题,比如参数序列化。
当然不光是序列化,我们还需要约定一个双方通信的协议格式,规定好协议格式,比如请求参数的数据类型,请求的参数,请求的方法名等,这样根据格式进行序列化后进行网络传输,然后服务端收到请求对象后按照指定格式进行解码,这样服务端才知道具体该调用哪个方法,传入什么样的参数。
刚才又提到网络传输,RPC框架重要的一环也就是网络传输,服务是部署在不同主机上的,如何高效的进行网络传输,尽量不丢包,保证数据完整无误的快速传递出去?实际上,就是利用我们今天的主角——Netty。
再次总结下一个RPC框架需要重点
转载请注明:http://www.aideyishus.com/lkgx/4749.html