手把手带你0到1摸透RPC框架轮子项目-day1项目架构篇

162 阅读2分钟

原视频参考地址:[全网最全的手写RPC教程] 手摸手教你写一个RPC-架构-设计-落地实现_哔哩哔哩_bilibili

项目地址:kkoneone11/kkoneoneRPC-master (github.com)

觉得对你有帮助的帮忙文章给个like和项目给个stars呀!!!

架构

在微服务中,A服务依赖B服务,A服务要向B服务要数据,要数据的过程就是RPC远程服务调用。而之间不用HTTP协议传输是因为其中有很多信息是我们不需要的,增大了传输的消耗。因此为了只是需要的数据就基于socket封装成了netty再进一步封装成了RPC协议

image.png

架构演变

调用方式                                                                      缺点

image.png

如果提供方是有变化,那么调用方就不知道该如何去调用的,则需要一个注册中心,提供方注册上去后调用方再找到对应的服务提供方找数据

image.png

如果提供方太多的话则可以实现RPC的高可用,通过路由层实现负载均衡

image.png

而服务与服务直接数据传输需要序列化来减少数据包大小 ,那序列化应该用JSON还是二进制

image.png

而服务方并非每个人都能调用,因此也需要做一个拦截器做token验证。调用方和提供方分别写一个token,token一致拦截器才放行。然后也可以利用拦截器进行一个限流的动作。例如服务方A、B配置不一致,则可以给配置低一点的进行限流。

image.png

如果路由器注册中心序列化等都想要自定义的话则添加一个SPI,通过SPI将里面的类进行加载,统一管理

image.png

当调用方调用提供方A失败但其他服务还可以使用的情况下,总不能抛异常。因此就需要再去找其他可用的服务方来保证可用性。因此就需要一个容错机制(故障转移)

image.png

而服务提供方不能同步一直等待调用方发送请求,因此就需要线程池,由线程池去调用具体的方法调用来异步解耦

image.png

RPC架构

代理层是用来封装一些个具体逻辑

image.png

手把手带你0到1摸透RPC框架轮子项目-day2项目代理层 - 掘金 (juejin.cn)