引言
java 系统的调用常见的有两种:RPC(Remote Promote Call,远程过程调用)和 REST(REpresentational State Transfer,表述性状态传递)。通常内部通讯用 RPC,强调调用方法,外部通讯用 REST,强调数据传递。
RPC
RPC 属于进程间通信方式,特点是屏蔽被调用方法部署位置,调用方式和本地服务保持一致。RPC 的原理主要是使用动态代理模式,传输协议使用 http 协议,具体实现有spring remoting 和 dubbo。
RPC 同步调用的实现方法有 WebService 和 RMI:WebService 基于 web 容器提供服务,底层使用 http 协议,适合不同语言、异构系统间的调用。RMI 是 Java 的实现,允许方法返回 Java 对象以及基本数据类型,适合用于JAVA语言构建的不同系统间的调用。
RPC 异步调用的实现方法主要是 JMS(Java Message Service),目前开源的的 JMS 中间件有Apache 社区的 ActiveMQ、Kafka 消息中间件和阿里的 RocketMQ。
RPC架构具体实现过程:客户端本地调用服务,客户端 Stub 将方法、参数组装成网络传输的消息体(序列化),发送到服务端地址;服务端 Stub 收到消息并解析(反序列化),调用服务端本地相应的服务,返回结果给服务端 Stub;服务端 Stub 将返回结果组装成网络传输的消息体,发送到客户端地址;客户端 Stub 解析结果。
RPC框架的目标就是把调用、编/解码的过程封装起来,让用户像调用本地服务一样的调用远程服务,常见的架构是 gRPC:gRPC是一个高性能、通用的开源 RPC 框架,由 Google 主要面向移动应用开发并基于 HTTP/2 协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,支持多种开发语言。
REST
REST 通过 HTTP 协议定义的通用动词方法(GET、POST、PUT、DELETE)对数据资源进行传递,以 URI 对网络资源进行唯一标识,服务端根据用户端需求进行无状态通信。
Rest架构的主要原则:(1)网络上的所有事物都被抽象为资源;(2)每个资源都有一个唯一的资源标识符;(3)同一个资源具有多种表现形式(xml,json等);(4)对资源的各种操作不会改变资源标识符;(4)所有的操作都是无状态的
总结
综上,Java 系统调用常见的 RPC 和 REST 应用在不同网络通讯场景中,实现方法和数据的传递。