随着微服务越来越流行,RPC(远程过程调用协议)变得越来越重要。云原生技术也是离不开RPC的支持。我在过去使用过SpringCloud 全家桶来搭建一个微服务项目,第一次接触RPC框架的我来说仿佛打开了新世界的大门,一个注解即可开启一个注册中心,一个注解即可完成远程服务调用。在项目搭建的过程中这让我感受到无与伦比的简洁和高效。因此我也萌生了一个自己开发完成的一整套RPC框架。
目前项目大概开发完成80%,项目地址:gitee.com/deng-changt…
如果你有是通过RPC框架的经验,你不难发现作为一个RPC主要含有三个重要角色
- 注册中心,负责服务注册和转发。
- 服务消费者,负责发起远程服务调用。
- 服务提供者,负责服务消费请求响应。
以下是模块内部需要完成的功能,也是整个RPC框架正常工作的最低标准
-
注册中心
- 实现服务提供者提交的服务列表保存
- 实现消费者获取服务列表的请求
- 通过轮询主动检测服务是否过期
-
消费者
- 向注册中心获取服务列表并本地缓存
- 实现向服务提供者发起一个远程调用请求
- 实现服务集群调用的负载均衡
- 实现服务调用的熔断以及降级
- 实现服务调用的限流
-
服务提供者
- 实现向注册中心提交服务列表
- 实现向消费者响应服务消费
- 定时发送心跳,保证服务可用
因为篇幅关系,一篇文章无法完整说明,这一章先讲解大概需要实现的技术点,但其实里面有很多需要考虑到的细节,比如服务下线,如何保证高可用等等。
RPC框架为了更高的效率往往使用自己的传输协议而不是用HTTP来搭建连接,在建立TPC连接的同时还需要满足服务连接/处理的高效,项目选用基于NIO和高可用的主从Reactor模型--Netty
如果你对Netty不够了解你可以阅读这篇文章45 张图深度解析 Netty 架构与原理-腾讯云开发者社区-腾讯云 (tencent.com)