一文了解Dubbo及应用场景

Dubbo的架构设计

Dubbo整体架构如下图所示:

图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。

Dubbo框架设计一共划分了10个层:

1. 服务接口层(Service)

该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。

2. 配置层(Config)

对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。

 3.服务代理层(Proxy)

服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。

 4.服务注册层(Registry)

封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。

 5.集群层(Cluster)

封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。

 6.监控层(Monitor)

RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。

 7.远程调用层(Protocol)

封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。

8. 信息交换层(Exchange)

封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

 9.网络传输层(Transport)

抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。

10.数据序列化层(Serialize)

可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

Dubbo核心组件

Dubbo角色,主要包含如下几个核心组件:

1)注册中心(registry)

生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

2)消费者(consumer)

客户端,从注册中心获取到方法,可以调用生产者中的方法。

3)生产者(provider)

服务端,生产内容,生产前需要依赖容器(先启动容器)。

4)容器(container)

生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),

5)监控(Monitor)

统计服务的调用次数与时间等。

Dubbo调用流程

对照上面的整体架构图,大致分为以下8大步骤:

1、服务提供者启动,开启Netty服务,创建Zookeeper客户端,向注册中心注册服务;

2、服务消费者启动,通过Zookeeper向注册中心获取服务提供者列表,与服务提供者通过Netty建立长连接;

3、服务消费者通过接口开始远程调用服务,ProxyFactory通过初始化Proxy对象,Proxy通过创建动态代理对象;

4、动态代理对象通过invoke方法,层层包装生成一个Invoker对象,该对象包含了代理对象;

5、Invoker通过路由,负载均衡选择了一个最合适的服务提供者,在通过加入各种过滤器,协议层包装生成一个新的DubboInvoker对象;

6、再通过交换成将DubboInvoker对象包装成一个Reuqest对象,该对象通过序列化通过NettyClient传输到服务提供者的NettyServer端;

7、到了服务提供者这边,再通过反序列化、协议解密等操作生成一个DubboExporter对象,再层层传递处理,会生成一个服务提供端的Invoker对象;

8、这个Invoker对象会调用本地服务,获得结果再通过层层回调返回到服务消费者,服务消费者拿到结果后,再解析获得最终结果。

Dubbo 高可用性的应用场景

 1、微服务架构中的 Dubbo 高可用性应用

在微服务架构中,Dubbo可以作为服务治理的核心框架,通过服务注册中心来实现服务的注册与发现,通过负载均衡策略来实现服务调用的负载均衡。同时,Dubbo还提供了多种容错机制,如重试机制、熔断机制、限流机制等,以保证服务的高可用性。

为了提高Dubbo在微服务架构中的高可用性,可以采取以下措施:

  • 使用高可靠的服务注册中心,如Zookeeper或Consul,并采用集群方式部署,以保证服务注册与发现的可用性和稳定性。

  • 配置合理的负载均衡策略,如随机、轮询、加权轮询等,以保证服务调用的负载均衡和性能优化。

  • 配置合理的容错机制,如重试、熔断、限流等,以避免因服务调用失败而导致的服务不可用。

  • 对服务进行监控和管理,及时发现服务故障并进行处理。

2、分布式系统中的 Dubbo 高可用性应用

在分布式系统中,Dubbo可以作为服务调用的核心框架,通过RPC协议来实现分布式服务之间的调用。为了保证分布式系统的高可用性和稳定性,需要对Dubbo进行性能优化和容错处理。

为了提高Dubbo在分布式系统中的高可用性,可以采取以下措施:

  • 对Dubbo进行性能优化,包括网络优化、序列化优化、线程池优化等,以提高Dubbo的性能和并发处理能力。

  • 配置合理的容错机制,如重试、熔断、限流等,以避免因服务调用失败而导致的服务不可用。

  • 配置合理的超时时间和连接池大小,以保证Dubbo的带宽消耗和资源占用在可控范围内。

  • 对服务进行监控和管理,及时发现服务故障并进行处理。

增强 Dubbo 高可用性的安全性和可靠性

以下是增强Dubbo高可用性的安全性和可靠性的几个方面:

服务治理

Dubbo的服务治理功能可以实现服务的注册、发现、路由和负载均衡等功能,可以通过对服务进行统一管理和监控,以保证服务的可靠性和安全性。同时,服务治理可以实现故障自愈、限流和熔断等机制,从而保证服务的高可用性和稳定性。

服务鉴权

在分布式系统中,需要对服务进行鉴权,确保只有授权的客户端才能访问服务,防止服务被未授权的访问和攻击。Dubbo提供了服务鉴权功能,可以通过配置访问控制列表(ACL)和认证授权机制来实现服务鉴权。

安全传输

Dubbo支持安全传输功能,可以使用SSL/TLS协议来保证数据的加密传输,防止数据被窃取和篡改。可以通过配置SSL/TLS证书来实现安全传输,同时可以通过限制客户端IP地址、使用访问令牌等方式来增强服务的安全性。

监控和日志

Dubbo的监控和日志功能可以实现对服务调用过程的监控和记录,可以通过监控数据和日志来发现和解决系统故障和安全问题。可以通过配置监控和日志中心来实现服务监控和记录。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值