这里说的远程调用指的是进程间的交互,我们常用的前后端通过HTTP接口发起的网络请求也是属于远程调用,那么,除了HTTP外,还有哪些常见方式呢?
RPC
RPC是一种远程调用协议,最经典的框架就是dubbo,在老一些的分布式系统中dubbo还是很常用的,RPC最明显的优点就是使用简单,它屏蔽了底层通信细节,允许客户端直接调用服务器上的函数或服务,在形式上可以像调用本地函数或服务一样去调用远程的函数或服务,使用过dubbo的应该对此深有感触,这也是其区别于HTTP的重要之处。
HTTP
很多人说RESTful API是远程调用方式,在这里歪哥还是直接使用了HTTP的说法,更容易理解。前面提到了,区别于RPC,HTTP更注重的是数据协议,参数、返回值,双方把数据格式约定好了,HTTP就能玩得转了。
消息队列
很多人在用消息队列(MQ),但可能没把它跟远程调用联系在一块,其实消息队列是一种典型的异步远程调用方式。它通过发送和接收消息来实现系统之间的通信。不像HTTP有一个连接、传输、关闭的完整的一次调用流程,消息队列就是一个公用的大箱子,大家随时取放。消息队列的主要优点是解耦、可扩展性好、容错能力强,但相对于RPC和HTTP,实时性较差。
异步响应
这是目前比较新的的远程调用方式,典型代表就是WebFlux+Spring Data Reactive,可以处理一些请求频繁,要求及时响应的业务。WebFlux事件驱动框架支持响应式编程模型,可以实现非阻塞式的异步响应。可以想象一下设计模式中的观察者模式,以及Guava中的EventBus。