欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《Java后端知识体系》系列之看完这篇你就懂了Dubbo为何物?它要干什么?

程序员文章站 2022-05-04 19:47:24
Dubbo介绍以及应用场景?Dubbo是一个分布式、高性能、透明化的RPC框架,提供服务自动注册、自动发现等高效服务治理方案,可以和Spring无缝集成。Dubbo主要应用于:1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,通过简单的配置来实现2、软服务均衡以及容错机制3、服务注册与发现,注册中心基于接口名称查询provider的ip地址,并且可以添加或者删除provider。Dubbo核心功能?Dubbo有三大核心功能:Remoting:网络通信框架,提供对多种NIO框架...

整理的一下Dubbo的一些基础知识,并不涉及源码,要是想看源码分析这篇没有任何帮助!

Dubbo介绍以及应用场景?

  • Dubbo是一个分布式、高性能、透明化的RPC框架,提供服务自动注册、自动发现等高效服务治理方案,可以和Spring无缝集成。
    Dubbo主要应用于:1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,通过简单的配置来实现
    2、软服务均衡以及容错机制
    3、服务注册与发现,注册中心基于接口名称查询provider的ip地址,并且可以添加或者删除provider。

Dubbo核心功能?

  • Dubbo有三大核心功能:
    • Remoting:网络通信框架,提供对多种NIO框架抽象封装
    • Cluster:服务框架,提供了基于接口方法的远程调用,并且包括多协议支持、软负载均衡、失败容错、地址路由、动态配置等集群支持
    • Registry:服务注册,基于注册中心目录服务,使consumer能够动态查找provider。
  • Dubbo的核心组件分为:
    • Provider:暴露服务的服务提供方
    • Consumer:调用远程服务的服务消费方
    • Registry:服务注册与发现中心
    • Monitor:统计服务调用次数以及调用时间的监控中心
    • Container:服务运行容器

Dubbo服务注册与发现的流程?

《Java后端知识体系》系列之看完这篇你就懂了Dubbo为何物?它要干什么?
如果看不懂直接到Dubbo源地址中查看原图

  • 流程说明:
    • Provider绑定指定端口并启动服务
    • Provider连接注册中心,并发送本机IP、端口、应用信息以及服务提供信息给注册中心存储
    • Consumer连接注册中心,并发送应用信息以及要订阅的服务信息到注册中心
    • 注册中心根据Consumer所订阅的服务信息匹配对应的Provider服务列表,然后发送该列表到Consumer并缓存
    • Consumer根据缓存的Provider列表选择一个发起调用
    • Provider状态变更会实时通知注册中心,再由注册中心推送至Consumer
  • 设计原因:
    • Consumer与Provider解耦,双方都可以横向的增加或减少节点
    • 注册中心可以做对等集群,这样一台注册中心挂掉可以自动切换到另一台
    • 去中心化,双方不直接依赖注册中心,即使注册中心宕机短时间内也不会影响服务调用
    • Provider无状态化,任意一台宕机不影响使用

Dubbo架构设计介绍?

《Java后端知识体系》系列之看完这篇你就懂了Dubbo为何物?它要干什么?

  • Dubbo框架设计总共划分了10层,:
    • 服务接口层(Service):该层与业务逻辑相关,根据Provider和Consumer的业务设计对应的接口和实现。
    • 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心。
    • 服务代理层(Proxy):服务接口透明代理,生成服务的客户端和服务端。
    • 服务注册层(Registry):封装服务地址的注册和发现,以服务URL为中心。
    • 集群层(Cluster):封装多个Provider的路由和负载均衡并桥接注册中心,以Invoker为中心。
    • 监控层(Monitor):RPC调用次数和调用时间监控。
    • 远程调用层(Protocol):封装RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。
    • 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心。
    • 网络传输层(Transport):抽象mina和netty为同一接口,以Message为中心。

Dubbo服务调用流程?

Dubbo 支持哪些协议,每种协议的应用场景以及优缺点?

  • dubbo:单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及Consumer远大于Provider。
    • 连接方式:长连接,
    • 传输方式:NIO异步传输
    • 传输协议是:TCP,
    • 序列化方式:Hessian二进制序列化
    • 使用范围:传入传出参数数据包叫较小,Consumer远大于Provider,
    • 适用场景:常规远程调用。
  • rmi:采用JDK标准的rmi协议实现,请求参数和响应参数对象都需要实现Serializable接口,使用了Java标准序列化机制,使用的是阻塞式短连接,传输数据包大小混合,Consumer和Provider提供个数差不多,可以传输文件。
    • 连接方式:短连接
    • 传输协议:TCP、
    • 传输方式:同步传输、
    • 序列化方式:Java标准二进制序列化,
    • 适用范围:传入传出参数数据包大小混合,Consumer和Provider提供个数差不多,可以传输文件、
    • 适用场景:常规远程服务方法调用和rmi互操作。
  • webservice:基于WebService的远程调用协议,基于Apache CXF的frontend-simple和transports-http实现的。可以和原生WebService服务互操作。
    • 连接方式:短连接
    • 传输协议:HTTP、
    • 传输方式:同步传输、
    • 序列化方式:SOAP文本序列化,
    • 适用场景:系统集成、跨语言调用。
  • http:基于HTTP表单提交的远程调用协议,使用Spring的HttpInvoke实现。
    • 连接方式:短连接
    • 传输协议:HTTP、
    • 传输方式:同步传输、
    • 序列化方式:表单序列化,即json,
    • 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件、
    • 适用场景:需同时给应用程序和浏览器JS使用的服务。
  • hessian:用于集成hessian服务,hessian底层采用http通讯,采用servlet暴露服务,Dubbo内嵌Jetty作为服务器实现。
    • 连接方式:短连接
    • 传输协议:HTTP、
    • 传输方式:同步传输、
    • 序列化方式:Hessian二进制序列化,
    • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件、
    • 适用场景:页面传输,文件传输,或与原生hessian服务互操作。
  • memcache:基于memcached实现的RPC协议
  • redis:基于 Redis实现的 RPC 协议。

Dubbo超时时间如何设置?

  • 超时时间有设置有两种方式:
    • 服务提供端设置超时时间,Dubbo推荐使用服务提供段设置超时时间,这是因为服务提供者比服务消费者更能清楚自己提供的服务特性。
    • 服务消费端设置超时时间,如果在服务消费端设置了超时时间,那么就会以服务消费者为主,优先级更高。因为服务调用方设置超时时间控制性更灵活。如果消费方超时,服务端线程不会定制,会产生警告。

Dubbo有哪些注册中心?

  • Multicast注册中心:该注册中心不需要任何中心节点,只要广播地址就可以进行服务注册与发现。
  • Zookeeper注册中心:基于分布式协调系统Zookeeper实现的,通过Zookeeper的watch机制来实现数据的变更。
  • redis注册中心:基于redis实现的,采用redis中的key/Map的数据结构实现,key存储服务名称和类型,Map中的key存储服务的URL,value存储过期时间。通过redis中的发布订阅模式来进行数据的变更。
  • Simple注册中心:这是通过Dubbo的一个服务来实现的,但是该方式不支持集群。

Dubbo集群的负载均衡有哪些策略?

Random LoadBalance(随机选取提供者策略):该策略可以动态调整Provider的权重。该策略中调用次数越多分布越均匀。

  • RoundRobin LoadBalance(轮询选取提供者策略):平均选取Provider,但是该策略会存在请求积累问题(请求次数过多,很多请求还没有处理好,更多的请求发送进来造成积累)。
  • LeastActive LoadBalance(最少活跃调用策略):这是为了解决某个Provider性能差,那么接收的请求就响应减少,也就是越不活跃的Provider所接收的请求越少。
  • ConstantHash LoadBalance(一致性hash策略):该策略基于一致性hash算法,将Provider通过一定的算法分布在一个圆环上,发出的请求会通过这些算法降落到圆环中的一个Provider上,如果一个Provider宕机了,那么将请求再重新分配,产生的影响并不会太大(如果要将一类请求都发送到指定的Provider中,那么就使用一致性hash策略)。

Dubbo为什么需要服务治理?

  • 过多的服务URL配置困难
  • 负载均衡分配节点压力过大的情况下也需要部署集群
  • 服务依赖混乱,服务之间启动顺序混乱
  • 过多的服务导致性能指标分析难过过大,需要监控

Dubbo的注册中心挂掉,发布者和订阅者之间还能通信吗?为什么?

  • 可以进行通信,启动Dubbo时,COnsumer会从Zookeeper拉取注册的Provider的地址等数据,然后缓存在本地。每次调用时直接调用本地缓存的地址。
    Dubbo的该策略时基于CAP理论来设计的,Dubbo是基于C(一致性)和A(可用性)。

Dubbo与Spring的关系?

  • Dubbo采用全Spring的配置方式,因此只需要Spring加载Dubbo的配置即可。

Dubbo使用了什么通信框架?

  • 默认使用Netty通信框架。

Dubbo的集群容错方案有哪些?默认是什么?

  • Failover Cluster(失败自动切换模式):当出现失败则重试其它服务器。通常用于读操作,但是重试会带来延迟。
  • Failfast Cluster(快速失败模式):该模式只发起一次调用,失败则报错。通常用于非幂等性的写操作,比如新增记录。
  • Failsafe Cluster(失败安全模式):当出现失败异常时,会直接忽略。通常用于写入审计日志等操作。
  • Failback Cluster(失败自动恢复模式):如果请求失败则定时重新发送。通常用于消息通知操作。
  • Forking Cluster(并行模式):该模式中会并行调用多个服务器,只要有一个服务器调用成功就返回。通常用于实时性要求较高的读操作。
  • Broadcast Cluster(广播模式):首先会广播所有Provider,并且逐个调用,任意一台报错则报错。通常用于所有提供者更新缓存或日志等本地资源信息。

默认使用Failover Cluster。

Dubbo在安全机制方面如何解决的?

  • Dubbo会通过token令牌防止用户绕过诸恶中心直连,然后需要在注册中心管理授权。Dubbo还提供了黑白名单,来控制服务所允许的调用方。

Dubbo与SpringCloud的区别?

  • Dubbo主要在于服务的调用,流量分发、流量监控和熔断。
  • SpringCloud则注重于微服务的治理,SpringCloud包含各种组件,Eureka服务注册中心、Gateway网关、Zuul网关、Ribbon负载均衡、Hystrix服务降级、熔断、服务监控、Feign动态代理。

本文地址:https://blog.csdn.net/qq_40126996/article/details/107380042