- 本文围绕几个谈到dubbo 95概率会问起的问题展开。
- 什么是dubbo以及dubbo的十层(三层)模型
- dubbo核心功能
- 负载均衡策略
- dubbo工作原理
- dubbo与springcloud的区别(第一次看到这个问题挺懵***的,这两个好像不是一个层面的东西吧???实际上对比的还是springcloud的feign和dubbo底层)
- 欢迎留言指正,好友交流
什么是dubbo?
Dubbo是一个高性能轻量级的开源RPC框架,它有十层模型构成,从上往下Business:
- service业务逻辑层
RPC:
- config配置层
- proxy代理层,提供consumer和provider的代理
- register服务注册层,封装服务地址的注册和发现
- cluster路由层,封装provider路由和负载均衡
- monitor监控层,提供RPC调用时间和次数监控
- protocl远程调用层,封装RPC调用
remoting:
- exchange信息交换层,用于封装请求响应模式,同步转异步
- transport网络传输层,对netty和mina的封装
- serialize序列化层,提供数据的序列化和反序列化
- 面向接口代理的高性能RPC调用
- 容错与负载均衡
- 服务自动发现与注册
- 高度可扩展能力
- 运行期流量调度
- 可视化的服务治理和运维
- 加权随机:通过区间的随机算法,获取服务器,可以通过增加某个服务器的权重获得更大的调用可能性
- 最小活跃数:每个服务提供者对应一个活跃数active,初始状态下都为0,每次收到请求活跃数+1,完成请求后-1,运行一段时间后,性能好的服务提供者处理请求速度更快,活跃数下降越快,服务提供者就能优先获得请求
- 一致性hash:根据来自同一个客户端的请求,通过一致性hash算法,落到一个服务器上,请求信息不变,会请求同一台服务器。
- 加权轮询:目标服务器按照123123轮询,加权指对服务器性能好的节点增加权重。
- 最短响应时间的权重随机:计算目标服务的请求的响应时间,响应时间最短的服务配置更高的权重
1.服务启动时,服务提供者和消费者根据配置信息连接注册中心,分别向注册中心去订阅和注册服务
2.注册中心根据订阅关系,返回服务提供者的信息给消费者,消费者把这些信息缓存到本地,如果信息发生变更,消费者收到注册中心的推送,更新本地的缓存
3.服务消费者生成代理对象,根据负载均衡策略,选择一台服务提供者,并且定时向monitor记录接口的调用次数和时间信息
4.拿到代理对象后,服务消费者通过代理对象发起接口的调用(3,4的代理对象实际上是服务提供者接口的封装)
5.服务提供者收到请求后,根据数据进行反序列化,通过代理,调用接口具体的实现
Dubbo和SpringCloud的区别关注点:Dubbo是SOA时代产物,关注点在于服务的远程调用,流量分发,服务治理,流量控制等;Springcloud是微服务架构时代,关注微服务整个生态的解决方案,依托于Spring和Springboot生态
底层:(与其说在和SpringCloud对比,实际不如说和Feign在对比)dubbo底层使用netty NIO框架,基于TCP协议(默认dubbo协议)进行传输,通过Hession等序列化方式完成RPC通信;Springcloud基于Http协议+Rest风格的借口实现远程通信,http协议报文更大,占用带宽更大,效率比dubbo差一些(回忆一下网络模型,http协议工作在哪层?http协议工作在哪层?我想这个问题就很好理解了。),Rest相比RPC更加灵活,服务提供方和调用方根据http协议完成通信即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)