拆分巨石:将MVPS和MVAS应用于遗留应用程序——可持续架构(六)

前言

  • MVP 和 MVA 的概念不仅适用于新应用程序;它们提供了一种新颖的方式来审视对遗留系统的范围变更,以防止过快地承担过多的变化 - 参见图1。
  • MVA 可以帮助组织评估和更新其技术标准,通过展示新技术如何真正对支持 MVP 至关重要。
  • 创建 MVA 可以帮助团队评估哪些遗留系统的部分现在需要现代化,哪些部分可以等待。
  • 遗留应用程序,由于其经常是使命关键的,需要特别关注可持续性。
  • 最后,有必要记住,今天的遗留应用程序在很多情况下曾经是闪亮而新颖的。将 MVA 视为每个新发布的一部分有助于保持应用程序的新鲜度。

遗留应用程序通常陷入慢车道:老化和脆弱,理解不足且几乎得不到支持,基于老化技术,它们往往是最后一个受益于诸如持续交付之类现代概念的应用程序。然而,由于它们潜在的不稳定性,实际上它们是最能从诸如最小可行产品(MVP)及其相关的最小可行架构(MVA)等概念中受益的应用程序。
这是怎么可能的呢?大多数遗留应用程序相对来说是巨石的,很难逐步发布。
一旦你意识到每个发布都是价值实验,其中发布要么提高了客户体验的价值,要么没有,你就会意识到每个发布,即使是遗留应用程序的发布,也可以从MVP的角度来考虑。每个发布实际上都是一个与您希望提供的附加价值相关的MVP。因此,每个发布也都有一个MVA。MVP和MVA等概念为团队提供了对他们所测试的有关客户真正价值变化的假设的绝对必要性的极致关注。
由于MVP概念最常与新产品相关联,因此将现有应用程序的每个新版本视为最小可行增量可能更好,即团队认为将产生客户体验价值改进的最小变化集。但由于“MVP”一词已经被广泛使用,我们将继续使用它。
正如我们在之前的文章中最小可行产品需要最小可行架构所指出的,MVA是确保MVP满足其质量属性需求(QARs)所需的最小架构量。由于对我们而言,架构主要是关于技术决策,因此遗留应用程序发布的MVA代表了团队需要进行的最小应用程序更改集,以确保发布支持其QARs。
发布准备的MVP标准通常集中在发布是否能让团队测试其对客户期望结果的理解上;MVP并不是“技术概念验证”。同样,通过评估对遗留应用程序进行的更改是否能确保发布能够满足应用程序的QARs,并且通过这样做能够可持续地满足客户需求,可以确定MVA的发布准备情况。

图1:MVP和MVA提供了一个以新的方式看待遗留系统的“视角”
流程挑战
任何发布的标准之一,尤其是组织所依赖的应用程序,是该应用程序已通过一组测试(最好是自动化的),验证发布候选版本是否满足其质量属性要求(QARs)。进行手动测试以评估QARs太繁琐且容易出错,不足以保证可靠性。缺乏自动化测试来确定发布是否符合其功能要求和QARs是阻止组织以小批量交付价值的因素之一。

其他因素有时会阻止组织以小批量方式发布,导致它们以相对较大、复杂的增量发布变更。这些因素包括:

  • 缺乏有效的构建、测试和发布自动化。当交付流程的重要部分是手动的时候,手动步骤引入的延迟和错误会阻碍组织迅速行动。即使部分自动化,团队之间的交接引入的延迟也会减慢速度。虽然这些问题的解决方案层出不穷,但它们要求组织改变工作方式,有时还要改变组织的结构。
  • 应用程序之间的紧密耦合。当应用程序共享数据或组件时,对其中一个应用程序的更改可能需要重新发布另一个应用程序。具有紧密耦合的遗留应用程序的组织可能很难进行小的更改,因为他们无法承担重新发布可能需要重新发布的所有应用程序的时间或精力。
  • 繁琐的发布批准流程。由于许多遗留应用程序在某种程度上已成为业务关键,因此需要从可能并不真正了解与变更相关的技术问题的高级业务主管那里获得更改批准。当他们需要对更改的范围和风险感到满意时,将更改转化为通用术语所需的时间和精力可能是相当可观的。
  • 监管限制。受监管行业的组织可能需要获得监管批准以发布新产品,或者对现有产品进行重大改变。他们还需要向监管机构报告客户对这些产品的使用情况。他们很难利用MVP概念,因为监管机构通常希望了解新产品或更改产品的各个方面。使用MVP的整个目的是通过真实的客户体验数据回答关键问题,因此组织陷入了一种进退两难的境地;他们无法发布产品来测试MVP,但他们又无法完全定义新产品(或更改的产品)而没有经验。这些公司似乎注定要受到监管限制的困扰,因为他们可能会过度投资于客户不需要的产品,因为他们无法及早和逐步地测试想法。
  • 专业知识短缺(或丧失)。在某些情况下,组织可能不再真正了解遗留应用程序的业务逻辑或应用程序所基于的技术。解决此问题的一种方法是逐步用更有效的现代解决方案替换仍然相关的遗留应用程序部分,逐个解决客户结果。这样做,组织可能会发现许多遗留应用程序不再相关或不再需要,但要弄清楚这一点需要时间,在短期内,组织将面临一个更加碎片化的解决方案,存在永远无法完全解决的风险,因为其他挑战总是会出现。

除了监管限制外,这些问题都可以解决,但需要时间和共同努力。

偿还技术债务的困境

在有机会偿还债务时,听起来好像是件好事,对吧?

有时组织会受到诱惑,要做额外的技术工作,现代化,或减少他们的技术债务,因为,正如他们可能合理化的解释的那样,"我们无论如何都会在应用程序的那部分上工作,所以我们应该趁着在那里的时候把事情处理好。"虽然出于善意,但这几乎总是一个不好的决定,会导致不必要的成本和延迟,因为一旦开始,很难决定停下来。

这就是MVA概念发挥作用的地方:它给了每个人一个决定哪些变化必须进行,哪些变化不应该进行,至少还不应该进行的方式。如果一个变化对于实现发布的所需客户结果是必要的,那么它就是MVA的一部分,否则就被排除在外。

有时,一个团队可能会审视应用程序所需的变化,并决定,考虑到代码的状态,进行完全重写是必要的。应用于遗留应用程序的MVA概念有助于通过质疑这一点来缓和,即这些变化是否真的必要以产生所期望的客户结果的逐步改进。

应用程序可能确实已经过时无法扩展了,但根据我们的经验,“全面重写”几乎从未成功过(我们从未见过,甚至没有听说过这些项目中的一个真正交付了任何东西)。如果你真的要重新设计,不要重新编写现有系统;相反,从客户期望的结果出发,寻找不同的交付方式。

可行性和发布范围

MVA对MVP有影响,特别是对于遗留应用程序而言。MVA和MVP都包含一个重要的词:可行性。如果在评估团队需要对应用程序进行的更改以实现MVP时,他们确定以可持续的方式实现MVP成本太高,那么就需要重新考虑并可能更改MVP。

利用MVA方法:使用QARs

最小可行架构(MVA)方法(参见文章【最小可行产品需要最小可行架构】)提供了一种决定现代化程度“足够好”的方式,以便交付MVP。将MVA作为MVP交付工作的一部分来创建有助于评估技术可行性,并为产品提供一个稳定的基础,可以随着产品的发展而进行调整。透明地进行MVA架构决策有助于组织更好地理解为何会做出某些选择的原因,从而帮助他们更好地决定如何将产品适应不断变化的市场条件和不断发展的客户需求。

QARs驱的决策:需要做出的最重要的MVA架构决策可能是选择最少量的架构组件,使MVP能够处理与产品/系统特性相关的QARs,例如:

  • 并发性——与产品必须响应的同时用户数量、传感器和其他创建事件的设备数量有关。
  • 吞吐量——与产品必须在定义的时间段内处理的交易或数据量有关。
  • 延迟和响应性——与产品必须对事件作出响应的速度有关。
  • 可扩展性——与系统通过增加系统成本来处理增加的工作量的能力有关,通常是近线性关系。
  • 持久性——与产品必须存储和检索的数据的吞吐量和结构(或缺乏结构)有关。通常包括有关不同种类数据存储技术的决策(例如SQL数据库管理系统、NoSQL数据库管理系统等)。
  • 安全性——与产品如何保护自己免受未经授权的使用或访问产品数据的影响有关,实现机密性、完整性和可用性。
  • 监控——与产品如何被仪表化以便支持产品的人员可以了解产品何时开始无法满足QARs并防止关键系统问题有关。
  • 平台——与产品如何满足与系统资源约束相关的QARs,例如内存、存储、事件信号等有关。例如,实时和嵌入式产品(如数字手表或自动制动系统)与基于云的信息系统具有完全不同的约束条件。
  • 用户界面——与产品如何与用户进行通信的决策有关;例如,虚拟现实界面与二维图形用户界面具有完全不同的QARs,而命令行界面则与二者具有完全不同的QARs。这些决策可能会影响上述其他QARs。(图形用户界面、虚拟现实、命令行或其他类型的界面。)

例如,假设您计划构建一个移动应用程序,以支持在新市场推出产品,使用开源或商业框架来帮助您快速交付MVP,同时为传统系统数据创建一个新界面。在这样做的过程中,传统应用程序将不可避免地面临其设计未能处理的工作负载。这些增加的工作负载会导致传统系统失败吗?额外的工作负载会威胁传统系统满足现有用户的QARs的能力吗?移动应用程序会改变传统系统的QARs吗?

不可避免地,访问传统系统数据的新应用程序将通过改变工作负载、吞吐量、响应性和安全相关需求等方式改变传统系统的QARs。传统系统并非建立在满足新应用程序用户需求的基础上,而在决定如何以及在何处修改传统系统时,必须考虑到这些需求。在某些情况下,无论付出多少工作,传统系统都无法满足新的QARs,在这种情况下,传统系统将不得不被替换,以便支持新的应用程序。

经验主义是评估这些问题的强大工具,新移动应用程序的每个发布至少都将为评估传统系统架构是否能够满足对其提出的新需求提供机会。开发团队很可能需要修改传统应用程序以满足新的QARs。将传统应用程序的变化视为移动应用程序MVP发布的一部分将有助于团队决定要承担多少变化以实现移动应用程序MVP发布的目标。

QARs是诊断传统系统潜在改进领域的非常有用的工具。专注于QARs可以帮助您将变化范围限制在目前仅需最小限度的内容,以支持MVP。这有助于防止滑入到“全面重写”的泥潭,这是昂贵的、耗时的、容易失败的,而且通常对于MVP来说是不必要的。

限制新功能的范围:抵制超出MVP范围的诱惑,将此努力变成一个更大的项目,包括MVP所不必要的“不错的”功能。领域驱动设计(DDD)是一种极其强大的软件开发方法,对于确定需要实现的新功能范围以支持MVP并将其限制在确切所需的内容方面非常有效。

尝试解耦和简化系统组件。在与传统系统一起工作的挑战之一是它们缺乏模块化,许多系统在编写时并没有鼓励模块化代码,大多数代码重用都是通过“复制和粘贴”完成的。尽管重构所有这些冗余代码很诱人,但要保持在支持MVP所需的范围内。当您确实需要重构或替换代码时,确保新代码是模块化且可重用的。在某些情况下,微服务和无服务器函数也很有效。在需要更改的应用程序中,用对共享组件或服务的调用替换代码,同时为可能有类似机会的其他应用程序做笔记。这样,当其他团队必须修改其应用程序以使用类似服务时,他们将有一些优势。

开始将新工作远离传统系统。除非在传统系统中实现新功能显着简单且更可持续,否则应使用现代技术(如基于云的服务)开发与MVP相关的新业务功能。如果新功能必须从旧程序启动,那么为新工作编写一个新的组件或服务,然后只需从旧代码中调用它。随着时间的推移,上述解耦工作以及将新代码移至现代技术将减少您需要担心的传统代码量。
使用诸如“植绳者模式”或“分支抽象”模式等模式,以及在适用时实现网关来路由请求到新的MVA组件可能对此迁移有所帮助。请记住,所有方法和工具都有局限性。例如,使用“植绳者模式”适用于从单个应用程序迁移明确定义的功能块,但如果您需要替换影响数十个应用程序的破损基础设施,则可能不是正确的方法。

开始识别“死代码”并找机会消除它。使用静态和动态代码分析工具找出传统系统中不再使用的部分,范围包括MVA。将死代码作为消除目标(但不要立即着手 - 要注意范围蔓延)。这可以延伸到报告 - 旧系统产生大量报告,其中一些(或许多)可能对任何人都不再有用;业务可能已经发生了变化,而系统没有变化。识别不再有用的代码可以帮助团队更轻松地看到该代码是否会影响MVA。部署的代码越少,其余代码越可靠,关键系统资源的使用越轻。即使团队决定不消除代码,他们也应该识别死代码的潜在消除机会,以帮助其他团队做出未来的决策。

组织技术标准延续了传统系统。组织技术标准对于防止不可支持的配置和基础设施技术组合的增加非常有用,但如果保留时间过长,它们可能会让组织根深蒂固于过去,无法适应未来。使用MVA概念可以帮助组织了解新技术是否真正需要以使团队能够交付特定的MVP。有了MVA提供的证明,组织可以决定MVP是否真正战略,并因此需要改变技术标准。

组织技术标准延续了传统系统。组织技术标准对于防止不可支持的配置和基础设施技术组合的增加非常有用,但如果保留时间过长,它们可能会让组织根深蒂固于过去,无法适应未来。使用MVA概念可以帮助组织了解新技术是否真正需要以使团队能够交付特定的MVP。有了MVA提供的证明,组织可以决定MVP是否真正战略,并因此需要改变技术标准。

你应该将MVA数据存储在哪里。关键的MVA决策之一是选择一个数据存储库来存储与MVP相关的数据。这些数据很可能已经存在于传统的数据存储库中,而且在大多数情况下,还需要捕获和存储额外的数据。这些数据可以整合到传统的数据存储库中,或者可以实现一个新的、更现代化的数据库管理系统(DBMS)来存储新数据。第一种方法简化了数据聚合和报告,但会扩展可能被淘汰的技术的使用范围——例如,IMS/DB。如果只需要添加少量现有的MVA传统数据来支持MVP,则可能是合适的选择。第二种方法限制了传统数据存储库的使用,但复杂化了数据聚合,如果需要添加大量现有的MVA传统数据,则应考虑该方法。第二种方法的一个变体是将现有的MVA传统数据迁移到新的DBMS中。然而,迁移数据比迁移功能更加困难,因为这些数据可能被MVA范围之外的多个传统应用程序使用。尝试这样做可能会导致超出MVA范围的工作。

总结

传统系统有点像一个古老的城市,仍然是一个繁荣的大都市:它们的新旧混合使得很难跟上所需的修复工作,更别提对其进行大规模的翻新以适应快速变化的需求了。但是,找到一种持续适应传统系统的方式对于将企业发展到一个不断变化的世界中至关重要。

MVP和MVA的概念不仅适用于新应用程序;它们提供了一种新颖的方法来审视对传统系统的变更范围,以防止过快地进行过多的变更。事实上,每一个新应用程序在其第一个重大发布之后都会成为一种“传统应用程序”,因此在应用程序不断发展的过程中,限制变更范围的方式很重要。

MVA方法可以帮助组织通过展示新技术如何真正支持MVP来评估和修改其技术标准。它使您能够通过真实数据来挑战技术标准,而不仅仅是凭借偏好和观点。

创建MVA的过程可以帮助团队评估现在需要现代化的传统系统的哪些部分,以及哪些部分可以等待。许多组织已经在失败的“全面重写”现代化项目上花费了巨额资金,而事实上,这些项目事后证明是不必要的。识别现在必须现代化的部分,以及哪些部分可以等待是有用的,因为这使得组织更好地了解了他们的技术债务,同时为他们提供了一个非常需要的过滤器,以防止不必要的工作。

由于传统应用程序通常是至关重要的,因此它们需要特别关注可持续性。事实上,害怕使传统应用程序变得不稳定阻止了许多组织对它们进行重要和必要的渐进性改进,使它们变得更加脆弱和充满风险。专注于可持续性QAR,包括培养团队发展应用程序所需的技能,有助于使应用程序随着时间的推移变得更加强大。

最后,值得记住的是,今天的“传统”应用程序在很多情况下,在不久前还是全新的。这些不仅仅是40年前编写的应用程序;它们也是仅仅10年前甚至更近期编写的应用程序。一旦一个应用程序不再持续更新,它就开始腐化。将MVA作为每个新版本的一部分考虑,有助于保持应用程序的新鲜度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500777.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 使用 AndroidStudio 给(Android 安卓)进行签名方法

一、使用 AndroidStudio 创建签名 使用 AndroidStudio 打开 Flutter项目中的 android 文件夹首次打开 AndroidStudio 会加载一会。菜单栏 : Build -> Generate Signed Bundle APK... 选中 APK -> Next点击Create new....下面按照需求填写即可- 文件夹选择 项…

绿联 安装Uptime Kuma - 一款开源的服务器监控和状态检测工具

Uptime Kuma 功能简介 Uptime Kuma 是一款开源的服务器监控和状态检测工具,它帮助您跟踪服务器的可用性、性能和健康状态。 主要功能: 服务器监控 Uptime Kuma 可以监控多个服务器,包括 Web 服务器、数据库服务器、应用程序服务器等。 它会定…

element-ui-plus el-tree 树形结构如何自定义内容

element-ui-plus el-tree 树形结构如何自定义内容 本文提及的 elementUI 版本 为 elementUI Plus 版本 一、需求 项目中遇到一个需要设置权限的地方,但目录和权限是放在一起的,这样就很不好区分类别,为了区分类别,就需要自定义树…

前端bugs

问题: Failed to load plugin typescript-eslint declared in package.json eslint-config-react-app#overrides[0]: Cannot find module eslint/package.json 解决: google了一晚上还得是chatgpt管用 运行以下命令【同时还要注意项目本身使用的Node版…

【spring】@Primary注解学习

Primary介绍 Primary 是 Spring 框架中的一个注解,用于在多个相同类型的 bean 中指定一个默认的 bean。当 Spring 容器在自动装配时遇到类型冲突,即存在多个相同类型的 bean 时,如果没有使用 Qualifier 或其他方式指定具体的 bean&#xff0…

AI计算平台设计方案:901-基于3U VPX的图像数据AI计算平台

一、产品概述 设备基于3U VPX的导冷结构,集成FPGA接口预处理卡,GPU板卡、飞腾ARM处理卡,实现光纤、差分电口或者Camera link的图像接入,FPGA信号预处理,GPU AI计算,飞腾ARM的采集管理存储。 二、系统…

Linux基础命令篇:操作系统服务管理(systemctl service)

Linux基础命令篇:操作系统服务管理(systemctl & service) service和systemctl是两个用于管理Linux系统服务的命令。它们分别属于SysV init和systemd系统,这两个系统是Linux中用于初始化和管理服务的不同框架。在许多现代Linux…

visual studio报:引发的异常:“System.DllNotFoundException”(位于 ConsoleCAN1.exe 中)

最近在重构CAN通信的代码,把论文中的java转为C#实现,由于某种原因,java不能复现,所以转为c#。 然而c#的重构过程遇到许多问题,因为两种语言的编程方式、线程等等实现上有所差异。 其中一个错误: 引发的异…

绿联 安装PDF工具

这是一个强大的本地托管的基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序,现已发展…

什么是搜索引擎(SEO)爬虫它们是如何工作的?

什么是搜索引擎(SEO)爬虫&它们是如何工作的? 你的网站上有蜘蛛🕷️。别抓狂!我说的不是真正的八条腿的蜘蛛🕷️。 我指的是搜索引擎优化爬虫。他们是实现SEO的机器人。每个主要的搜索引擎都使用爬虫来…

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具,但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别: 语言支持 Postman是一个基于Chrome的应用程序,因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

Vue中使用Vuex(超详细)基本使用方法

在vue中使用vuex,不同的vue版本要对应使用不同的vuex,在这里不做详情介绍,想具体了解的,请自行度娘或者必应一下。 在使用vuex之前,我们创建一个新的项目,这里我们使用的是vue的脚手架创建一个vue项目。 …

小迪学习笔记(内网安全)(常见概念和信息收集)

小迪学习笔记(内网安全)(一) 内网分布图内网基本概念工作组和域环境的优缺点内网常用命令域的分类单域父域和子域域数和域森林 Linux域渗透问题内网安全流程小迪演示环境信息收集mimikatzLazagne(all)凭据信息政集操作演示探针主机…

书生·浦语大模型开源体系(一)论文精读笔记

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

电脑端手机配置信息检测的实用性与局限性分析

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

聚观早报 | 抖音独立商城App上线;阿里云联发科合作

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月29日消息 抖音独立商城App上线 阿里云联发科合作 苹果WWDC24官宣 恒大汽车2023年营收财报 亚马逊投资Anthro…

电商平台api接口:采购比价可用的比价电商商品数据采集API接口推荐

主流电商API数据接口接入方案 目前,许多企业在进行内部采购时都有比价的需求。企业利用比价采购这一方式,能通过对比不同平台上、不同供应商的报价,进而选择最符合其需求和预算的产品或服务。 在比价采购的流程中,最重要的步骤就…

学浪视频如何录屏保存?

学浪软件对录屏进行了防范,不管什么录屏软件只要打开学浪就会黑屏,这里就教大家一个方法,可以使用网页版进行录屏 这里是学浪的网页版地址 https://student-api.iyincaishijiao.com/ep/pc/login 但是你们打开这个地址会直接跳转到这个页面…

03-Linear Regression

什么是回归算法 回归算法是一种有监督算法回归算法是一种比较常用的机器学习算法,用来建立“解释”变量(自变量X)和观测值 (因变量Y)之间的关系; 从机器学习的角度来讲,用于构建一个**算法模型(函数)**来做属性 ( X ) (X) (X) 与标签 ( Y ) (Y) (Y) 之…

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略 导读:Mistral AI首个7B模型发布于2023年9月,在基准测试中超越Llama 2 13B,一下子声名大振。Mistral 7B v0.2对应的指令调优版本Mistral-7B-Instruct-v0…