一、什么是RPC
Remote Procedure Call 的简写,中文翻译为远程过程调用,简单理解就是单体的方法调用变为跨网络的节点间方法调用。广义上节点间的一次网络通信也可以理解为一次RPC调用,例如HTTP接口调用也是RPC调用。
二、RPC技术哪家强
RPC 不单单是节点间的网络通信,还会伴随跨语言、服务治理、异步化、序列化、可监控、可自治理等相关技术。目前比较成熟的开源技术有gRPC、Dubbo、 bRPC(Java版)等。值的一提的是,中小公司使用 Spring Cloud 中有对 HTTP 封装的 Feign 组件,上手简单,但大厂多数看不上其性能(HTTP 应答式的同步、序列化性能差,这些特性是它作为 RPC 的性能瓶颈,可以使用Web容器中的异步 Servlet 来提升一些性能),往往自研或开源RPC二次开发。
三、学习规划
想系统的学习某项技术,做一些总结。
目前的计划是:
- 服务治理:RPC、网关、注册中心
- 分布式系统、缓存、数据库:Redis
- Java 网络库:Netty
就先从 RPC 开始吧,从何小锋老师的专栏《RPC实战与核心原理》开始。直接先看了专栏最后的加餐中写的一段感触很深。
目前,Kubernetes 已成为基础设施的事实标准。而原先通过 Jar 包的方式封装的各种基础设计设施能力,现在全都被 Kubernetes 项目从应用层拽到了基础设施中。那对于我们 RPC 来说也是一样,我们需要把非业务功能从传统的 RPC 框架中剥离出来,下沉到基础设施并且融入基础设施,然后通过 Mesh 去连接应用和基础设施。
具体到 Java 项目就是,通过配置接上 Mesh,通过引用服务提供方的 API Jar 包,通过注解标明是 RPC 类,就像使用本地方法一样去使用 RPC。
专栏项目JOYRPC:https://github.com/joyrpc/joyrpc