什么是RPC
在聊Dubbo之前,咱们先聊一聊RPC.
RPC是Remote Procedure Call的缩写,翻译为:远程过程调用,目标是为了实现两台(多台)计算机\服务器,相互调用方法\通信的解决方案。
RPC只是实现远程调用的一套标准,该标准主要规定了两部分内容
1. 通信协议
通信协议指的就是远程调用的通信方式。实际上这个通知的方式可以有多种,例如:写信,飞鸽传书,发电报。在程序中,通信方法实际上也是有多种的,每种通信方式会有不同的优缺点。
2. 序列化协议
序列化协议指通信内容的格式。双方都要理解这个格式,发送信息是序列化过程,接收信息需要反序列化。程序中,序列化的方式也是多种的,每种序列化方式也会有不同的优缺点。
什么是Dubbo
Dubbo是一套RPC框架。既然是框架,我们可以在框架结构基础上,定义Dubbo中使用的通信协议,使用的序列化框架技术,而数据格式由Dubbo定义,我们负责配置之后直接通过客户端调用服务端代码。
可以说Dubbo就是RPC概念的实现,Dubbo是SpringCloudAlibaba提供的框架,能够实现微服务相互调用的功能!
Dubbo对协议的支持
RPC框架分通信协议和序列化协议,Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改。
Dubbo支持的通信协议:
- dubbo协议(默认)
- rmi协议
- hessian协议
- http协议
- webservice
- …
Dubbo支持的序列化协议:
- hessian2(默认)
- java序列化
- compactedjava
- nativejava
- fastjson
- dubbo
- fst
- kryo
Dubbo默认情况下,支持的协议有如下特征
- 采用NIO单一长链接
- 优秀的并发性能,但是处理大型文件的能力差
Dubbo方便支持高并发和高性能
Dubbo的注册发现流程
-
首先服务的提供者启动服务时,将自己的具备的服务注册到注册中心,其中包括当前提供者的ip地址和端口号等信息,Dubbo会同时注册该项目提供的远程调用的方法
-
消费者(使用者)启动项目,也注册到注册中心,同时从注册中心中获得当前项目具备的所有服务列表
-
当注册中心中有新的服务出现时,(在心跳时)会通知已经订阅发现的消费者,消费者会更新所有服务列表
-
RPC调用,消费者需要调用远程方法时,根据注册中心服务列表的信息,只需服务名称,不需要ip地址和端口号等信息,就可以利用Dubbo调用远程方法了