云原生软件欠下的技术债越来越多,怎么办?

Posted 开源云中文社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生软件欠下的技术债越来越多,怎么办?相关的知识,希望对你有一定的参考价值。

我们向来自不同组织和行业的开发人员提出了一个简单的问题:“如果不允许你碰应用程序的代码,你的应用程序能继续工作多久?”结果发现,应用程序越现代化,停止工作的速度就越快。遗留应用程序在几年内都可以正常运行,但云原生应用程序在几周内就会崩溃。


在过去的十年里,软件开发经历了重大的变化。软件不再完全由内部构建,取而代之的是现在的软件供应链。它包括在软件生产过程中进入或接触软件的所有内容:开发人员工具(IDE、CI/CD)、第三方软件(依赖关系)或应用程序堆栈中更普遍的部分,如语言运行时、监控和测试框架。


随着向软件供应链的转移,软件开发已经工业化。我们正在构建越来越多的定制软件,但通过集成更高级的构建块(如OSS或供应商API)来更快地生成它。现代应用程序是粘合代码,多达90%的软件可以来自第三方组件。全球软件供应链中不同组件的成熟度和可用性是定制软件快速增长的原因。


关于API的一个常见误解是,它们是稳定的接口,一旦使用API而不是自定义的内部协议,组件之间的通信将保持良好的定义和稳定。实际上,API供应商并不是一成不变的。他们正在开发基于他们想要支持的用例的产品:添加、弃用和删除API。


这解释了我们前面描述的悖论,即现代云原生应用程序需要更多的维护,因为第三方依赖关系会以自己的速度发生变化和发展,需要开发人员不断地将新版本重新缝合在一起。遗留应用程序是由内部从头开始构建的,因此即使你积累了大量的技术债务,并且无法向应用程序添加功能,至少它们仍能继续工作。


这段重新缝合的时间并非微不足道。软件维护通常需要开发人员20%~30%的时间。这些都是乏味的重复性任务,但它们需要的专业知识只有最资深的开发人员才能拥有,并对创新和软件质量造成巨大的拖累。


对于软件的持续维护来说,技术债务是一个错误的术语


技术债务作为一个术语起源于敏捷开发的引入。它是关于优先考虑快速的应用程序交付而不是完美的代码。伴随着技术债务而来的是重构作为一种管理代码的技术。重构在不改变外部行为的情况下重构代码。它解决了技术债务问题,并对代码进行必要的内部更改,以支持应用程序的最新迭代和新功能。


管理技术债务的一种常见方法是将IT工程的责任作为每个scrum sprint的一部分(开发团队完成一定数量工作的时间段),并将其视为增强软件过程的隐含成本。这是在工程部的控制下——他们引进了技术债务,所以他们应该解决它。


我们继续使用术语“技术债务”来表示工程内部的活动,并且不产生任何有形的商业利益,但是债务的原因已经发生了根本性的变化。当你将供应商库的最新版本合并到应用程序中时,并不是有意承担技术债务的。下一件事就是,供应商发布了一个新版本,你的软件过时了。这是伪装成技术债务的供应链管理活动。


当使用来自软件供应链的组件组装软件时,维护就不同了,因为它不再受开发人员的控制,而是与第三方软件和API的更改联系在一起。现代的软件维护感觉就像是一场不停地争分夺秒地更新组件,以防止整个过程中断,而且由于无法控制对这些第三方组件的更改,你基本上是在赶赶赶。


软件供应链维护具有高度的可重复性


我们在与开发人员交谈时注意到的另一件事是他们问题的重复性。每个人都在升级一个类似的第三方软件子集,并将其整合到自己的代码中。其中一些,比如对通用框架或语言运行时的升级,几乎影响到所有人。与普通CVE相同。


与过去的技术债务不同,每个人都有一套独特的技术债务,必须通过单独的重构来理解和解决它,软件维护作为通用组件的升级可以在不同的代码库中重复。显然,并不是所有的东西都可以自动化,但是大量繁琐的迁移可以自动化。


超越重构——自动代码维护


我们需要的是一个开放的生态系统,用于为这些繁琐的代码维护任务开发和分发自动化:升级、CVE打补丁、内部API维护。它只能由社区通过组合越来越复杂的重构操作并在越来越多的代码上验证它们来解决。


我们可以从IDE提供的相同的、经过验证的构建块开始,但要使它们可共享、可组合,并通过不同的工作流应用。有了这些构建块,API供应商和OSS框架的作者可以开发和分发自动化,以便将库和API的使用者以及库的新版本一起升级。安全研究人员不仅可以披露漏洞,还可以为每个受影响的人提供自动修复。


OpenWrite是一个OSS、Apache许可的重构配方生态系统,旨在创建这样一个社区。它现在还处于早期阶段,但我们通过为Java框架迁移构建一些高价值的重构方法来验证这种方法。


想象一下这样一个世界——全球软件供应链变成了一个分布式的、最终一致的单体代码库:当你将库的新版本合并到应用程序中时,你的粘合代码会自动更新。



原文链接:

https://thenewstack.io/cloud-native-softwares-technical-debt-is-growing/





以上是关于云原生软件欠下的技术债越来越多,怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

云原生变革下的基础设施软件架构和应用交付与管理

云原生下的银行业务新生态

云原生专场分享:微服务架构下的全链路追踪

云原生专场免费报名中!听技术大咖在线分享实践案例

云原生是个啥?

把握云原生,GOTC「开源云原生计算时代」分论坛议程公布