前几天看到阿里重启维护Dubbo了,实属一大幸事。研究开源代码的第一个目标是Dubbo,中间由于工作比较忙,断断续续的看了一段时间,回过头来发现只是零散的去看,并没有完整的、系统的去进行。故将平时看过的东西再进行记录、整理、归纳,逐渐形成一个完整的体系,同时也希望能够以此勉励自己坚持下去,形成良好的习惯。
刚开始研究学习开源框架,先在前人的基础上进行,逐渐找到学习研究的方法。
参考文档:
(1)Dubbo官方参考网站:http://dubbo.io/ 今天点进去看,发现已经由原来的中文版变成了英文版,内容也有所跟新,顺便找了一下中文版的参考文档:
Dubbo官方参考文档:
https://www.gitbook.com/@dubbo
(2)http://wenku.baidu.com/link?url=w6W0hBn4B5jz0TpbOFlIiKZgTwPGyc0BrbDiLZxC4MfH2y1aXSww7EswFLxDfY4ilQ1K1Ohr-26ylS7-h7t4r2lGd5XT68ezqzYPK8Y5qii dubbo源码解析2.0
基本概念:
1、RPC
2、SOA(资源调度和治理中心)
3、failover 又称故障切换,指系统中其中一项设备或服务失效而无法运作时,另一项设备或服务即可自动接手原失效系统所执行的工作。
Dubbo经典架构图:
4、Dubbo 节点角色说明:
Provider:暴露服务的服务提供方
Consumer:调用远程服务的服务消费方
Registry:服务注册与发现的注册中心
Monitor:统计服务的调用次数和调用时间的监控中心
Container:服务运行容器
各个节点角色说明:
Provider:暴露服务的服务提供方
Consumer:调用远程服务的服务消费方
Registry:服务注册与发现的注册中心
Monitor:统计服务的调用次数和调用时间的监控中心
Container:服务运行容器
调用关系说明:
0:服务容器负责启动,加载,运行服务提供者
1:服务提供者在启动时,向注册中心注册自己的服务
2:服务消费者在启动时,向注册中心订阅自己所需的服务
3:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
长连接:
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
4、注册到zookeeper的过程:
AnnotationBean.postProcessBeforeInitialization() -> AnnotationBean.refer() -> ReferenceConfig.get() -> Reference.init() -> Reference.createProxy() -> RegistryProtocol.refer() -> RegistryProtocol.doRefer() -> FailbackRegistry.register() -> ZookeeperRegistry.doRegister()
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
7、Dubbo 的核心机制:
(1)设计模式
(2)bean加载
(3)扩展点机制
(4)动态代理
(5)远程调用流程
(1)a、工厂模式:
b、装饰器模式:
c、观察者模式:
d、动态代理模式:
8、Dubbo使用的扩展点获取:com.alibaba.dubbo.common.extension.ExtensionLoader类 Java的SPI机制
可参考:https://my.oschina.net/u/3729778/blog/1575581