Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述
Dubbo的总体架构,如图所示:
Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。
下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点:
- 服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
- 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
- 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
- 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
- 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
- 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
- 远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
- 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
- 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
- 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。
从上图可以看出,Dubbo对于服务提供方和服务消费方,从框架的10层中分别提供了各自需要关心和扩展的接口,构建整个服务生态系统(服务提供方和服务消费方本身就是一个以服务为中心的)。
根据官方提供的,对于上述各层之间关系的描述,如下所示:
- 在RPC中,Protocol是核心层,也就是只要有Protocol + Invoker + Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。
- 图中的Consumer和Provider是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用Client和Server的原因是Dubbo在很多场景下都使用Provider、Consumer、Registry、Monitor划分逻辑拓普节点,保持统一概念。
- 而Cluster是外围概念,所以Cluster的目的是将多个Invoker伪装成一个Invoker,这样其它人只要关注Protocol层Invoker即可,加上Cluster或者去掉Cluster对其它层都不会造成影响,因为只有一个提供者时,是不需要Cluster的。
- Proxy层封装了所有接口的透明化代理,而在其它层都以Invoker为中心,只有到了暴露给用户使用时,才用Proxy将Invoker转成接口,或将接口实现转成Invoker,也就是去掉Proxy层RPC是可以Run的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。
- 而Remoting实现是Dubbo协议的实现,如果你选择RMI协议,整个Remoting都不会用上,Remoting内部再划为Transport传输层和Exchange信息交换层,Transport层只负责单向消息传输,是对Mina、Netty、Grizzly的抽象,它也可以扩展UDP传输,而Exchange层是在传输层之上封装了Request-Response语义。
- Registry和Monitor实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。
从上面的架构图中,我们可以了解到,Dubbo作为一个分布式服务框架,主要具有如下几个核心的要点:
服务定义
服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。
服务注册
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
服务监控
无论是服务提供方,还是服务消费方,他们都需要对服务调用的实际状态进行有效的监控,从而改进服务质量。
远程通信与信息交换
远程通信需要指定通信双方所约定的协议,在保证通信双方理解协议语义的基础上,还要保证高效、稳定的消息传输。Dubbo继承了当前主流的网络通信框架,主要包括如下几个:
- Mina
- Netty
- Grizzly
协议支持
Dubbo支持多种协议,如下所示:
- Dubbo协议
- Hessian协议
- HTTP协议
- RMI协议
- WebService协议
- Thrift协议
- Memcached协议
- Redis协议
在通信过程中,不同的服务等级一般对应着不同的服务质量,那么选择合适的协议便是一件非常重要的事情。你可以根据你应用的创建来选择。例如,使用RMI协议,一般会受到防火墙的限制,所以对于外部与内部进行通信的场景,就不要使用RMI协议,而是基于HTTP协议或者Hessian协议。
相关推荐
【Dubbo学习笔记】 Dubbo是一款高性能、轻量级的Java RPC框架,它旨在提供面向接口的远程方法调用、智能容错与负载均衡、服务自动注册与发现等核心功能,帮助开发者构建分布式服务架构。以下是对Dubbo基础知识、...
【Dubbo入门到精通架构高级课程】是一门深入解析Dubbo框架的全面教程,旨在帮助初学者和进阶者理解并掌握这个强大的Java分布式服务框架。该课程包含了视频讲解、课件资料以及配套的源码,确保学习者能理论与实践相...
Dubbo是中国阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它提供了服务注册、服务发现、调用链路监控等功能,使得微服务架构的构建变得更加简单。而Zookeeper是Apache的一个开源项目,它是一个分布式的,...
- **微服务化**: Dubbo支持微服务架构,使得应用更易扩展和维护。 - **容器化部署**: 与Docker、Kubernetes等容器技术结合,便于在云环境中快速部署和扩展服务。 - **弹性伸缩**: 结合云平台的自动扩缩能力,可以...
Dubbo由阿里巴巴公司开发,它是一款高性能、轻量级的服务治理框架,主要应用于微服务架构中的服务治理和服务发现。本教程通过视频形式,详细讲解了Dubbo的核心概念和技术特性,包括但不限于服务提供与消费、注册中心...
以上内容都是基于Dubbo官方参考手册的摘录,它详细地解释了用户在使用Dubbo框架时可能遇到的场景和解决方案,并深入讲解了Dubbo的架构设计和运作机制。开发者可借助该文档理解如何在分布式环境下有效地构建和管理...
【Dubbo学习笔记】 本文将深入探讨Dubbo框架的核心概念及其在实际应用中的工作原理,同时结合SpringBoot和SpringCloud的整合,以及RPC(Remote Procedure Call)技术的基础知识。 一、RPC原理 RPC(远程过程调用)...
这份"Java架构方面面试及学习笔记.rar"资源包含了广泛的Java后端技术,有助于加深对Java架构的理解和提升相关技能。 1. **Java后端知识**:Java作为服务器端开发的主流语言,其后端知识涵盖了类加载机制、垃圾回收...
《Dubbo学习笔记详解》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,已经在Java开发者中广受欢迎。它主要应用于分布式系统中的服务调用,提供服务注册、服务发现、负载均衡、容错处理等核心功能,...
Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf Java基础面试题.pdf java多线程并发编程...
### Dubbo常用配置文件分析及核心源码阅读 #### 多版本支持 在微服务架构中,服务的迭代更新不可避免,而如何确保新旧版本之间...通过上述知识点的学习,我们可以更好地理解和运用Dubbo来构建高效稳定的微服务架构。
Java架构面试专题汇总包含了多个关键知识点,这些都是Java开发者在面试中常常被问到的问题,同时也是在实际工作中必备的技能。让我们一一深入探讨这些主题。 首先,`Java基础面试题`是任何Java面试的基础,它涵盖了...
很抱歉,由于无法直接访问或解析链接内容,我无法提供具体的《乔杉架构笔记 Java工程师面试突击》中的详细知识点。但作为一个专业的IT行业大师,我可以根据通常Java工程师面试中的常见主题,分享一些重要的Java编程...
Apache Dubbo是一个高性能的Java RPC框架,提供了服务治理的能力,它广泛应用于微服务架构中。Dubbo的配置模块对于管理服务的配置信息至关重要,它允许开发者通过XML、YAML、API等多种方式进行配置。 描述中提到...
Java架构面试专题汇总包含了丰富的Java开发和架构设计的知识点,是准备Java架构师面试或提升技术能力的重要资源。这份资料不仅涵盖了基础的Java语法、面向对象设计原则,还深入到高级主题如多线程、并发编程、JVM...
【标题】"学习笔记dubbo,spring,mybatis,netty源码解析-源码解析" 这是一份关于深入理解Java领域四大热门框架——Dubbo、Spring、Mybatis和Netty的源码分析学习笔记。这四个框架在现代Java开发中扮演着至关重要...
Java架构面试专题寒冬包含了丰富的Java技术面试问题及答案,是准备Java架构师面试的重要参考资料。...这份"Java架构面试专题寒冬(含答案)和学习笔记"正是为此而准备的,它将是你面试路上的得力助手。
Java架构面试专题及架构学习笔记 Dubbo服务框架面试专题及答案整理文档 BAT面试常问80题 23种设计模式知识要点整理 面试必备—API接口安全 面试必备—服务器推送技术 面试必备—匠心独运手写MyBatis框架 面试必备—...
这种架构通过眼下流行的SpringBoot和阿里巴巴吊炸天的Dubbo框架来实现。 容器化部署 你的各个微服务将采用目前处于浪潮之巅的Docker来实现容器化部署,避免一切因环境引起的各种问题,让你们团队的全部精力集中在...