Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,利用这种方式可以使各个层之间解耦合(大概最大限度地松耦合)。

  从服务模子的角度来看,Dubbo采取的是一种非常简单的模子,要么是提供方提供服务,要么是斲丧方斲丧服务,以是基于这一点可以抽象出服务提供方(Provider)和服务斲丧方(Consumer)两个脚色。关于注册中心、协议支持、服务监控等内容,详见背面形貌。

  总体架构

  Dubbo的总体架构,如图所示:

  

  Dubbo的总体架构

  Dubbo框架计划一共分别了10个层,而最上面的Service层是留给实际想要利用Dubbo开辟分布式服务的开辟者实现业务逻辑的接口层。图中左边淡蓝配景的为服务斲丧方利用的接口,右边淡绿色配景的为服务提供方利用的接口,位于中轴线上的为两边都用到的接口。

  下面,连合Dubbo官方文档,我们分别明白一下框架分层架构中,各个条理的计划要点:

业务逻辑

服务接口层(Service):该层是与实际业务逻辑相干的,根据服务提供方和服务斲丧方的业务计划对应的接口和实现。

RPC模块

设置层(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层中分别提供了各自必要关心和扩展的接口,构建整个服务生态体系(服务提供方和服务斲丧方本身就是一个以服务为中心的)。

web服务的搭建(web服务搭建最多的什么服务)

  根据官方提供的,对于上述各层之间关系的形貌,如下所示:

在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官网直接拿来,看一下基于RPC层,服务提供方和服务斲丧方之间的调用关系,如图所示:

  

  服务调用过程

  上图中,蓝色的表现与业务有交互,绿色的表现只对Dubbo内部交互。上述图所形貌的调用流程如下:

服务提供方发布服务到服务注册中心;

服务斲丧方从服务注册中心订阅服务;

服务斲丧方调用已经注册的可用服务;

  接着,将上面抽象的调用流程图睁开,具体如图所示:

  

DubboExtension

  注册/注销服务

  服务的注册与注销,是对服务提供方脚色而言,那么注册服务与注销服务的时序图,如图所示:

  

注册服务与注销服务的时序图

  服务订阅/取消

  为了满意应用体系的需求,服务斲丧方的大概必要从服务注册中心订阅指定的有服务提供方发布的服务,在得到关照可以利用服务时,就可以直接调用服务。反过来,假如不必要某一个服务了,可以取消该服务。下面看一下对应的时序图,如图所示:

  

服务订阅与取消

  协议支持

  Dubbo支持多种协议,如下所示:

Dubbo协议

Hessian协议

HTTP协议

RMI协议

WebService协议

Thrift协议

web服务的搭建(web服务搭建最多的什么服务)

Memcached协议

Redis协议

  在通讯过程中,差别的服务品级一样平常对应着差别的服务质量,那么选择符合的协议便是一件非常紧张的事变。你可以根据你应用的创建来选择。比方,利用RMI协议,一样平常会受到防火墙的限定,以是对于外部与内部举行通讯的场景,就不要利用RMI协议,而是基于HTTP协议大概Hessian协议。

  Dubbo模块图

  Dubbo以包布局来构造各个模块,各个模块及其关系,如图所示:

  

Dubbo模块图

  可以通过Dubbo的代码(利用Maven管理)构造,与上面的模块举行比力。简单阐明各个包的环境:

dubbo-common公共逻辑模块,包罗Util类和通用模子。

dubbo-remoting长途通讯模块,相称于Dubbo协议的实现,假如RPC用RMI协议则不必要利用此包。

dubbo-rpc长途调用模块,抽象各种协议,以及动态署理,只包罗一对一的调用,不关心集群的管理。

dubbo-cluster集群模块,将多个服务提供方伪装为一个提供方,包罗:负载均衡、容错、路由等,集群的地点列表可以是静态设置的,也可以是由注册中心下发。

dubbo-registry注册中心模块,基于注册中心下发地点的集群方式,以及对各种注册中心的抽象。

dubbo-monitor监控模块,统计服务调用次数,调用时间的,调用链跟踪的服务。

dubbo-config设置模块,是Dubbo对外的API,用户通过Config利用Dubbo,隐蔽Dubbo全部细节。

dubbo-container容器模块,是一个Standalone的容器,以简单的Main加载Spring启动,由于服务通常不必要Tomcat/JBoss等Web容器的特性,没须要用Web容器去加载服务。

以为本文有资助?请分享给更多人

关注「猿助猿」成绩顶级开辟

技能交换QQ群:517877452

文章版权及转载声明:

作者:猫某人本文地址:https://360admin.cn/web-fu-wu-de-da-jian-web-fu-wu-da-jian-zui-duo-de-shen-me-fu-wu发布于09-20
文章转载或复制请以超链接形式并注明出处360站长导航网