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

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

相关文章

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象