Dubbo学习一

  • dubbo是一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册自动发现等高效服务治理方案、可以和Spring框架无缝集成
  • RPC 指的是远程调用协议,也就是说两个服务器交互数据
核心功能
  • Remoting: 网络通信框架,提供对多种NIO框架抽象封装,包括"同步转异步"、"请求-响应"模式的信息交换方式
  • Cluster: 服务框架,提供基于接口方法的透明远程过程调用包括多协议支持,以及负载均衡、地址路由、动态配置等集群支持
  • Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或者减少机器
服务发现流程

在这里插入图片描述

  • 去中心化,双方不直接依赖注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用注册中心只是提供了服务发现
  • 服务提供者无状态,任意一台宕机,不影响使用
dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信吗?

可以通信,启动dubbo时,消费者会从zookeeper拉取注册的生产者的地址接口等数据,缓存到本地。每次调用时,按照本地存储的地址进行调用

通信框架

认使用NIO Netty框架

dubbo有哪些负载均衡策略

-** Random LoadBalance**: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高、调用次数越多,分布越均匀;

  • RoundRobin LoadBalance:轮询选取,平均分布,但是存在请求积累问题
  • LeastActive LoadBalance:最少活跃调用策略,解决慢提供者接收更少的请求
  • ConstantHash LoadBalance:一致性Hash策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊到其他提供者,避免引起提供者的剧烈变动。
  • 缺省时为Random随机调用
dubbo容错方案(集群)
  • Failover Cluster: 失败自动切换,当出现失败,重试其他服务器,通产用于读取操作,但重试会带来更长的延迟。
  • Failfast Cluster: 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
  • Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
  • Failback Cluster: 失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作。
  • Forking Cluster: 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源,可以通过forks = “2” 来设置最大并行数。
  • broadcast Cluster: 广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所提供者更新缓存或者日志等本地资源信息。
dubbo认容错方案(集群)

Failover Cluster

dubbo服务调用超时

认会重试两次

dubbo层级框架设计
  1. ** 服务接口层(Service)**:该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
  2. 配置层(Config: 对外配置接口,以ServiceConfig和ReferenceConfig为中心。
  3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务端Skeleton
  4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心。
  5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心
  6. 监控层(Monitor): RPC调用次数调用时间监控
  7. 远程调用层(Protocol):封装RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter.
  8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心。
  9. 网路传输层(Transprot):抽象mina和netty为统一接口,以Message为中心。

相关文章

在网络请求时,总会有各种异常情况出现,我们需要提前处理这...
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进...
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我...
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右...
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多...
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用...