自研RPC-引言

43 阅读1分钟

跟孙哥学java

孙哥主页

常见的RPC框架

Hessian 纯java开发 Thrift->异构系统的RPC gRPC

引言

RPC技术的回顾

:::info 注意细节: 客户端的角度,想要完成RPC的调用:

  1. 需要网络
  2. 传输数据[协议,序列化]
  3. 客户端:调用远端方法 ,我们希望它能够像调用本地方法那样调用 目标:让客户端能够透明的调用远端服务方法 网络通信---->封装,由rpc设计者封装 协议,序列化 使用设计模式:代理设计模式,通过代理对象为原始类增加额外的功能
    userServiceImpl原始类-->ususerServiceImpl+额外功能 在客户端 创建远端功能的代理对象=stub (存根,桩)--->由RPC框架的设计者来创建 代理:Java动态代理技术--->封装 spring AOP

:::

需要解决的核心问题

网络通信--基石

协议(序列化)---Protocol(Serializer)

客户端调用 --Stub (Proxy)

其他功能(服务治理)

  1. 注册中心(命名服务)
  2. 配置中心
  3. 熔断
  4. 限流
  5. 负载均衡

RPC主要包括1,2,3这三个功能 加上额外功能后---->SOA架构---微服务架构

RPC解决的问题

远程调用问题,跨进程问题

image.png

自研RPC的技术储备

:::info

  1. 网络通信
    1. BIO Socket 2. NIO Selector+Channel 3. Netty(主流手段) 4. Mina 从使用的角度 -->Netty 设计角度 --->网络层的抽象 (定义通信接口)
  2. 协议【序列化】 相对陌生且 协议误区
  3. 代理(存根) 客户端代理:Proxy.newProxyInstance() | Spring AOP [BeanPostProcessor]
  4. 注册中心 consul,自研java RPC框架 ---> zookeeper :::