Dubbo学习(一)——分布式服务治理框架基础概念及工作原理
面试官的心思一般是:
第一步:思考性问题、原理——MQ、ES、Redis、SpringCloud(Dubbo)、....
第二步:实际开发中遇到的问题,你是怎么解决的,上述技术有在项目中用到吗?
第三步:综合的,系统设计,,比如让你设计一个 MQ、设计一个搜索引擎、设计一个缓存、设计一个 rpc 框架,你怎么设计
国内SpringCloud架构热火朝天,但是阿里系架构推崇的Dubbo目前仍是市面公司的主流技术,有必要了解下
Dubbo就是一个分布式服务治理框架:
传统RPC远程调用缺点是缺少服务治理,当服务比较多时URL地址管理起来混乱,Dubbo可解决服务治理问题,核心技术是通过注册中心(服务治理思想和SpringCloud的类似),Dubbo底层框架基于Netty实现。
传统架构—>分布式架构—>SOA架构(SOA基于分布式架构,Dubbo产生于SOA架构)—>微服务架构
SpringCloud和Dubbo区别与相关:他们都属于RPC远程调用框架,但是SpringCloud更强大,某种程度可以说Dubbo是它一个子集
1.什么是Dubbo
(1)是一款分布式服务框架
(2)也是高性能和透明化的RPC远程服务调用框架
(3)支持SOA服务治理方案
2.Dubbo 工作原理
工作流程:
- 第一步:provider(生产者) 向注册中心去注册
- 第二步:consumer (消费者)从注册中心订阅服务,注册中心会通知 consumer 注册好的服务
- 第三步:consumer 调用 provider
- 第四步:consumer 和 provider 都异步通知监控中心
详细调用流程:
(1)服务容器负责启动、加载,运行服务提供者
(2)服务提供者(provider)在启动时,向注册中心注册自己提供的服务
(3)服务消费者(consumer )在启动时,向注册中心订阅自己所需的服务
(4)注册中心返回服务提供者地址列表给消费者,如果有变更注册中心将基于长连接推送变更数据给消费者
(5)服务消费者从提供者地址列表中,基于负载均衡算法 ,选一台提供者进行调用,如果调用失败再选另一台
(6)服务消费者和提供者,在内存中累计调用次数和调用时间,定时,每分钟发送一次统计数据到检测中心
原理图:
3.项目分层结构(10层):
- 第一层:service 层,接口层,给服务提供者和消费者来实现的
- 第二层:config 层,配置层,主要是对 dubbo 进行各种配置的
- 第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信
- 第四层:registry 层,服务注册层,负责服务的注册与发现
- 第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务
- 第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控
- 第七层:protocal 层,远程调用层,封装 rpc 调用
- 第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步
- 第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口
- 第十层:serialize 层,数据序列化层