想了很久,学习是一个过程,应该学会分享和输出,才会有价值和收获,所以下定决心要把自己所看的源码笔记分享出来。
这是 Dubbo 源码第一篇,计划后面会写 Spring 源码、Tomcat 源码、Zookeeper 源码、Mybatis 源码、Netty 源码、RocketMQ 源码、SpringBoot 源码、SpringCloud 源码、最后 Nginx 源码、Mysql 源码 和 JVM 源码。
这是一个过程,可能需要一年,也许需要四年,五年。我希望可以坚持写下去,时间就像海绵里的水,挤挤总会有的,O(∩_∩)O哈哈~
一、源码下载
可以 git clone https://github.com/apache/dubbo.git
也可以直接 download
二、背景
服务治理框架的诞生并不是一蹴而就,任何新技术的产生都是站在之前技术积累的基础上,这样就可以缩短技术更新时间,也更容易突破。
1.ORM
从很早前的单体架构,所有模块在同一个应用中。这样做的好处是,减少通信延迟或者通信不可用,维护容易。坏处就是,一个模块更新需要停止整个应用,还有就是模块与模块之间耦合度太高,并发不够。前端和后端不分离,逻辑和业务不分离。就算是不断增加机器,一台机器一个应用,也会遇到瓶颈。
2.MVC
这里的 MVC 是指前端 WEB 架构,官网说的垂直应用,其实就是分治思想。一个很大的应用,拆分成很多小的应用,但是数据库是同一个。我个人理解,前端和后端分离,业务和逻辑分离。
3.RPC
RPC 叫做远程过程调用,意思是从一台机器调用另外一台机器的服务。为什么会有 RPC 出现呢?上面提到了分治思想,大应用拆成N个小应用,应用与应用之间需要通信,那些经常被调用的服务,稳定的服务,就可以抽出来提高服务复用。这些核心服务组成一个公共的模块,也就是所谓的中台。而这些独立出来的服务,可以叫做微服务。每一个微服务可以定义成一个产品,由独立的团队来支持研发和运维,开发语言独立,数据存储独立。这些服务都是部署在不同的机器上面,也就是分布式部署。服务要实现通信,就需要 RPC 框架的出现。
4.SOA
微服务,分布式架构,这些技术的出现,解决了高并发,高可用,复用,扩展等等一些问题,但同时也带来了一些问题。首先服务独立,越来越多的服务,运维起来就复杂。其次调用过程复杂,分布式事务,分布式锁。这个时候需要 SOA 框架来统一管理,提高资源利用率,提高可用性,容错性。
三、架构
1.调用依赖层架构
2.代码层架构