新工作中遇到了dubbo服务框架,需求是对dubbo版本进行升级
dubbo是什么?
dubbo是一个高性能轻量级的RPC服务治理框架。
dubbo具有10层架构
service | bussiness | 业务逻辑层 | 提供接口和实现 |
RPC | config | 配置层 | 用于初始化配置信息 |
proxy | 代理层 | 提供provider和consumer的代理 | |
register | 服务注册层 | 提供provider和consumer的注册和发现 | |
cluster | 路由层 | 封装provider的路由和负载均衡 | |
monitor | 监控层 | 提供RPC调用时间和次数监控 | |
protocol | 远程调用层 | 封装RPC调用 | |
remoting | exchange | 信息交换层 | 用于封装请求响应模式,同步转异步 |
transport | 网络传输层 | 对netty和mina的封装 | |
serialize | 序列化层 | 提供数据的序列化和反序列化 |
六大核心能力
- 面向接口代理的高性能RPC调用
- 智能容错和负载均衡
- 服务自动注册和发现
- 高度可扩展能力
- 运行期流量调度
- 可视化的服务治理和运维
五种负载均衡策略
加权随机
通过区间的随机算法,去获取某一个目标服务器,可以根据这个区间算法去增加某个服务器的权重,从而获得更大的调用可能性。
最小活跃数
每台服务器都有一个active,初始化时都是0,每收到一条请求,活跃数都加一,完成请求活跃数减一。在服务器运行一段时间后,性能好的服务器处理请求的速度更快,因此活跃数下降的也更快,这个时候性能好的服务提供方就能优先获得新的请求
一致性hash
根据同一个客户端请求,通过一致性hash算法,会落到一个目标服务器上,只要请求的信息没有变化,他的请求永远会落到同一台服务器上。
加权轮询
按照服务器123123的去轮询,可以针对某些性能好的服务器去进行增加权重,从而使该服务器能获得更多的调用。
最短响应时间的权重随机
会计算目标服务的请求响应时间,去根据响应时间最短的服务,去配置更高的权重,然后进行区间随机算法,从而得到一个目标服务器节点进行访问。
Dubbo的工作原理
服务启动的时候,服务提供方和服务消费方会根据配置信息,连接到注册中心,分别向注册中心去注册服务和订阅服务。第二个,注册中心会根据订阅关系,去返回服务提供方的信息到我们的服务消费方,同时服务消费方会将服务提供方的信息缓存到本地,如果信息发生变更,消费方会收到注册中心的推送,去更新本地的缓存。第三个,服务消费方会生成代理对象,同时根据负载均衡策略,去选择一台目标的服务提供方,同时定时向monitor记录接口的调用信息和时间信息。第四个,拿到代理对象后,服务消费方通过代理对象发起接口的一个调用。第五个,服务提供方收到请求后,会根据数据进行反序列化,然后通过代理,调用具体一个接口的实现。
序列化的作用
将对象转化为二进制数据,存放到磁盘里面。反序列化则是将二进制数据转化为对象
与SpringCloud有什么区别?
1.关注点
dubbo是诞生于SOA时代,关注点在于服务的远程调用,流量分发,服务治理,流量控制等一些方面
dubbo是诞生于微服务架构时代,关注于微服务整个生态的解决方案,依托于Spring和SpringBoot的生态。dubbo定位于服务治理,SpringCloud是微服务解决生态。
2.底层。
Dubbo使用的是Netty这样的NIO框架,是基于TCP协议进行传输。通过Hession等序列化去完成RPC的通信。而SpringCloud是基于Http协议+Rest风格的接口去实现远程通行。相对来说,http接口会有更大的一些请求报文,占用的带宽会更多,效率上比dubbo会更差一些。但是Rest相比RPC来说会更灵活,服务提供方和服务调用方只需要根据http协议的一些契约去完成通信就行了。