优府网首页
设为首页
点击进入优府网RSS订阅中心
当前位置:首页 >财经 > 商务 > 正文

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架

发布者:纪军伟       分享 评论 投稿
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和 Spring框架无缝集成。主要核心部件: Remoting: 网络通信框架,实现了sync-over-async和request-response消息机制.RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能Regis…

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

主要核心部件:

 

  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。
下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点:

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

2. 配置层(Config):对外配置接口,以ServiceConfigReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。

3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory

4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactoryRegistryRegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。

5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为ClusterDirectoryRouterLoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。

6. 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactoryMonitorMonitorService

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

8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以RequestResponse为中心,扩展接口为ExchangerExchangeChannelExchangeClientExchangeServer

9. 网络传输层(Transport):抽象minanetty为统一接口,以Message为中心,扩展接口为ChannelTransporterClientServerCodec

10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInputObjectOutputThreadPool

从上图可以看出,Dubbo对于服务提供方和服务消费方,从框架的10层中分别提供了各自需要关心和扩展的接口,构建整个服务生态系统(服务提供方和服务消费方本身就是一个以服务为中心的)。
根据官方提供的,对于上述各层之间关系的描述,如下所示:

· 在RPC中,Protocol是核心层,也就是只要有Protocol + Invoker + Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。

· 图中的ConsumerProvider是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用ClientServer的原因是Dubbo在很多场景下都使用ProviderConsumerRegistryMonitor划分逻辑拓普节点,保持统一概念。

· 而Cluster是外围概念,所以Cluster的目的是将多个Invoker伪装成一个Invoker,这样其它人只要关注ProtocolInvoker即可,加上Cluster或者去掉Cluster对其它层都不会造成影响,因为只有一个提供者时,是不需要Cluster的。

· Proxy层封装了所有接口的透明化代理,而在其它层都以Invoker为中心,只有到了暴露给用户使用时,才用ProxyInvoker转成接口,或将接口实现转成Invoker,也就是去掉ProxyRPC是可以Run的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。

· 而Remoting实现是Dubbo协议的实现,如果你选择RMI协议,整个Remoting都不会用上,Remoting内部再划为Transport传输层和Exchange信息交换层,Transport层只负责单向消息传输,是对MinaNettyGrizzly的抽象,它也可以扩展UDP传输,而Exchange层是在传输层之上封装了Request-Response语义。

· RegistryMonitor实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。

从上面的架构图中,我们可以了解到,Dubbo作为一个分布式服务框架,主要具有如下几个核心的要点:

服务定义
服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。

服务注册
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:

· Multicast注册中心

· Zookeeper注册中心

· Redis注册中心

· Simple注册中心

服务监控
无论是服务提供方,还是服务消费方,他们都需要对服务调用的实际状态进行有效的监控,从而改进服务质量。

远程通信与信息交换
远程通信需要指定通信双方所约定的协议,在保证通信双方理解协议语义的基础上,还要保证高效、稳定的消息传输。Dubbo继承了当前主流的网络通信框架,主要包括如下几个:

· Mina

· Netty

· Grizzly



(财经责编:常秀美 )
标签:jjw8610.hi@163.com 2015年08月20日 14:51   [查看原文]  
相关阅读
    请选择您浏览此新闻时的心情
    疑问
    疑问

    0
    难过
    难过

    0
    愤怒
    愤怒

    0
    喜欢
    喜欢

    0
    无聊
    无聊

    0
    鼓掌
    鼓掌

    0
    惊奇
    惊奇

    0
    骂人
    骂人

    0
    (521)
    (521)
    分享到: 投稿
    最新评论
    推荐信息
    资讯 国内 军事 体育 篮球 足球 娱乐 电影 电视 财经 经济 消费 科技 手机 电商 女性 情感 时尚
    文化 历史 文学 旅游 周边 出境 美食 家常 健康 房产 房价 调控 汽车 新车 品牌 教育 视频 博客
    关于优府网联系方式 网站地图服务条款
    版权所有:山西优府信息技术开发有限公司 Copyright 2008-2013 All rights reserved.
    增值电信业务经营许可证广播电视节目制作许可证固定刊物许可证网络文化经营许可证