C. 高可扩展架构
概述
- 前提:都是由普通人组成的团队,而不是高手组成的团队
- 基本思想:基本思想都可以总结为一个字:拆
- 思路:不同的拆分方式,本质上决定了系统的扩展方式
- 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。
- 优缺点
- 扩展时大部分情况只需要修改某一层,少部分情况可能修改关联的两层,不会出现所有层都同时要修改。例如学生信息管理系统,如果我们将存储层从 MySQL 扩展为同时支持 MySQL 和 Oracle,那么只需要扩展存储层和数据层即可,展示层和业务层无须变动。
- 优缺点
- 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。
- 优缺点
- 对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的服务。同样以学生管理系统为例,如果我们需要在注册服务中增加一种“学号注册”功能,则只需要修改“注册服务”和“登录服务”即可,“信息管理服务”和“安全设置”服务无须修改。
- 优缺点
- 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。
- 对某个功能扩展,或者要增加新的功能时,只需要扩展相关功能即可,无须修改所有的服务。同样以学生管理系统为例,如果我们增加“学号注册”功能,则只需要在系统中增加一个新的功能模块,同时修改“登录功能”模块即可,其他功能都不受影响。
- 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。
烟囱式系统建设模式
- 描述:每个业务都重复建设一套系统
- 弊端
- 重复功能建设和维护带来的重复投资
- 打通“烟囱式”系统间交互的集成和协作成本高昂
- 不利于业务的沉淀和持续发展
分层架构
- 类型
- C/S、B/S架构
- MVC、MVP架构
- 逻辑分层架构
- 核心:需要保证各层之间的差异足够清晰,边界足够明显,让人看到架构图后就能看懂整个架构
- 本质:分层架构之所以能够较好地支撑系统扩展,本质在于隔离关注点(separation of concerns),即每个层中的组件只会处理本层的逻辑。
- 约束:不能跨层访问
SOA:面向服务的架构
- 背景:SOA 出现 的背景是企业内部的 IT 系统重复建设且效率低下,主要体现在:
- 企业各部门有独立的 IT 系统,比如人力资源系统、财务系统、销售系统,这些系统可能都涉及人员管理,各 IT 系统都需要重复开发人员管理的功能。例如,某个员工离职后,需要分别到上述三个系统中删除员工的权限。
- 各个独立的 IT 系统可能采购于不同的供应商,实现技术不同,企业自己也不太可能基于这些系统进行重构。
- 随着业务的发展,复杂度越来越高,更多的流程和业务需要多个 IT 系统合作完成。由于各个独立的 IT 系统没有标准的实现方式(例如,人力资源系统用 Java 开发,对外提供 RPC;而财务系统用 C# 开发,对外提供 SOAP 协议),每次开发新的流程和业务,都需要协调大量的 IT 系统,同时定制开发,效率很低。
- 概念
- 服务
- ESB:企业服务总线 各种协议、类型的转换
- 松耦合:减少服务依赖和相互影响
- 实践弊端
- 制定了统一的标准,系统一旦落地,就会变得稳定。一旦的新的业务需求进来之时,并且现有系统不能够满足新业务需求时,会出现两种情况:
- 服务提供者团队心理上拒绝提供支持,导致新业务方不得不重新实现一套系统
- 服务提供方愿意改造现有系统,但是由于现有业务的模型、业务逻辑做较大的改造,在改造带来的风险和满足新业务需求的选择中,更多的团队选择了放弃对新业务需求的支持
- 制定了统一的标准,系统一旦落地,就会变得稳定。一旦的新的业务需求进来之时,并且现有系统不能够满足新业务需求时,会出现两种情况:
微服务架构
微内核架构
- 概念
- 微内核架构(Microkernel Architecture),也被称为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构
- 本质
- 微内核的架构本质就是将变化部分封装在插件里面,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。
- 基本架构
- 核心系统
- 插件模块
- 关键点
- 插件管理:核心系统提供插件注册表(可以是配置文件,也可以是代码,还可以是数据库),插件注册表含有每个插件模块的信息,包括它的名字、位置、加载时机(启动就加载,还是按需加载)等。
- 插件连接:常见的连接机制有 OSGi(Eclipse 使用)、消息模式、依赖注入(Spring 使用),甚至使用分布式的协议都是可以的,比如 RPC 或者 HTTP Web 的方式。
- 插件通信:插件通信指插件间的通信。虽然设计的时候插件间是完全解耦的,但实际业务运行过程中,必然会出现某个业务流程需要多个插件协作,这就要求两个插件间进行通信。由于插件之间没有直接联系,通信必须通过核心系统,因此核心系统需要提供插件通信机制。这种情况和计算机类似,计算机的 CPU、硬盘、内存、网卡是独立设计的配件,但计算机运行过程中,CPU 和内存、内存和硬盘肯定是有通信的,计算机通过主板上的总线提供了这些组件之间的通信功能。微内核的核心系统也必须提供类似的通信机制,各个插件之间才能进行正常的通信。