从零到一实现RPC框架-1(java)

167 阅读2分钟

随着微服务越来越流行,RPC(远程过程调用协议)变得越来越重要。云原生技术也是离不开RPC的支持。我在过去使用过SpringCloud 全家桶来搭建一个微服务项目,第一次接触RPC框架的我来说仿佛打开了新世界的大门,一个注解即可开启一个注册中心,一个注解即可完成远程服务调用。在项目搭建的过程中这让我感受到无与伦比的简洁和高效。因此我也萌生了一个自己开发完成的一整套RPC框架。


目前项目大概开发完成80%,项目地址:gitee.com/deng-changt…

如果你有是通过RPC框架的经验,你不难发现作为一个RPC主要含有三个重要角色

  1. 注册中心,负责服务注册和转发。
  2. 服务消费者,负责发起远程服务调用。
  3. 服务提供者,负责服务消费请求响应。

以下是模块内部需要完成的功能,也是整个RPC框架正常工作的最低标准

  • 注册中心

    • 实现服务提供者提交的服务列表保存
    • 实现消费者获取服务列表的请求
    • 通过轮询主动检测服务是否过期
  • 消费者

    • 向注册中心获取服务列表并本地缓存
    • 实现向服务提供者发起一个远程调用请求
    • 实现服务集群调用的负载均衡
    • 实现服务调用的熔断以及降级
    • 实现服务调用的限流
  • 服务提供者

    • 实现向注册中心提交服务列表
    • 实现向消费者响应服务消费
    • 定时发送心跳,保证服务可用

因为篇幅关系,一篇文章无法完整说明,这一章先讲解大概需要实现的技术点,但其实里面有很多需要考虑到的细节,比如服务下线,如何保证高可用等等。

RPC框架为了更高的效率往往使用自己的传输协议而不是用HTTP来搭建连接,在建立TPC连接的同时还需要满足服务连接/处理的高效,项目选用基于NIO和高可用的主从Reactor模型--Netty

如果你对Netty不够了解你可以阅读这篇文章45 张图深度解析 Netty 架构与原理-腾讯云开发者社区-腾讯云 (tencent.com)