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

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

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

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

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