热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

这里有一份关于系统架构知识的汇总,请查收...

任何软件产品或项目前期都少不了:需求收集整理、业务规划过程,后续实施,研发过程不管采取瀑布模式还是敏捷模式,在这两者中间还是

任何软件产品或项目前期都少不了:需求收集整理、业务规划过程,后续实施,研发过程不管采取瀑布模式还是敏捷模式,在这两者中间还是少不了软件系统架构规划设计过程,只是架构设计颗粒度和目标要求不同而已,可作为后续回溯和研发总体方向。

 

基于以往项目产品实施经验和参考其他相关系统架构理论书籍等,本文对软件系统架构的总体认识理解,同时整理做系统架构设计时应遵循模式的相关理论知识,希望能给初级架构师、系统分析师、产品经理、项目经理、研发经理、研发工程师等有所参考。

 
关于架构

01 何为系统架构

虽然命题为软件系统架构,但软件基本上服务各个领域,软件系统架构与现实生活中各业务领域的架构本质是一脉相承的。

 

每个领域都有其相关的特性,运作当中就存在不同的需求。为了满足不同的需求,各领域会针对不同需求不断发展出不同的解决方法、手段或工具等。

 

而在需求提出到实现(涉及方法、工具、手段等)之间,存在一个对业务需求、业务结构、行为逻辑、属性、关系等理解及分析的过程,系统性总结出来针对该过程的抽象化描述定义就是系统架构。

 

举个例子,下面就我们所熟悉的行业领域来了解的架构是什么。

 

电影行业的系统架构过程,如下图:

从上面业务领域的系统架构(粗颗粒度)过程例子,我们可以看出架构有如下主要特性:

  • 架构是基于需求的,在一定范围内,具有抽象性、时效性、针对性;
  • 需求是有颗粒度的,所以架构需要根据需求的颗粒度来设计;
  • 需求是多方面的,需特别关注风险和约束,所以架构必须体现风险、约束条件等;
  • 架构包含了众多关联群体和他们所关注的事情,因此架构要体现多维度的视角。

 

02 设计的前提条件

在开始进行系统架构分析设计时,有几点是需要遵守的:

  • 只针对某一领域、某一时段内存在的业务需求,服务于某特定领域业务范围需求,不可本末倒置;
  • 系统架构设计是需求驱动的,是会随着需求变化而变化的,首要条件必须要了解需求;
  • 系统架构只是一个系统性的抽象化描述定义;
  • 系统架构是需要充分考虑约束条件、风险的;
  • 系统架构为所有涉众的人提供一个共同的远景目标,但架构不包括每个部分的细节。

 

03 软件系统架构定义

国外相关书籍关于软件系统架构的一种定义如下:

 

软件架构为探索如何以最佳方式划分一个系统、如何标识组件、组件之间如何通信、信息如何沟通、组成系统的元素如何能够独立地进化,以及上述的所有东西如何能够使用形式化的和非形式化的符号加以描述。

 

简化理解来说:

软件系统架构可以说是为软件系统提供一个结构、行为和属性的高级抽象过程。

 

04 软件系统架构价值

软件的系统架构设计体现的价值如下:

  • 保持系统完整和质量,系统的结构在需求变更中保持弹性。
  • 控制复杂度,架构是一个不同问题和关注点的分解过程。
  • 可复用,架构通过协助行为定义了边界,从而使各种粒度可以重用。
  • 可预见/测试,系统结构、行为、属性在开始就定义了系统的原型。
  • 改善项目沟通和管理,不同视图支撑不同涉众的关注点(例如组件或者子系统的并行开发)。

架构追求系统的长期效益,没有架构的系统是代价高昂的,架构优劣可以用“需求变更成本”衡量。

 
软件系统架构认识误区

现实中,软件行业的相关人员在整个软件研发实施周期过程中,对软件系统架构设计存在一定认识误区。

下面是主要常见认识误区。

 

01 架构 = 系统分析

  • 宏观而言,都需要对需求进行分析。
  • 在传统软件开发过程中,系统分析更侧重于解决某一领域问题,配合进行可行性分析,强调与客户(需求方)的沟通,分析/讨论/评估不确定的需求,给出系统的设计解决方案。
  • 架构则是针对确定的需求进行分析,并充分考虑领域外的需求,对软件系统提供结构、行为和属性的抽象,对软件系统逻辑、运行、开发和部署各个方面给出表述。

 

02 架构 = 设计

  • 架构是设计的一个表象,它关注关键元素,特别是对于性能、可靠性、成本、适用性等有重大影响的元素。
  • 架构定义了一些重要的设计决策,是高层设计规约。
  • 架构不关心每个独立元素的详细设计。

 

03 架构 = 蓝图

  • 架构定义了基础架构(蓝图),但更侧重揭示架构元素间的互操作关系。
  • 架构还需要表达代码运行时的结构。
  • 架构需要使用多个视图,从多个维度表述不同涉众的不同关注点。

 

04 架构 = 技术框架

  • 框架实现了架构风格/模式所要求的一些设计规约。
  • 框架是设计过程赖以实现的平台,是开发架构的组成部分。
  • 架构是一个动态过程,而框架是一个相对稳定的工具或者设计模型。

 
软件系统架构设计

 

01 设计关注点

软件系统架构是一个演进的过程,也可以理解是有生命周期的, 每一阶段的架构都可能被新的架构推翻,没有完美、恒定的架构。

 

进行架构设计时我们常关注下面四个方面:

 

 

架构关注的是设计的高层规约,不关注组成元素内部的细节。

 

国外相关书籍对“风格/模式“的一定义如下

 

一种架构风格是一组协作的架构约束,这些约束限制了架构元素的角色和功能,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系。

 

好比我们常提及的面向对象、面向方面、服务组件化架构、SOA、ESB、微服务、消息总线、客户端/服务端等等都是“风格/模式”。

 

02 应具备的特性

根据前面谈到业务领域的架构特点,软件系统架构设计也应具备如下几点主要特性:

 

A. 相对性

B. 时效性

C. 前瞻性

D. 约束性

 

同时对于开发人员来说,技术架构作为系统架构的一部分,好的架构还应该关注以下指标:

 

可靠性、可移植性、可重用、可配置、可定制、可扩展、可进化、可伸缩、效率、性能等。

 

(具体含义可参考相关的软件架构设计书籍定义)

 

03 设计流程表述

关于如何开展软件系统架构设计,综合一些方法论和业界目前普遍的做法,归纳总结整体流程如下图。

 

 

对于架构视图,不同维度存在各种视图,目前软件行业内多采用一种软件架构设计方法学:4+1视图模型,使用了5种协作的视图来对软件架构的描述加以组织。每种视图致力于解决一组特定的关注点。

 

以上为4+1视图模型图(摘自国外相关书籍),即场景视图、逻辑视图、开发视图、过程视图、物理视图5种视图描述。但实际过程中并非每种软件系统架构都需要全部涉及到这5种视图,需根据实际业务需求而定。

(4+1视图模型详细说明可参考相关书籍或网上资料)

 

04 实际设计参考维度

前面提到软件系统架构设计所需关注的要点和方法理论,在目前软件研发实施周期过程中,进行软件系统架构设计时,系统架构师经常会考虑涉及的主要维度如下:

上图也是我们实际软件系统架构设计时,经常会用到的参考总图,但并不是每种软件系统都需要涉及到5个架构,需根据具体实际需求综合考量使用。

 

(每种架构详细说明可参考相关书籍或网上资料)

 

总结

以上只是关于软件系统架构的概述,提及到的系统架构相关的定义、关注点、价值、目前业界流行的架构设计方法论。所有理论知识参考软件系统架构设计相关书籍和之前多年项目实施经验及验证总结。

最后总结出来的经验:需求是系统架构的前提,只有深刻理解需求,才可能设计出优秀的软件架构。没有完美的软件系统架构,只有适合的软件系统架构;没有不变的软件系统架构,只有不断演进变化系统架构。


推荐阅读
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 数据集成策略:ETL与ELT架构对比及工具选择
    随着企业信息化的深入发展,‘数据孤岛’问题日益突出,阻碍了数据的有效利用与整合。本文探讨了如何通过构建数据仓库解决这一问题,重点分析了ETL与ELT两种数据处理架构的特点及适用场景,为企业选择合适的ETL工具提供了指导。 ... [详细]
  • ArchSummit深圳2014将于7月18日拉开帷幕,所有讲师已确认,涵盖9个热门话题,共36场精彩报告。InfoQ中文站提供了详细的讲师和报告列表。 ... [详细]
  • Spring Cloud Config: 高效统一的配置管理解决方案
    Spring Cloud Config 是一个用于集中管理和分发应用程序配置的工具,支持多环境下的配置管理(如开发、测试和生产环境),并且能够根据需求动态调整配置参数(例如,在大型促销活动期间增加数据库的最大连接数)。 ... [详细]
  • mysql 分库分表策略_【数据库】分库分表策略
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多, ... [详细]
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • 微服务架构详解及其入门指南
    本文详细介绍了微服务的基本概念、发展历程、与传统架构的区别及优势,并探讨了适合采用微服务架构的场景。此外,文章还深入分析了几个主流的微服务开发框架,特别是Spring Cloud的组成和特点。 ... [详细]
  • API网关作为微服务架构中的关键组件,扮演着系统与外部世界交互的唯一接口角色。它不仅封装了系统的内部复杂性,还为不同客户端提供了个性化的API接口。本文将探讨API网关的重要性及其核心功能。 ... [详细]
  • 历经两个月,他成功斩获阿里巴巴Offer
    经过两个月的努力,一位普通的双非本科毕业生最终成功获得了阿里巴巴的录用通知。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 运用DDD分层架构优化微服务代码设计
    在微服务实施过程中,确定合理的代码结构至关重要。本文探讨了如何利用领域驱动设计(DDD)的分层架构来优化微服务的代码模型,确保系统的可维护性和扩展性。 ... [详细]
author-avatar
BBCong
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有