软件架构

架构是系统的基本组织结构,涵盖包含的组件与组件之间的关系,组件与环境的关系,以及指导架构设计和演进的原则等内容。

  • 系统:系统是以特定方式组织的组件集合,以实现特定的功能。软件系统是其软件组件的集合。一个系统通常可以划分成若干个子系统。
  • 结构:结构是根据某个指导规则或原则来组合或组织在一起的一组元素的集合。元素可以是软件或硬件系统。软件架构可以根据观察者的上下文展示各个层次的结构。
  • 环境:软件系统所在的上下文或环境对其软件架构有直接的影响。这样的上下文因素可以是技术、商业、专业、操作等。
  • 利益相关者:任何对某个系统及其成功与否感兴趣或关心的个体或团体,都是利益相关者。例如,架构师、开发团队、客户、项目经理和营销团队等。
方面 见解/影响 例子
根倨架构来选抒能对系统进行优化的质量属性 系统的可扩展性、可用性、可修改性、安仝性等方而取决于在选择架构时的早期决策和权衡。经常会牺牲一个属性来提升另—个属性 必须使分散式架构来开发针对可扩展性进行优化的系统,其中元素不紧密耦合。例如:微服务、代理
架构促进早期原型设计 定义架构以允许开发组织尝试构建早期的原型,这为系统的行为提供了宝贵的洞察视角.而无需构建完整的系统 许多组织会构建服务的快速原型——通常只构建这些服务的外部 API,而忽视其余的行为。这使得早期集成测试可以执行,也能更早发现架构中的交互问题
架构允许系统以组件化方式构建 具有明确定义的架构允许重用和组合现有的易于使用的组件来实现功能,而无需从头开始实现所有内容 为服务提供可立即使用的构建块的库或框架技术。
例如:像 Django/RoR 这样的 Web 砬用程序框架.以及像 Celery 这样的任务分发框架
架构有助于管押系统变更 架构师会根据架构分离出在修改中受影响的组件和不受影响的组件。这有助于在实施新功能、性能修复等操作时将系统的变更保持在最低限度 如果正确地实现了架构,对于系统数据库读取的性能修改.只需要对数据库和数裾访问层(DataAccessLayer,DAL)进行修改即可,根本不需要触及应用程序的代码。这就足大多数现代 Web 框架的构建方式

一个定义良好的架构只会捕获那些构建系统核心功能所需的核心结构元素,这些核心结构元素一般会对系统有持久的影响,绝不是像流水账似地记录系统每个组件的所有细节。

系统的架构最好以自顶向下的结构描述,它也经常作为任务分解结构的基础。

企业架构师考虑一个组织或机构的整体业务和组织策略,并应用架构原理和实践来指导该组织或机构通过业务、信息、流程和技术变更需求执行策略。

技术架构师:技术架构师关注一个组织或机构使用的核心技术(硬件、软件、网络)。如安全架构师、信息架构师等。

系统架构师:系统架构师通常具有较高的技术关注度和较低的策略关注度。

解决方案架构师:解决方案架构师通常跨越策略与技术关注点、组织与项目范围,处在中间位置。

架构质量,一般从以下几个属性考虑:

  • 可修改性(高内聚、低耦合)
  • 可测试性
  • 可拓展性(水平扩展节点、垂直单节点容量提升)
  • 性能(响应时间、延迟、吞吐)
  • 可用性(单位时间影响的请求量最小,故障检测与预防、恢复)
  • 安全性(权限、网络、社工等防控)
  • 可部署性(结构模块化、环境区分、工具支持、标准化配置、容器化)

总结:
简介了软件架构和设计的区别,架构的特点与架构师的职能,以及架构质量属性。

参考文献:
《Software Architecture with Python》 2018. 软件架构. 北京: 机械工业出版社.


如有错误,请不吝指正。谢谢
本文为个人读书笔记,转载请注明出处:
@ MaxZing
https://xzing.github.io/
https://www.jianshu.com/u/4915ed24d1e3