Dubbo(一)—— 软件架构发展史、SOA面向服务、Dubbo框架原理
1.软件架构发展史
-
All In One架构(简单单体模式)
-
如下图,所有的模块都在Service.java类中,包括数据访问代码,控制跳转代码,业务处理代码等。
-
优缺点对比
-
优点 将所有的代码都放在一个项目中,这样研发团队的任何一个人都可以随时修改任意的一段代码,或者增加一些新的代码。这种方式对于一个新团队的创立初期,最短时间推向市场,可省去各种额外的设计,直接上手干活,争取了时间,因而是非常有意义的。
-
缺点 AllInOne架构的系统如果变更需求对部署影响非常大,每次发布的部署单元就是一个新版本的整个系统,系统内的任何业务逻辑调整都会导致整个系统的重新打包,部署、停机、再重启,进而导致了系统的停机发布时间较长。
-
每次发布上线都是生产系统的重大变更,这种部署模式大大提升了系统风险,降低了系统的可用性。
-
MVC/三层架构
-
MVC 也是一个非常常见的 3 层(3-Tier)结构架构模式,它把每个模块划分为模型层(Model Layer)、视图层(View Layer)、控制器层(Controller Layer)等部分。
优点 简单,直观,可以非常有效的上手;把系统拆解为一个个的小单元,有利于分配开发工作;根据不同的模块和分层结构,可以把系统拆分成多个不同的子项目;提高了软件开发效率。
缺点 基于单体架构下的 MVC 模式依然解决不了单体架构本身存在的问题,特别是对于可用性和扩展性的影响。
MVC 模式也存在定义不够明确,对于简单的业务场景拆解过细导致复杂度增加等问题。
所有代码仍然在同一台计算机中运行,并发能力有限。 -
RPC(Remote Procedure Call)—远程过程调用
-
优点:简单;高效,通用。使用RPC可以让一个项目部署到多个不同的计算机中去。让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。
缺点:此种模式的IP地址和端口号较乱,有一定的维护难度 -
补充:RPC框架的核心技术点:服务暴露、远程代理对象,通信
-
SOA(Service-Oriented Architecture)—面向服务的架构
-
将每台服务端的IP地址和端口号全部注册到注册中心中去,方便客户端调用。
-
注册中心可以使用zookeeper工具。
-
Dubbo就是基于SOA的一种架构。
2.SOA定义
-
SOA(Service-Oriented Architecture),中文全称:面向服务的架构。
SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。
SOA 是一种思想,一种方法论,一种分布式的服务架构。
SOA用途
- SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫做服务治理。
SOA基本特征
- 可从外部访问 随时可用 粗粒度的服务接口分级 松散耦合 可重用的服务
- 服务接口设计管理 标准化的服务接口 支持各种消息模式 精确定义的服务契约
3.Dubbo架构原理图
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器,常见的容器有Spring容器。
调用关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor。