你为什么需要关心软件架构——可持续架构(二)

2024-03-29 06:04

本文主要是介绍你为什么需要关心软件架构——可持续架构(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

  • 软件开发人员通常对架构实践持怀疑态度,并倾向于避免有意识地进行架构设计活动,而更倾向于由自组织团队形成的架构设计;
  • 有意识地聚焦于架构是必要的,以解决新兴架构的局限性,并满足初始的质量属性需求;
  • 软件架构受到质量属性需求(QAR)的驱动,如果在最初的迭代中不考虑它们,那么在软件系统超出最初的试点阶段并具有较少用户时,往往会出现问题;
  • 增强开发者的隐式架构决策意识,并强制将这些决策明确化,可以帮助开发团队更好地、更理性地利用从其迭代中获得的经验数据做出决策;
  • 重构和过度组件化可能导致对解决方案的片段化视图,因此没有人对发生的情况有完整的理解;
  • 现代架构实践,如持续架构和演进式架构,为使架构决策更加明确提供了工具,使开发人员能够提供更具可持续性的软件产品。

许多软件开发人员对架构实践持怀疑态度,他们将这些实践与僵化和繁琐的流程以及大量的前期规划和设计联系在一起。

因此他们认为,如果他们遵循这些实践,可能需要很长时间才能最终交付一些(甚至可能并不是)客户想要的东西。

他们更愿意专注于了解客户的需求,并使用由小而快的迭代组成的敏捷流程来交付。

遵循这些流程的一些人认为,架构将“自然而然地”形成,而不需要有意识的规划或架构聚焦。因为这些信念,他们可能不认为软件架构很重要,甚至可能不关心它。

自然形成的架构方法通常可以提供客户最初需要的功能,这是一个良好的开始。

但是,如果没有明确关注产品的可持续性,它有可能在达到预期退役之前就开始衰败,导致产品无法维护。

通过专注于关键的质量属性,如性能、可扩展性、安全性和弹性,有意识地进行软件架构可以帮助延长产品的寿命,使其在较长时间内可持续发展。

图1比较了物理世界中的前期设计和自然形成的设计方法。

在这里插入图片描述

图1:比较前期设计和自然形成的设计方法
前期设计方法在我们做的事情非常熟悉并且已经做过很多次时效果很好。例如建造摩天大楼、挖掘运河、制造产品或建造桥梁。在这些情况下,我们可以应用“最佳实践”,依靠过去的经验。

但是,在处理全新事物、我们不太了解的事物或变化非常快而“最佳实践”尚不存在的情况下,前期设计就不起作用了。在这种情况下,受控的实验,即科学革命的基础,可以帮助我们寻求对问题和可能解决方案的更深入的理解。由此产生的解决方案是“自然形成”的,但是是通过有意识的实验路径指导的。

这两种方法都有价值,但是在非常不同的情况下,一个是处理大部分已知的事物,另一个是在不断变化的世界中探索新的机遇和可能性。

严格自然形成方法的问题在于,受控实验可能不会在合理的时间内产生可持续的解决方案,并且需要接受可以接受的重做量。软件架构实践可以通过提早提出更好的问题来引导实验,从而降低交付可持续产品的时间和成本,同时仍然享受敏捷方法的好处。

架构体现在哪

正如我们在之前的文章软件架构:可能和你想的不太一样软件架构:可能和你想的不太一样中讨论的那样,架构的本质包括定义和约束产品技术方面的一系列决策。这些决策无论团队采用哪种方法,以及他们是否有意识地或默默地做出这些决策,都存在。这些决策关注产品如何满足质量属性需求或QAR。

质量属性需求(QAR)也可以是显式的或隐式的,尽管对它们做出明确的说明会使它们更容易被解决,以确保产品满足它们。例如,用户通常希望在使用产品时能够获得响应,而不管有多少其他人也在使用该产品。明确说明“响应性”的含义,以及产品可以支持多少并发用户而不会变得“无响应”,将有助于开发团队更好地决定他们的技术方案;而像“系统必须快速”或“系统必须可扩展”这样的陈述并不能帮助团队做出更好的技术决策。

评估质量属性需求并设计架构以实现这些需求涉及一定程度的前期规划,这是软件系统成功的关键驱动因素,原因如下:

  • 软件架构受到QAR的驱动,在最初的迭代中不考虑它们往往会在将软件系统部署到超出最初试验阶段并具有少量用户的情况下引发问题。因此,当必须满足关键的质量属性需求(如性能、安全性或可扩展性)时,可能需要进行重大的架构、设计和代码重构,这可能会导致软件架构具有较高的波动性。此外,如果架构设计未能强化组件的抽象和隔离,重构的成本可能会激增。
  • 有意识地聚焦于架构是必要的,以解决新兴架构的局限性,并满足初始的质量属性需求。例如,在初始架构设计中纳入一个简单的监控框架对于确保软件系统具有弹性并如预期地执行至关重要,除了提供有关系统实际使用情况的有用信息外,还提供了有关其架构设计的反馈循环。
  • 重构和过度组件化可能导致对解决方案的片段化视图,因此没有人对发生的情况有完整的理解。可能缺乏意识到正在使用哪个版本的组件,以及每个组件的服务级别协议(SLA)可能未经记录。每个服务使用单独的数据存储的微服务架构可能会导致数据一致性问题。另一方面,局势架构解决方案在可持续性上存在问题,但内部一致性高。这两种方法各有优缺点。

你的软件系统是可持续的吗

广义上说,实现“可持续性”是软件产品架构工作的重点。如果一个软件产品能够满足其当前的需求,包括QAR,而不危及其满足未来需求的能力,那么它就可以被认为是可持续的。正如我们在前面的部分中所述,质量属性需求驱动着架构,满足关键的QAR对于创建可持续的架构设计至关重要。不幸的是,随着功能增强的实施以及新的设计决策的制定,软件系统随着时间的推移会“磨损”,这可能会拉伸甚至打破原始的架构设计。导致“磨损”的常见原因包括:

  • 原始设计决策因缺乏知识或理解而被淘汰。与“磨损”系统的设计相关的决策和假设很少能够准确地记录下来。当没有人再提出或回答问题时,软件系统开始衰退。提出问题是评估软件系统健康状况的重要技术,前提是有知识渊博的资源可以回答这些问题。
  • 技术债务或经济成本接近不再可行的程度,无法实现新功能。
  • 假设通过对复制的代码进行微小更改即可实现新功能,开发人员会试图在不同组件中重用现有代码块。遗憾的是,他们可能没有完全理解原始代码所依赖的架构背景,而在不同组件中重用该代码可能会在后期产生不希望的副作用,如性能、可扩展性或可用性问题。这些软件变更增加了技术债务,并降低了系统的整体质量,除非能够迅速解决技术债务。
  • 技术的演进导致软件系统在其未设计的技术平台上运行。一些较老的软件系统经历了“灾难性的成功”,因为它们的寿命远远超出了最初的计划,它们的技术债务已经非常高且非常难以“偿还”。偿还这笔技术债务的成本可能(甚至已经)超过完全替换该软件系统的成本。
  • 假设的失败。系统性的逻辑体系,包括软件系统,在假设失败时最终会崩溃,而软件开发人员可能不会意识到他们所做的假设。隐藏的假设可以被视为对系统的限制。清晰地表达所有假设并保持这些信息的及时性非常重要。质量属性需求本身就是需要验证的假设,其实现需要进行经验测试和确认,如果可能的话,要使用自动化。性能、可扩展性、弹性(例如使用类似Netflix的“猴子军队”的方法)和安全性是很好的例子。质量属性的自动化测试的目标是持续测试假设(例如,QAR是否仍然现实?),并指导软件系统的演变。
  • 软件系统在没有考虑或理解原始架构的情况下故意添加功能而失去其架构完整性(我们可能称之为“架构熵定律”)。因此,它们可能不再具有可持续性。

评估软件架构适用性

如何知道您的软件系统正在磨损,就像您知道汽车轮胎磨损并需要更换一样?就像医生可能使用许多不同种类的工具来评估个体的健康状况(心电图、磁共振成像、CT扫描、血液检测、体格检查),不同的工具有助于团队评估软件架构的适应性。较老的系统可能难以理解,因为正如我们之前提到的,它们的设计决策和假设通常没有记录下来,而且文档,即使存在,也很可能已经过时。理解和评估它们的架构设计通常需要“软件考古学”工具和技能。总的来说,有许多可用的工具来评估软件架构的适应性,包括:

  • 架构审查(尤其是同行审查)是评估软件系统架构设计适应性的有效工具,尤其是如果它们侧重于权衡(例如,CMU/SEI的“架构权衡评估方法”)。
  • 自动化软件质量评估工具(例如CAST),但需要人们接受结果。
  • 代码审查(尤其是自动化代码审查)非常有用,可以确保代码质量。成对编程是实现此目标的另一种方法。
  • 适应性函数实现,例如自动化性能测试。
  • 仪器化框架实现,包括Web服务监控工具,以提供软件架构的反馈循环。
  • 技术债务识别和评估,包括标记增加技术债务的决策。
  • 自动化测试工具(尤其是负载/扩展/弹性测试)。
  • 缺陷趋势分析(这是技术债务的代理),需要在一致的方式下捕获数据。目标是寻找不稳定性增加的迹象。
  • 生产事故趋势分析 - 与缺陷趋势分析的要求和目标相同。
  • 安全测试工具。使用这些工具的目标是寻找风险暴露。

总结

在长达二十年的“大量预先设计”与敏捷实践之间的冲突中,软件开发人员一直在努力寻找这两种方法之间的有意义的折衷方案,并倾向于避开有意识的架构重点活动,而更多地采用从自组织团队中涌现出的架构设计。因此,他们经常认为软件架构并不那么重要。对他们正在做出的隐含决策有更深的认识,并迫使这些决策被明确地做出,可以帮助开发团队更好地利用他们从迭代中获得的经验数据,做出更加明智、更加知情的决策。现代架构实践,如持续架构和进化架构,为使架构决策更加明确提供了工具,使开发人员能够交付更具可持续性的软件产品。

这篇关于你为什么需要关心软件架构——可持续架构(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857800

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激

【系统架构设计师】黑板架构详解

黑板架构(Blackboard Architecture)是一种软件架构模式,它模仿了多个专家系统协作解决问题的场景。在这种架构中,“黑板”作为一个中央知识库,存储了问题的当前状态以及所有的解决方案和部分解决方案。黑板架构特别适合于解决那些没有确定算法、需要多个知识源(或称为“专家”)共同作用才能解决的复杂问题。 一、黑板架构的组成 黑板架构主要由以下几个部分组成: 黑板(Blackboa

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4