目录
- 扩展的基本思想—拆
-
- 面向流程拆分
- 面向服务拆分
- 面向功能拆分
- 扩展方式
软件系统与硬件和建筑系统最大的差异在于软件是可扩展的,一个硬件生产出来后就不会再进行改变、一个建筑完工后也不会再改变其整体结构。相比之下,软件系统就完全相反,如果一个软件系统开发出来后,再也没有任何更新和调整,反而说明了这套软件系统没有发展、没有生命力。真正有生命力的软件系统,都是在不断迭代和发展的,典型的如 Windows 操作系统。
扩展的基本思想—拆
拆,就是将原本大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险。
合理的拆分,能够强制保证即使程序员出错,出错的范围也不会太广,影响也不会太大
常见的拆分思路有如下三种:
- 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分;
- 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分;
- 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分;
从范围上来看,从大到小依次为:流程 > 服务 > 功能,以 TCP/IP 协议栈为例:
- 展示层:负责用户页面设计,不同业务有不同的页面。例如,登录页面、注册页面、信息管理页面、安全设置页面等;
- 业务层:负责具体业务逻辑的处理。例如,登录、注册、信息管理、修改密码等业务;
- 数据层:负责完成数据访问。例如,增删改查数据库中的数据、记录事件到日志文件等;
- 存储层:负责数据的存储。例如,关系型数据库 MySQL、缓存系统 Memcache 等;
面向服务拆分
将系统拆分为注册、登录、信息管理、安全设置等服务
当然不能随便挑,否则设计就没有意义了,原因在于:不同的拆分方式,本质上决定了系统的扩展方式。
扩展方式
下面是不同拆分方式应对扩展时的优势:
-
面向流程拆分
扩展时大部分情况只需要修改某一层,少部分情况可能修改关联的两层,不会出现所有层都同时要修改。例如学生信息管理系统,如果我们将存储层从 MySQL 扩展为同时支持 MySQL 和 Oracle,那么只需要扩展存储层和数据层即可,展示层和业务层无须变动。 -
面向服务拆分
对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的服务。 -
面向功能拆分
对某个功能扩展,或者要增加新的功能时,只需要扩展相关功能即可,无须修改所有的服务。
不同的拆分方式,将得到不同的系统架构,典型的可扩展系统架构有:
- 面向流程拆分:分层架构;
- 面向服务拆分:SOA、微服务;
- 面向功能拆分:微内核架构;
这几个系统架构并不是非此即彼的,而是可以在系统设计中进行组合使用的。
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8974 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!