当前位置: 首页 > news >正文

云原生计算能消除技术债务吗?

云原生计算可以将行业领域驱动的设计、GitOps和其他现代软件最佳实践汇总起来,如果企业实施得当,可以减少技术债务。

云原生计算是企业IT的一种新范式,它涉及现代技术的方方面面,从应用程序开发到软件架构,再到保持一切运转的底层基础设施。
在这里插入图片描述
云原生为企业提供了清理技术债务的机会。例如通过Kubernetes这样的“扫帚”,扫除现有技术的一些积满尘土的角落。因此,假设云原生最终会消除多年来累积的技术债务是合乎逻辑的。

这也许合乎逻辑,但并不现实。众所周知,技术债务将长期存在。此外,对于任何一位首席信息官来说,宁愿将IT预算花在新技术和新事物上,也不愿将其浪费在清理前任留下的烂摊子上。

然而人们也有理由对云原生抱有希望。虽然云原生不是一把神奇的“扫帚”,但其核心实践确实可以帮助企业减少技术债务,并提供新的软件功能,而不会产生更多的债务,至少不会像以往那样产生更多的债务。

让企业清除技术债务以便永远不会产生新债务,当然是难题的一部分,但更直接的问题是如何偿还现有的遗留技术债务。

多年来,便利的快捷方式、笨拙的编码,以及基础设施中各种各样的接口,已经形成了一团乱麻。而对于这个难以解决的问题,可能需要采用“快刀斩乱麻”的措施。

云原生计算就是这样的一把快刀:基于领域驱动设计的架构重构。领域驱动设计要求将复杂的企业软件挑战分解为单独的业务领域,每个领域都有一个“限界上下文”。

限界上下文可以根据业务需求限制上下文来解决诸如“客户”或“发票”之类的业务。例如,大型企业的不同部门可能对客户有不同(可能有所重叠)的概念。每一个都代表一个单独的限界上下文。

早期对微服务架构的探索导致了互联微服务的激增,其复杂性限制了其可扩展性,并且很快显现出来。而通过限界上下文组织它们是管理这种复杂性以及大规模交付基于微服务的解决方案的关键。

因此,领域驱动设计已经成为云原生计算的一部分,此外,它告诉人们必须如何按照这种新范式来实现遗留资产的现代化。

解决具有高技术债务的遗留软件挑战的第一步是应用架构重构,从而将遗留架构转换为具有限界上下文的模块化元素。换句话说,企业必须遵循业务驱动的限界上下文引入模块化,以便引导减少技术债务的路径。

而魔鬼在细节中。根据企业面临的业务需求和遗留挑战,可以通过以下几种方式来利用这种架构重构:

可能会发现限界上下文中的现有代码根本不符合当今的要求。在这种情况下,可以将该代码重写为微服务。
遗留业务逻辑仍然具有价值,然后将其迁移到微服务。
可以将遗留模块作为API公开,因为它们已经具有有用的API,或者因为更新了遗留代码以通过API公开它。
可以使用机器人流程自动化(RPA)程序编写与旧模块交互的脚本。
需要注意的是,由于之前已将遗留软件重新组织和模块化为限界上下文,因此上述四种方法中的每一种都比其他方法更加简单。

此外,如果有必要的话,未来的重构也会更加直接,因为采用了“分而治之”的方法来划分技术债务。例如,随着时间的推移,企业还清四笔较小的技术债务比一笔大的技术债务更加轻松。

这种方法也是减少机器人流程自动化(RPA)脆弱性的最佳方法之一。如果没有限界上下文驱动的架构重构,那么应用程序环境中的任何地方发生任何变化,此类机器人程序就会崩溃。通过适当的划分,此类故障将更易于管理且更易于修复。

防止新的技术债务

防止新的技术债务就像要求保持房间整洁一样,虽然也许会保持一段时间,但到后来将会变得一团糟。

需要的是更多的结构,对吗?至少在云原生的情况下,这种结构确实有帮助。

云原生计算提供了一系列广泛的最佳实践,描述了如何最好地构建软件、配置基础设施、创建和部署应用程序以及管理生产中的一切。

当然,如果遵循所有这些建议,就不太可能背负新的技术债务,或者至少不会那么快地出现技术债务。

“基础设施即代码”(IaC)原则就是一个关键示例。IaC原则指出,工作人员不应在生产中弄乱服务器。 IaC原则当然可以限制生产中的额外技术债务,因为它提供了一种解决生产问题的主动方法。那么只有一个问题:IaC做得还不够。

IaC的问题在于必须编写各种程序。然后,必须像任何其他程序一样对这些程序进行测试、管理和版本控制——这意味着技术债务可能会像任何其他软件一样蔓延。

幸运的是,云原生计算已经超越了IaC,其中每一步都比之前的一步有所改进。

第一步:通过声明性配置来表示基础设施,它指定应该如何配置基础设施,而不指定如何实现此类配置。
与IaC相比,声明式方法减少了技术债务,因为没有太多的空间来使用快捷方式,但这些表示(通常出现在YAML文件或其他基于JSON的格式中)仍然非常像代码,尤其是对于复杂的动态基础设施配置。

第二步:GitOps。GitOps为软件发布和管理带来了以Git为中心的实践和流程。
GitOps在许多方面补充了基础设施配置的声明式方法,因为它采用声明式方法进行软件部署。GitOps通过为其流程提供更多结构而更进一步,而结构越多,技术债务蔓延的机会就越少。

第三步是当前最先进的技术:基于意图的计算。

基于意图的计算包含三个部分

以技术策略的形式对相关软件(基础设施、应用程序代码等)的声明性表示。
这种技术策略的抽象,如表示底层配置的业务意图的业务策略。
确保底层软件符合这一业务意图的一种机制,从而在策略应用中消除策略漂移。
换句话说,基于意图的计算采用声明式配置方法和GitOps,并添加额外的结构,从本质上确保整个云原生环境随着时间的推移符合业务意图。这样的合规性才是一把斩断技术债务这团乱麻的最好的快刀。

相关文章:

云原生计算能消除技术债务吗?

云原生计算可以将行业领域驱动的设计、GitOps和其他现代软件最佳实践汇总起来,如果企业实施得当,可以减少技术债务。 云原生计算是企业IT的一种新范式,它涉及现代技术的方方面面,从应用程序开发到软件架构,再到保持一…...

9. 回文数

题目 给你一个整数 xxx ,如果 xxx 是一个回文整数,返回 truetruetrue ;否则,返回 falsefalsefalse 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例子 输入&am…...

[SV]SystemVerilog线程之fork...join专题

SystemVerilog线程之fork...join专题 Q:fork-join_none开辟的线程在外部任务退出后也会结束吗? A:后台线程不会结束,任何由fork开辟的线程(join、join_any、join_none),无论其外部任务&#xff…...

你看这个spring的aop它又大又宽

aop🚓AOP 分类AspectJ | 高级但是难用Spring AOP | 易用但仅支持方法aop 原理明月几时有,把酒问青天。——唐代李白《将进酒》 AOP 分类 在 Spring Boot 中,AOP 的实现主要有以下几种: 基于 AspectJ 的 AOP:这是一种基…...

设计模式-创建-单例模式

4.1.1 模式介绍 定义 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 作用 保证一个类只有一个实例为该实例提供一个全…...

使用mybatis-plus-generator配置一套适合你的CRUD

1、maven引入 mybatis-plus-generator 和模板引擎&#xff0c;你也可以使用freemarker之类的&#xff0c;看个人 <!-- mybatisplus代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactI…...

MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数)

MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数) 1 常见离散概率分布的基本信息2 常见离散概率分布计算及MATLAB实现2.1 二项分布(Binomial Distribution)2.1.1 常用函数2.2 负二项分布(Negative Binomial Distribution)2.2.1 常用函数2.3 几何分布(Geom…...

指针的基本知识

我们不会用bit去表达一个数据&#xff0c;因为只能放0和1&#xff0c;能表达的数据太少了&#xff0c;内存地址最小单位是字节 11111111 0x0011 1字节8bit,8bit才算作一个地址&#xff0c;地址是以字节为最小单位&#…...

当你的IDE装上GPT

文章目录前言下载安装使用步骤前言 我们可能要从“CV”工程师变成“KL工程师了&#xff0c;为什么叫”KL“工程师呢&#xff0c; 因为只要K和L两个指令就可以直接生成代码、修改代码&#xff0c;哪行代码不会点哪里&#xff0c;他都给你解释得明明白白。 提示&#xff1a;以下…...

一图看懂 pathlib 模块:面向对象的文件系统路径, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pathlib 模块&#xff1a;面向对象的文件系统路径, 资料整理笔记&#xff08;大全&#xff09;摘要模块图类关系图模块全展开【pathlib】统计常量intbooltuple模块9 fnmatc…...

前端如何将node.js 和mongodb部署到linux服务器上

本文首发自掘金。 记录了我第一次成功部署node.js 和mongodb到linux服务器上了&#xff0c;期间也遇到一些小坑&#xff0c;但是网上各位大佬记录的文章帮了大忙&#xff0c;所以我也将过程记录了下来。 安装Node 使用nvm linux上安装node&#xff0c;肯定首选nvm&#xff…...

mysql数据迁移

背景&#xff1a;随着时间的推移&#xff0c;交易系统中的订单表越来越大&#xff0c;目前达到500w数据。为了防止数据量过大导致的查询性能问题&#xff0c;现将订单表进行拆分&#xff0c;分为实时库和历史库。实时库保留近6个月的数据&#xff0c;用于退款业务需求&#xff…...

【4.3蓝桥备战】小朋友崇拜圈、正则问题

文章目录小朋友崇拜圈正则问题小朋友崇拜圈 小朋友崇拜圈 - 蓝桥云课 (lanqiao.cn) 拿到这道题要先把题目读懂。 下面的一行是表示&#xff1a;编号为i的小朋友&#xff0c;崇拜的对象为编号为path[i]的小朋友。 本题应该使用DFS&#xff0c;深度优先遍历找到可以成环的崇拜圈…...

MySQL读写分离中间件

1.什么是读写分离中间件&#xff1f; 就是实现当[写]的时候转发到主库&#xff0c;当[读]的时候转发到从库的工具。 很类似学习过的proxy,比如nginx proxy做动静分离. 2.为什么要实现读写分离&#xff1f; 1&#xff09;让主库专注于写&#xff0c;因为读可以有很多从库可以干…...

【Spring源码设计模式】单例模式外带设计模式的单例模式

Bean的概念 是Spring框架在运行时管理的对象&#xff0c;是任何引用程序的基本构建块。 Bean的属性 id属性&#xff1a;Bean的唯一标志名&#xff0c;必须以字母开头且不包含特殊字符 class属性&#xff1a;用来定义类的全限定名&#xff08;包名 类名&#xff09; name属性…...

go并发编程 —— singleflight设计模式

什么是singleflight singleflight是一种并发编程设计模式&#xff0c;将同一时刻的多个并发请求合并成一个请求&#xff0c;以减少对下游服务的压力 为什么叫singleflight fly可以理解为请求数&#xff0c;singleflight就是单个请求 使用场景 该模式主要用于防止缓存击穿 …...

【LeetCode】二叉树的中序遍历(递归,迭代,Morris遍历)

目录 题目要求&#xff1a;给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 方法一&#xff1a;递归 方法二&#xff1a;迭代 思路分析&#xff1a; 复杂度分析 代码展示&#xff1a; 方法三&#xff1a;Morris 遍历 思路分析&#xff1a; 复杂度分析…...

银行数字化转型导师坚鹏:数字化转型背景下的银行柜员提升之道

数字化转型背景下的银行柜员提升之道 课程背景&#xff1a; 很多银行都在开展银行数字化运营工作&#xff0c;目前存在以下问题急需解决&#xff1a; l 不清楚银行数字化运营包括哪些关键工作&#xff1f; l 不清楚银行数字化运营工作的核心方法论&#xff1f; l 不清楚银行数字…...

ChatGPT的平替来了?一文总结 ChatGPT 的开源平替,你值得拥有

文章目录【AIGC精选】总结 ChatGPT 的开源平替&#xff0c;你值得拥有1.斯坦福发布 Alpaca 7B&#xff0c;性能匹敌 GPT-3.52.弥补斯坦福 Alpaca 中文短板&#xff0c;中文大模型 BELLE 开源3.国产AI大模型 ChatGLM-6B 开启内测4.中文 Alpaca 模型 Luotuo 开源5. ChatGPT 最强竞…...

关于数据同步工具DataX部署

1.DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;GitHub - alibaba/DataX: DataX是…...

如何开发JetBrains插件

1 标题安装 IntelliJ IDEA 如果您还没有安装 IntelliJ IDEA&#xff0c;从官方网站下载并安装 IntelliJ IDEA Community Edition&#xff08;免费&#xff09;或 Ultimate Edition&#xff08;付费&#xff09;。 2 创建插件项目 在 IntelliJ IDEA 中&#xff0c;创建一个新…...

企业采购成本管理的难题及解决方案

企业采购成本控制是企业管理中的一个重要方面&#xff0c;也是一个不容易解决的难题。企业采购成本控制面临的难题包括以下几个方面&#xff1a; 1、采购流程复杂 企业采购通常需要经过一系列的流程&#xff0c;包括采购计划、采购申请、报价、比价、议标、合同签订、验收、付…...

龙蜥白皮书精选:基于 SM4 算法的文件加密(fscrypt)实践

文/张天佳 通常我们会以文件作为数据载体&#xff0c;使用磁盘&#xff0c;USB 闪存&#xff0c;SD 卡等存储介质进行数据存储&#xff0c;即便数据已经离线存储&#xff0c;仍然不能保证该存储介质不会丢失&#xff0c;如果丢失那么对于我们来说有可能是灾难性的事件。因此对…...

【SpringBoot入门】SpringBoot的配置

SpringBoot的配置文件一、SpringBoot配置文件分类二、yaml 概述三、多环境配置四、Value 和 ConfigurationProperties五、总结一、SpringBoot配置文件分类 SpringBoot 是基于约定的&#xff0c;很多配置都是默认的&#xff08;主方法上SpringBootApplication注解的子注解Enabl…...

react 学习整理

如何使用引号传递字符串 常见的 <imgclassName avatersrc http://...alt gregorio y />或者声明变量来保存 export default function XXX(){ const avator avator const description gergorio y return (<image className XXXsrc {avator}alt {alt} />)…...

物理引擎系统-ode

物理引擎系统-ode 目录 物理引擎系统-ode 一、物理引擎系统-ode——processIslands 二、物理引擎系统-ode——processIslands 三、物理引擎系统-ode——processIslands 四、物理引擎系统-ode——processIslands 五、物理引擎系统-ode——processIslands 一、物理引…...

函数设计—参数规则

【规则1-1】参数的书写要完整&#xff0c;不要贪图省事只写参数的类型而省略参数名字。 如果函数没有参数&#xff0c;则用 void 填充。 例如&#xff1a; void SetValue(int width, int height); // 良好的风格 void SetValue(int, int); // 不良的风格 float GetValue(…...

rsync远程同步

目录 rsync rsync简介 rsync优点 同步方式 rsync名词解释 rsync工作原理 常用rsync命令 配置源的两种表达方法 远程同步实操 如何不想每次登录的时候输入密码 同步删除文件 定时完成操作 格式二 指定资源下载到/opt进行备份 通过信道协议同步数据​编辑​编辑 rs…...

中国大陆IP段(仅大陆地区)【2020-07-24】

中国大陆IP段&#xff08;仅大陆地区&#xff09;【2020-07-24】 1.1.8.0/24 1.2.4.0/24 1.8.1.0/24 1.8.8.0/24 1.18.128.0/24 1.24.0.0/13 1.45.0.0/16 1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/13 1.88.0.0/14 1.92.0.0/20 1.93.0.0/16 1.94.0.0/15 1.119.0.0/17 1.11…...

从零开始的嵌入式Linux生活(一) 背景介绍

文章目录前言本系列文章的主要思想&#xff1a;本系列文章包括&#xff1a;一、什么是嵌入式开发二.嵌入式开发 - 由便宜到贵三.嵌入式开发的基本原理一个美好的假设&#xff1a;再来一个美好的假设美好的假设被打破了 - RTOS系统美好的假设又被打破了 - 嵌入式Linux系统老板飘…...