扼杀者模式:如何与旧式整体应用保持一致

2023-10-30 16:20

本文主要是介绍扼杀者模式:如何与旧式整体应用保持一致,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是Strangler模式,它如何转换为Strangler应用程序,以及如何将其全部连接到微服务?

当我们说遗留代码时,您想到的第一件事是什么? 它可能是一个过时的,过时的系统,它经历了数十甚至数千甚至数千个开发人员。 它也可能是一个数据库,其中的代码行堆积如山,方法之间几乎没有联系,而维护却是一场噩梦。 无论哪种方式,我们大多数人都认为这是不好的事情,这种情况主要存在于长期存在的公司中。

但是,无论是12年的公司还是5年的AI-Machine-Learning-Blockchain初创公司,复杂的代码库都会在每种产品中发生。 开发人员来来往往,团队起起伏伏,公司中的每个人都将自己的代码带入混合。 而且,在您不知道它的情况下,您就有一个产品由于其遗留代码而变慢。

这是扼杀者模式有用的时候。

那么……是什么意思呢?

关于扼杀模式的最好和最广为人知的比喻是马丁·福勒 ( Martin Fowler)于2004年撰写的:

“ [澳大利亚]地区的自然奇观之一是巨大的扼杀者藤蔓。 他们在无花果树的上部树枝上播种,并逐渐沿着树下工作,直到扎根在土壤中。 多年来,它们长成奇妙而美丽的形状,同时勒死并杀死了作为寄主的树。”

Strangler模式的名称来自同一棵树,即Strangler Fig,因为它具有相同的行为。 类似于此树的新藤和新藤替换树的原始基础的方式,进入应用程序的新代码也是如此。

随着我们产品的发展,在现有代码的基础上增加了功能和修复形式的复杂性。 我们需要找到一种使应用程序继续运行的方法,而又不会使原始结构或树干过载。 Strangler应用程序概念就是在谈论这一点–创建新的葡萄藤,反过来将有助于应用程序变得更大更好。

换句话说,我们的旧代码很难维护,现在是时候了解如何改进它了。 替换每个无法正常运行的元素是一项艰巨的任务,有时甚至是危险的任务,这可能导致应用程序无法正常运行甚至损坏。 我们需要用新的替换旧的,但是我们需要用聪明的方式做到。

好消息是,有可能通过逐步的过程来重写旧代码,与旧代码并行运行新代码,测试环境并确保一切正常进行。 或者换句话说...

微服务营救?

微服务提供了一种轻量级的体系结构,该体系结构促进了“关注分离”原则。 这样,我们可以封装应用程序的不同部分,每个部分都有自己的逻辑,数据,结构等,并由每个人自己负责。

这个“流行词”已经存在了一段时间,公司正在采用并适应它带来的新元素。 这也就不足为奇了,因为它可能比整体架构更易于处理,并且为我们的工作流程和构建方法带来了很多好处。

与整体架构不同,微服务使我们更容易理解,开发和测试主要产品的不同元素,并且有助于使每个部分对架构侵蚀具有更大的弹性。

微服务使我们能够与当前正在使用的旧方法和代码并行地重新设计和重写代码库中的关键元素。 作为回报,控制从旧版本到新版本的逐步过渡会更容易,以确保应用程序仍按预期运行并运行。

微服务在我们的工作流程中引入了一些基本好处。 第一个是防止整体结构变得更难以管理的能力。 第二个好处是帮助开发人员和运营团队更快地在应用程序或产品中使用某些元素,而无需依赖其他团队或区域来完成或部署其更改。

微服务还可以改善构建测试部署监视器的周期。 他们使团队可以更快地完成应用程序中各个元素的循环,而不必等待测试或部署其他功能。 您可以更快地迭代。

但是,在微服务体系结构中,并不是所有的阳光和彩虹,而且在切换到此方法时,还会有一些不利之处。 迈向微服务架构时,我们需要记住的最关键的要素之一是:

微服务伴随着分散的监控责任

回到Martin Fowler,他在微服务先决条件中提到:

“重要的是要确保您的监控显示出问题时可以Swift做出反应。 特别是,任何事件管理都需要开发团队和运营部门参与,以解决紧迫的问题和根本原因分析,以确保基本问题得到解决。”

确实, 我们可以通过某些方法来对微服务进行篡改 ,并且我们现在对整个基于“分散”服务的应用程序负有责任。 每个服务可以包括其自己的语言,技术,位于不同的计算机上或具有不同的版本控制,这取决于我们的团队来处理负载。

当这些团队试图在影响用户之前预测,理解甚至预防问题时,我们需要考虑的每种服务的排列通常会转化为更高的时间和金钱成本。

我们不能否认,每当出现错误时,每个人的首要考虑就是找到其根本原因并加以解决。 当我们需要了解在哪个机器,微服务或服务器上发生此问题时,这将成为更大的挑战,并且对代码中断的位置有答案可以使我们更加关注应用程序。

虽然这听起来像是对微服务的敲门声,但这并不意味着我们不应该转向这种架构。 这意味着我们应该意识到这些挑战,并且在监视环境时首先需要知道我们在寻找什么 。

最后的想法

如果想要保持应用程序的最佳运行状态,则应尽早采用Strangler模式,或者更准确地说是Strangler应用程序。

微服务可以帮助我们减轻应用程序的负担,而我们不必等待Strangler模式出现就开始转向它。 我们只需要确保我们知道自己在做什么,并且知道我们同时考虑了利弊。

翻译自: https://www.javacodegeeks.com/2018/05/strangler-pattern-how-to-keep-sane-with-legacy-monolith-applications.html

这篇关于扼杀者模式:如何与旧式整体应用保持一致的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima