原视频参考地址:[全网最全的手写RPC教程] 手摸手教你写一个RPC-架构-设计-落地实现_哔哩哔哩_bilibili
项目地址:kkoneone11/kkoneoneRPC-master (github.com)
觉得对你有帮助的帮忙文章给个like和项目给个stars呀!!!
架构
在微服务中,A服务依赖B服务,A服务要向B服务要数据,要数据的过程就是RPC远程服务调用。而之间不用HTTP协议传输是因为其中有很多信息是我们不需要的,增大了传输的消耗。因此为了只是需要的数据就基于socket封装成了netty再进一步封装成了RPC协议
架构演变
调用方式 缺点
如果提供方是有变化,那么调用方就不知道该如何去调用的,则需要一个注册中心,提供方注册上去后调用方再找到对应的服务提供方找数据
如果提供方太多的话则可以实现RPC的高可用,通过路由层实现负载均衡
而服务与服务直接数据传输需要序列化来减少数据包大小 ,那序列化应该用JSON还是二进制
而服务方并非每个人都能调用,因此也需要做一个拦截器做token验证。调用方和提供方分别写一个token,token一致拦截器才放行。然后也可以利用拦截器进行一个限流的动作。例如服务方A、B配置不一致,则可以给配置低一点的进行限流。
如果路由器注册中心序列化等都想要自定义的话则添加一个SPI,通过SPI将里面的类进行加载,统一管理
当调用方调用提供方A失败但其他服务还可以使用的情况下,总不能抛异常。因此就需要再去找其他可用的服务方来保证可用性。因此就需要一个容错机制(故障转移)
而服务提供方不能同步一直等待调用方发送请求,因此就需要线程池,由线程池去调用具体的方法调用来异步解耦
RPC架构
代理层是用来封装一些个具体逻辑