本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. RPC********
RPC 其全称为 Remote Procedure Call 即远程过程调用
PRC 跨系统且跨进程调用:即在不同操作系统间且跨进程远程服务调用
2. 什么是 Dubbo****
Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,核心包括:
远程通信
集群容错:包括软复杂均衡
自动发现:基于注册中心
3. 为什么要用Dubbo****
因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。
使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。
4. Dubbo 原理****
服务提供者:****
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(远程过程调用)