一、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

Dubbo模块介绍的更多相关文章

  1. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  2. webkit模块介绍

    一.Webkit模块   用到的第三方库如下:   cairo 一个2D绘图库 casqt Unicode处理用的库,从QT中抽取部分代码形成的 expat 一个XML SAX解析器的库 freety ...

  3. 【液晶模块系列基础视频】1.2.iM_RGB模块介绍

    [液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...

  4. 【液晶模块系列基础视频】1.1.iHMI43模块介绍

    [液晶模块系列基础视频]1.1.iHMI43模块介绍(上) [液晶模块系列基础视频]1.1.iHMI43模块介绍(下) ============================== 技术论坛:http ...

  5. CSS3_概述、发展史、模块介绍、与浏览器之间的关系

    一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能.    目前主流浏览器chrome.safari. ...

  6. 嵌入式系统图形库GUI核心模块介绍

    本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...

  7. IIS7 常用模块介绍说明

    1.1.0   IIS常用的功能模块介绍: 1)         静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2)         默认文档:允许您配置当用户未在 URL ...

  8. python模块介绍- multi-mechanize 性能测试工具

    python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...

  9. python模块介绍- xlwt 创建xls文件(excel)

    python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...

随机推荐

  1. $Android自定义控件风格的方法

    EditText在获取焦点后默认的边框都是黄色的,这可能和我在开发的应用的主题颜色不匹配,那怎么办呢?——用自定义的控件风格,比如说我想让EditText在获取焦点时候边框变成蓝色的,而失去焦点后边框 ...

  2. 026_默认的MapReduce Driver(最小驱动问题)

    1. 最小配置的MapReduce Driver 读取输入文件中的内容,输出到指定目录的输出文件中,此时文件中的内容为: Key---输入文件每行内容的起始位置. Value---输入文件每行的原始内 ...

  3. HttpServlet---getLastModified与缓存

    在HttpServlet中重写service方法的代码如下: protected void service(HttpServletRequest req, HttpServletResponse re ...

  4. 20145230《java学习笔记》第九周学习总结

    20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...

  5. tcp底层连接过程(c语言)

    在用了多种上位机开发环境,包括mfc.Qt.C#之后,发现它们的API都是对底层协议的(可以说是C语言)的封装,所以了解了底层协议,任意换上位机开发环境都是没问题的. 1.服务器创建套接字socket ...

  6. 【bzoj2819】Nim(dfs序+树状数组/线段树)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2819 首先根据SG定理,可得若每堆石子数量的异或值为0,则后手必胜,反之先手必胜.于是 ...

  7. java入门了解03

    ASSCII表 . 1.final关键字    (1)含义:最终的意思,修饰方法,类,变量    (2)特点:          A:修饰类,不能被继承          B:修饰的方法,不能被重载  ...

  8. 【转】Android BitmapShader 实战 实现圆形、圆角图片

    转载自:http://blog.csdn.net/lmj623565791/article/details/41967509 1.概述 记得初学那会写过一篇博客Android 完美实现图片圆角和圆形( ...

  9. Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W ...

  10. matplotlib画子图时设置总标题

    matplotlib subplots绘图时 设置总标题 :fig.suptitle(name)