Dubbo初探
几个问题
什么是RPC?为什么我要用RPC?什么是Dubbo?
RPC
:(Remote Procedure Call) 该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
看到官方的解释,你可能并不明白RPC是什么东西,但是和传统的一个业务进行结合就变的很好了解了,比如我现在对外暴露了一个web服务,这个服务可以计算两个数字的和,这时候如果有相应的客户调用这个服务,就在我这台计算机上计算好两个数的和,然后反馈给客户端,但是我发现我这台服务器计算两个数字的和没有那么强的算力(当然可能这个例子并不恰当),但是我还是想在这台服务器上继续运行我的WEB服务,但是计算我想交给我的另外一台性能比较强的服务器,由他来进行计算,然后我只需要知道结果就可以,那么这样的方式就是一次RPC的请求与返回。
Dubbo的介绍:Dubbo 是一款
高性能、轻量级的开源
Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用
,智能容错和负载均衡
,以及服务自动注册和发现
。
那么通过上面的官方介绍我们就知道了Dubbo是开源的RPC框架,当然他的功能并不止上面说的服务调用与返回,还具有智能容错
和负载均衡
等强大功能。
更多Dubbo的相关知识,请参照Dubbo官方文档以及源码:
Dubbo结构图:
Dubbo组成部分
Dubbo结构图:
我们可以看到实现RPC我们需要服务的提供者
与服务的消费者
以及注册中心
和监视器
。
调用关系说明:
-
服务容器负责启动,加载,运行服务提供者。
-
服务提供者在启动时,向注册中心注册自己提供的服务。
-
服务消费者在启动时,向注册中心订阅自己所需的服务。
-
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
-
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
-
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
注册中心
我们可以看到注册中心在RPC调用中扮演着很重要的作用,他记录了哪些消费者提供了哪些接口可以被消费者调用,还有哪些服务发生了变更,是Dubbo框架中的重要组成部分。
那么我们就需要自己搭建一个注册中心,Dubbo官方提供了Multicast
zookeeper
Nacos
Redis
Simple 注册中心
等注册中心,但是官方建议使用zookeeper
作为dubbo的注册中心。我们可以使用zookeeper的docker镜像进行环境的搭建,减少一些配置的操作。docker地址:https://hub.docker.com/_/zookeeper 或者使用docker-compose进行搭建。
version: '3.1'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0