Dubbo

92 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


1. RPC********

RPC 其全称为 Remote Procedure Call 即远程过程调用

PRC 跨系统且跨进程调用:即在不同操作系统间且跨进程远程服务调用

image.png

2. 什么是 Dubbo****

www.bilibili.com/video/BV1J4…

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,核心包括:

远程通信

集群容错:包括软复杂均衡

自动发现:基于注册中心

 

 

3. 为什么要用Dubbo****

blog.csdn.net/yb546822612…

 

因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。

使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。

 

4. Dubbo 原理****

  image.png

服务提供者:****

1、启动nettyserver监听端口

2、接受请求,解析请求参数对象,得到反射参数,通过反射执行具体方法,得到结果,封装结果返回

 

服务消费者:****

1、底层用到Netty来实现通信,执行代理对象。

2、代理对象负责与Netty通信,封装请求对象,执行调用,返回结果。

 

核心技术:

通过动态代理进行执行方法

通过本地注册表,注册接口的实现,服务提供者拿到参数里面的接口就能得到实现类,之后就能发射调用了。

 

5. 协议与请求****

通常两种:

Dubbo协议--dubbo请求--netty框架处理请求

http协议-http请求--Tomcat容器处理请求

6. 动态服务目录与路由****

服务提供者:注册当前服务地址

服务消费者:获取调用服务地址

 

到注册中心Zookeper 或者Redis,本身有监听机制保持服务列表一致

 

 

7. 复杂均衡算法****

随机算法

权重随机算法

轮训算法

平滑加权轮训

一直哈希算法

最小活跃算法

 

8. Dubbo 分层架构****

注册中心register:服务注册与发现

服务提供者:暴露服务

服务提供者:调用远程服务

监控中心:统计服务调用次数与调用时间

容器:服务允许容器

 

(1) 调用流程****

①容器负责启动,加载,运行provider

②Provider启动时,向register中心注册自己提供的服务

③Consumer在启动时,向register中心订阅自己的服务

④Register返回服务提供者列表给consumer,如果有变动,register将基于长链接推送变更数据给consumer

⑤Consumer调用provider服务,基于负载均衡算法进行调用

⑥Consumer调用provider的统计,基于短连接定时每分钟一次统计到monitor

 

(2) 分层****

接口服务层:

配置层:

服务代理层:基于动态代理,代理对象运程调用,代理对象负责接受调用和解析请求

服务注册层:支持zookeeper,Redis等注册中心

路由层:负责负载均衡,并桥接注册中心

监控层:rpc调用次数和调用时间监控

远程调用层:默认是dubbo协议,封装RPC调用

信息交互层:封装请求模式,同步转异步

网络传输层:抽象netty为统一接口,统一网络传输接口

数据序列化层:数据传输的序列化和反序列化

 

 

9. Dubbo 和 Spring Cloud 有什么区别****

 

(3) 通信方式不同****

Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。

 

(4) 开发难度方面****

Dubbo 开发难度比较大,原因是dubbo的jar包依赖问题很多

Springcloud一体化,优化更好

 

(5) 技术方面****

Dubbo只是springcloud的一个子集,解决的是分布式中的服务调用问题,而springcloud提供了全套解决方案

 

(6) 注册中心****

Springcloud使用eureka作为注册中心,无中心化,可靠性更高

Dubbo一般采用zookeeper作为注册中心,保证的是一致性问题

 

 

 

10. Dubbo与Netty与RPC****

Dubbo使用Netty框架实现RPC(远程过程调用)