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