31-可扩展架构的基本思想和模式

前言

软件系统与硬件和建筑系统的最大差异就在于软件是可扩展的,而硬件和建筑是不可扩展的。一个硬件生产出来后是不会做修改的,建筑也是一样。

软件系统的这种可扩展性,即是其魅力,也是其难点。其魅力在于我们可以不断的到软件进行扩展,让软件系统拥有更多的功能和特性,满足新的需求或者顺应技术发展的趋势。难点在于如何用最小的代价去扩展系统,改动的越多,投入也越大,出错的可能性也越大。

可扩展的基本思想

可扩展的基本思想可以总结为一个字:

拆就是把原先大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无需整个系统到处修改,通过这种方式来减小修改的范围,从而减少风险。

按照不同的思路来拆分系统,就会得到不同的架构。常见的拆分思路有:

  • 面向流程拆分:将整个业务系统拆分成几个阶段,每个阶段作为一部分。
  • 面向服务拆分:将系统提供的服务进行拆分,每个服务作为一部分。
  • 面向功能拆分:将系统提供的功能进行拆分,每个功能作为一部分。

从范围来看,流程>服务>功能。

以一个学生信息管理系统为例:

  • 面向流程拆分: 展示层->业务层->数据层->存储层
    • 展示层:负责用户业务设计,不同的业务展示不同的页面。
    • 业务层:负责具体业务的处理。
    • 数据层:负责完成数据的访问。
    • 存储层:负责数据的存储。
  • 面向服务的拆分: 将系统拆分成注册、登录、信息管理、安全设置等服务。
  • 面向功能的拆分: 可以对每个服务进行更细粒度的拆分,拆分成各个功能。例如注册服务可以包含多种方式的注册。

不同的拆分方式,本质是决定了系统的可扩展方式

可扩展方式

不同的拆分方式对应扩展时的优势:

  • 面向流程的拆分:

    扩展时大部分时候只需要修改某一层,少部分情况下可能需要修改关联的二层,不会出现所有的层都要同时修改。如我们将存储层从mysql扩展到mysql和oracle,只需要修改存储层和数据层即可。

  • 面向服务的拆分:

    对某个服务进行扩展时,或者要增加新的功能时,只需要扩展相关服务即可,无需修改所有的服务。

  • 面向功能的拆分: 对某个功能进行扩展时,或者要增加新的功能时,只需要扩展要关的功能即可,无需修改所有的功能。

不同的拆分方式将得到不以有架构:

  • 面向流程的拆分:分层架构
  • 面向服务的拆分:SOA、微服务
  • 面向功能的拆分:微内核架构

要注意的是:这一个架构不是非此即彼的关系,是可以组合使用的。以学生管理系统为例:架构可以是这样子的:

  • 整体是采用面向服务架构中的微服务架构:拆分成注册服务、登录服务等,每个服务是一个独立运行的子系统。

  • 其中注册服务本身又是面向流程的拆分

  • 登录服务采用面向功能拆分的微内核架构

上次更新: 3 个月前