• 架构方法、模型、范式、治理


    从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容


    就像我们要买一辆电动车,除了了解电动车自身的功能和性能外,还要了解住家附近是否有合适的停车场和充电桩这些环境信息,综合各方面的信息才能作出最优的决策。对软件系统的洞察也类似,不仅要了解业务所涉及的人员、角色、组织、逻辑和目的,还要了解该业务在整个企业业务体系中的位置,以及该业务和其它企业业务的关系。除此之外,还要了解软件系统的技术背景,例如当前企业已经构建的技术体系,包括运维技术体系、中间件技术体系等等,毕竟软件系统最终是要在这个技术体系中构建和运维的。通过“内”和“外”这两个维度对软件系统有了充分了解,做到深刻洞察后,才能进行后续的架构设计工作。
    架构拆分

    解决一个复杂结构的事物最有效的手段就是拆分,软件架构也是如此。以构建一个电商交易的卖场系统为例,可以把这个卖场系统拆分成几个一级子系统,包括百货卖场子系统、母婴卖场子系统、图书卖场子系统等等。每个卖场子系统可以进一步拆分成首页、商品列表页、商品详情页等二级子系统。此外,可以将购物车、订单管理等功能拆分出来独立部署,为子系统提供统一的服务。子系统和服务还能进一步拆分成更细化的模块,比如商品详情页子系统可以拆分成商品信息模块、价格模块、促销模块等;每个模块可以根据所使用的软件框架,比如一些 MVC 框架等,进一步拆分成组件,比如控制组件、逻辑组件、数据访问( DAO )组件等。
    架构分层
    1. 空间结构复杂度
    软件的空间复杂度主要来源于软件系统的结构复杂度。随着全社会信息化程度的不断提高,软件系统规模越来越大,涉及到的人、事、物越来越多,业务逻辑也越来越复杂。所以,在架构设计之前,首先要全面了解软件系统所服务的业务及它所处的背景环境。
    洞察


    通过如上的层层架构拆分,就可将一个复杂结构的软件系统拆分成一堆模块或组件,这就是软件系统的原子构件。但是,如果拆分出来的这些原子构件相互耦合在一起,关系混淆不清,不仅不能降低复杂度,反而会升高复杂度,为后续的开发带来麻烦。因此,架构拆分也需要遵循一定的规范,通常是按照架构分层来进行。前面所讨论的一级子系统,二级子系统,服务等概念,本质上就是架构分层。只有在架构分层框架下,有序的进行架构拆分,才能够有效的降低系统的空间结构复杂度。
    2. 时间演变复杂度
    软件架构在时间维度上也同样存在一系列的复杂度挑战。主要源于业务不断演变所带来的可扩展性和可维护性的要求。业务不断迭代和进化,导致软件系统需要不断的添加或修改功能,必然要求软件架构具有一定的可扩展性,能够灵活、可靠、低成本地支持系统开发。软件系统要长期在线上运行,需要稳定可靠的进行迭代发布、容量管控、限流降级等运维操作,在架构上也必须具有可维护性。另外,大家通常会忽视软件系统的可观察性。“只有看得到,才能管得到”,软件系统的可观察性是保证系统可靠运行的重要因素,因此必须将业务、性能、异常指标的监控度量等能力纳入架构设计中。
    不管是在应对空间结构复杂度的架构拆分和架构分层上,还是应对时间演变复杂度的可扩展性、可维护性、可观察性的设计上, 都要综合考虑功能、性能、安全及成本这四大因素。任何一个系统的设计都有一定的成本约束,人力资源是有限的,资金投入也是有限的,上线时间压力也是存在的,我们不能无限制的投入资源去设计一个十全十美的软件系统。因此在架构设计上要把握一个度,要在功能够用、性能达标、安全可靠成本可控之间达成妥协。
    综上所述,软件架构需要在空间结构复杂度和时间演变复杂度这两个维度上,综合考虑功能、性能、安全、成本这四个因素,平衡各方诉求进行体系化的设计。
    以上,就是做软件架构的通用思考维度。

     

     

  • 相关阅读:
    大数据技术Scala详解
    ROS2: 定义新的数据类型并使用
    Container容器
    QT6 C++获取Linux系统计算机的主机BIOS序列号源代码
    Java 获取一个时间范围内的最后一天或者第一天
    css选择器
    SSL加密
    《简约至上》读书笔记
    GitHub上传本地文件
    CICD命令
  • 原文地址:https://blog.csdn.net/swebin/article/details/133691097