跟孙哥学java
常见的RPC框架
Hessian 纯java开发 Thrift->异构系统的RPC gRPC
引言
RPC技术的回顾
:::info
注意细节:
客户端的角度,想要完成RPC的调用:
- 需要网络
- 传输数据[协议,序列化]
- 客户端:调用远端方法 ,我们希望它能够像调用本地方法那样调用
目标:让客户端能够透明的调用远端服务方法
网络通信---->封装,由rpc设计者封装
协议,序列化
使用设计模式:代理设计模式,通过代理对象为原始类增加额外的功能
userServiceImpl原始类-->ususerServiceImpl+额外功能 在客户端 创建远端功能的代理对象=stub (存根,桩)--->由RPC框架的设计者来创建 代理:Java动态代理技术--->封装 spring AOP
:::
需要解决的核心问题
网络通信--基石
协议(序列化)---Protocol(Serializer)
客户端调用 --Stub (Proxy)
其他功能(服务治理)
- 注册中心(命名服务)
- 配置中心
- 熔断
- 限流
- 负载均衡
RPC主要包括1,2,3这三个功能 加上额外功能后---->SOA架构---微服务架构
RPC解决的问题
远程调用问题,跨进程问题
自研RPC的技术储备
:::info
- 网络通信
- BIO Socket 2. NIO Selector+Channel 3. Netty(主流手段) 4. Mina 从使用的角度 -->Netty 设计角度 --->网络层的抽象 (定义通信接口)
- 协议【序列化】 相对陌生且 协议误区
- 代理(存根) 客户端代理:Proxy.newProxyInstance() | Spring AOP [BeanPostProcessor]
- 注册中心 consul,自研java RPC框架 ---> zookeeper :::