zoukankan      html  css  js  c++  java
  • Dubbo模块介绍

    一、Dubbo 整体框架

     

      Dubbo主要有:Config 配置层、Proxy服务代理层、Registry注册中心层、Cluster 路由层、Monitor监控层、Protocol远程调用层、Exchange信息交换层、Transport 网络传输层、Serialize数据序列化层几个模块构成。

    二、Dubbo 的各个角色

      

     

       如上图所示,一个抽象出来的基本框架,consumer和provider是框架中必然存在的,Registry做为全局配置信息管理模块,推荐生产环境使用Registry,可实时推送现存活的服务提供者,Monitor一般用于监控和统计RPC调用情况、成功率、失败率等情况,让开发及运维了解线上运行情况。

    应用执行过程大致如下:
      服务提供者启动,根据协议信息绑定到配置的IP和端口上,如果已有服务绑定过相同IP和端口的则跳过
      注册服务信息至注册中心
      客户端启动,根据接口和协议信息订阅注册中心中注册的服务,注册中心将存活的服务地址通知到客户端,当有服务信息变更时客户端可以通过定时通知得到变更信息
      在客户端需要调用服务时,从内存中拿到上次通知的所有存活服务地址,根据路由信息和负载均衡机制选择最终调用的服务地址,发起调用
      通过filter分别在客户端发送请求前和服务端接收请求后,通过异步记录一些需要的信息传递到monitor做监控或者统计 

    三、模块介绍
    3.1 dubbo-config 配置层
    作用:
      负责所有dubbo相关的xml配置和注释配置转换为config对象 ( dubbo.xsd )
      Api配置的对象类,用于生成对应的register,protocol等对象
    核心类:
      ServiceBean、ReferenceBean (对应<dubbo:service /> <dubbo:reference/>)
      ProtocolConfig、RegisterConfig (<dubbo:protocol /> <dubbo:register />)

    3.2 dubbo-rpc Proxy 服务代理层
    作用:
      负责生成消费者的代理对象,以及服务提供方的Invoke
    核心类:
      ProxyFactory接口的2种实现 JdkProxyFactory JavassistProxyFactory

    3.3 dubbo-registry Registry注册中心层
    作用:
      负责服务注册与查询服务,以及注册服务的本地缓存
      支持多种协议注册发现服务,例如redis、zookeeper、Multicast
    核心类:
      接口 RegistryFactory、Registry
      AbstractRegistry 以及 ZookeeperRegistry、ZookeeperRegistryFactory

    3.4 dubbo-cluster Cluster 路由层
    作用:
      负责负载均衡的策略,以及失败策略
      缺省设置:RandomLoadBalance,FailoverCluster
      支持轮询、随机、一致性哈希等负载均衡策略
    核心类:
      接口 LoadBalance、Cluster
      RandomLoadBalance以及 RoundRobinLoadBalance等

    3.5 dubbo-monitor Monitor监控层
    作用:
      RPC调用次数和调用时间监控
      dubbo-simple 下面的dubbo-monitor-simple提供了简单的控制台
    核心类:
      核心类DubboMonitor、Statistics

    3.6 dubbo-rpc Protocol远程调用层
    作用:
      封将RPC调用、支持多种RPC协议,不包含IO通信部分
      支持RMI 、Hessian、Http、Webservice、thrift等rpc调用方式
    核心类:
      接口 Protocol Exporter Invoker
      DubboProtocol、DubboInvoker、DubboExporter、DubboCodec

    3.7 dubbo-remoting Exchange信息交换层
    作用:
      封装请求响应模式,同步转异步
      处理各种协议的通信请求,支持netty、mina、http等
      默认采用Netty进行通信
    核心类:
      接口 Server、Channel、Client
      NettyClient、NettyServer

    3.8 dubbo-common Serialize数据序列化层
    作用:
      数据序列化层和可复用的一些工具,包括序列化线程池等
      dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json
    核心类:
      接口 ThreadPool、Serialization
      FixedThreadPool、 Hessian2Serialization

    四、Dubbo使用方式:

    4.1 Main函数的生产者和消费者
      适用于纯后台服务集群
      全部采用长连接
      启动方式:com.alibaba.dubbo.container.Main
      默认加载 META-INF/spring/*.xml

    4.2 Java与Tomcat 生产者消费者
      适用于大型web应用拆分服务
      后台Main方法提供服务与tomcat Web应用消费者结合
      用web.xml解析所有xml,加载dubbo

    4.3 Xml 配置与代码配置
    生产者 :
      Xml : <dubbo:register/> Api: RegisterConfig
      Xml : <dubbo:application/> Api: ApplicationConfig
      Xml : <dubbo:protocol/> Api: ProtocolConfig
      Xml : <dubbo:service/> Api: ServiceConfig
    消费者 :
      Xml : <dubbo:register/> Api: RegisterConfig
      Xml : <dubbo:application/> Api: ApplicationConfig
      Xml : <dubbo:reference/> Api: ReferenceConfig

     

  • 相关阅读:
    Sicily 1795 Table tennis
    【转】关于使用printf和scanf对short进行输入输出的一段有趣对话
    Sicily 1561 PRIME
    【读书笔记】the TeXBook 1
    Sicily 1934 移动小球
    Sicily 1817 校歌手大奖赛
    个人总结flex各种用法(转)
    ActionScript3编译运行
    Flash & Flex组件优化的杀手锏callLater
    readResolve()方法与串行化
  • 原文地址:https://www.cnblogs.com/shawWey/p/6776456.html
Copyright © 2011-2022 走看看