【架构设计】31-可扩展架构的基本思想和模式

前言

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

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

可扩展的基本思想

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

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

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

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

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

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

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

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

可扩展方式

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

  • 面向流程的拆分:

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

  • 面向服务的拆分:

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

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

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

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

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

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

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

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


   转载规则


《【架构设计】31-可扩展架构的基本思想和模式》 孤独如梦 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
【架构设计】33-深入理解微服务架构:银弹 or 焦油坑? 【架构设计】33-深入理解微服务架构:银弹 or 焦油坑?
微服务与SOA关系从以下几个方面来说明二者的关系: 服务粒度 SOA的服务粒度要更粗一点,微服务的粒度要细一点。对于大型企业来讲,“员工管理系统”是SOA的一个服务,而如果采用微服务架构,则“员工管理系统”会拆分成更细的服务,比如“员
2019-05-29
下一篇 
【架构设计】47-开源项目:如何选择、使用以及二次开发 【架构设计】47-开源项目:如何选择、使用以及二次开发
47-开源项目:如何选择、使用以及二次开发前言软件开发领域有一个流行的原则:DRY,Don’t repeat yourself。即不要重复造轮子。开源项目的主要目的就是共享,其实就是为了大家不要重复造轮子。 引入开源项目可以节省大量的人力和
2019-05-29
  目录