Dubbo

253 阅读6分钟

分布式服务框架 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

SOA 面向服务的架构(Service Oriented Architecture),也就是把工程按照业务逻辑拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外 提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。SOA架构中有两个主要角 色:服务提供者(Provider)和服务使用者(Consumer)。 核心能力:

  1. 面向接口代理的高性能RPC远程方法调用
  2. 智能容错和负载均衡
  3. 服务自动注册和发现(注册中心)但是调用哪个服务器应该是由Dubbo决定。
  4. 运行期流量调度:内置条件,脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
  5. 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol,Transport,Serialization被设计为扩展点,平等对待内置实现和第三方实现。
  6. q可视化的服务治理与运维:提供丰富治理,运维工具:随时查询服务元数据,服务健康状态及调用统计,实时下发路由策略,调整配置参数。

RPC

在这里插入图片描述
性能:序列化和反序列化机制速度,各个服务器间建立连接的速度。

核心部分包含: 1 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 2 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 FailoverCluster: 失败转移,当出现失败,重试其它服务器,通常用于读操作,但重试会带来更长延迟; 3 服务注册与自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。(Zookeeper) 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo 的四点特性: 1负载均衡——同一个服务部署在不同的机器时该调用那一台机器上的服务 2服务调用链路生成——随着系统的发展,服务越来越多,服务间依赖关系变得错踪复杂。Dubbo 可以为我们解决服务之间互相是如何调用的
3服务访问压力以及时长统计、资源调度和治理——基于访问压力实时管理集群容量,提高集群利用率。
4服务降级——某个服务挂掉之后调用备用服务

在这里插入图片描述
Provider: 暴露服务的服务提供方 Consumer: 调用远程服务的服务消费方 Registry: 服务注册与发现的注册中心 (与消费者长连接) Monitor: 统计服务的调用次数和调用时间的监控中心 Container: 服务运行容器 可以用来启动服务层

重要知识点总结: 1注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注 册中心不转发请求,压力较小 2监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 3注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者 4注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表 5注册中心和监控中心都是可选的,服务消费者可以直连服务提供者 6服务提供者无状态,任意一台宕掉后,不影响使用 7服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

在这里插入图片描述
图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复 用,其中,Service 和 Config 层为 API,其它各层均为 SPI。 各层说明: 第一层:service层,接口层,给服务提供者和消费者来实现的 第二层:config层,配置层,主要是对dubbo进行各种配置的 第三层:proxy层,服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton 第四层:registry层,服务注册层,负责服务的注册与发现 第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务 第六层:monitor层,监控层,对rpc接口的调用次数和调用时间进行监控 第七层:protocol层,远程调用层,封装rpc调用 第八层:exchange层,信息交换层,封装请求响应模式,同步转异步 第九层:transport层,网络传输层,抽象mina和netty为统一接口 第十层:serialize层,数据序列化层。网络传输需要。

负载均衡: 负载平衡旨在优化资源使用,大化吞吐量,小化响应时间,并避免 任何单个资源的过载。使用具有负载平衡而不是单个组件的多个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专用软件或硬件。

Dubbo 提供的负载均衡策略 在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。但可以自行扩展均衡策略。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
zookeeper宕机与dubbo直连的情况 dubbo的健壮性表现: 1监控中心宕掉不影响使用,只是丢失部分采样数据 2数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务 3注册中心对等集群,任意一台宕掉后,将自动切换到另一台 4注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯 5服务提供者无状态,任意一台宕掉后,不影响使用 6服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

!!