热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

浅析模块化单体会不会取代微服务架构

关于模块化单体的讨论很多。我们可以在许多趋势图中看到这一点。许多研发经理都在询问这是否是微服务或其他东西的替代品替代品。本文解释什么是模块化单体,为什么有些人认为它

关于模块化单体的讨论很多。我们可以在许多趋势图中看到这一点。许多研发经理都在询问这是否是微服务或其他东西的替代品/替代品。

本文解释什么是模块化单体,为什么有些人认为它是微服务的替代品,以及我对使用不同架构模式的建议。

单体应用的缺点 = 微服务的优点 单体架构模式有很多缺点。这些促使几乎每个人都转向微服务模式。话虽如此,微服务并非都是好的,它们也有挑战和弱点,我将在后面简要描述。单体应用的主要缺点和微服务优点是:


  • 依赖项——内部代码和数据库依赖项

  • 隔离——每个功能都会影响其他功能(性能、安全等)

  • 可重用性——对象的有限重用

  • 代码复杂性 - 大量带有内部引用的代码

  • 性能——不可能仅在需要的功能中调整和解决性能问题,而且成本巨大

  • 可维护性

  • 可扩展性——无法仅扩展特定功能,要么全有,要么全无

  • 弹性——没有选择仅在需要时以具有成本效益的方式实施弹性

  • 测试周期时间——每次更改,即使是很小的更改,都需要完整的系统测试

  • 使用多种技术(适合每个业务需求的技术)

  • 并行工程

  • 敏捷 SDLC

  • CI/CD

微服务

由微服务、容器、CI/CD 和 DevOps 组成的 Cloud Native 改变了游戏规则;它改变了我们构建和部署应用程序的方式。创建微服务作为基础是为了解决这些单体挑战。

简单来说,微服务是一种架构模式,它将应用程序分解成更小的、独立的组件,这些组件不依赖于特定的技术堆栈(编码语言、数据库等)。

这些小组件称为“服务”,通常部署到容器中。 微服务“大小”的最佳实践是业务领域或业务实体中的一项功能,例如支付、检查库存、客户 CRUD、产品目录、产品定价、送货地址、送货管理等。 微服务并不都是好的,它们也有自己的挑战,例如:


  • 工作成本——许多管道、安全规则等。

  • 基础设施成本——许多容器/pod

  • 解决方案复杂性——许多组件

  • 数据共享——应用级别和业务领域级别的表/实体

  • 代码共享(除非使用 MonoRepo)

  • 数据所有权——多个服务拥有的特定表/实体

  • 缓存

  • 业务领域报告和仪表板

  • 跨微服务特性

  • GUI(如果实现了微前端架构)

  • 端到端测试

  • 日志记录和问题根本原因分析

模块化单体

模块化单体应用并不新鲜。在大多数情况下尚未完全实施的理论最佳实践总是将系统分解为模块。以正确的方式将系统拆分为模块是一个模块化的单体。

模块化单体的常见替代名称是“宏服务”。宏服务将系统分解为功能(一个功能由多个业务域组成)。 模块化单体/宏服务的高级技术特征:


  • 在模块化单体中,就像微服务一样,每个模块通过 API 与另一个模块通信,最好是松散耦合的异步通信。

  • 在像单体一样的模块化单体中,系统有一个数据库模式,而不是微服务,每个微服务都应该有自己的模式。

  • 通常,模块化单体中的所有模块都在同一个 VM 上运行。或者每个模块在特定的专用 VM 上运行。模块太大而无法放入容器中。

与事实上的单体应用相比,使用模块具有许多优势:


  • 更简单的管理

  • 更多隔离

  • 更少的依赖

  • 降低企业责任风险

  • 提高可重用性

  • 更好的可维护性

  • 更简单的测试

  • 更好的安全性

现在我们了解了为什么从单体架构切换到模块化单体架构更好,我们将比较模块化单体架构和微服务。模块化优于微服务的优点是:


  • 更简单的操作和支持

  • 更少的 API 带来更好的性能

  • 降低基础设施成本

  • 本机数据共享、报告和仪表板

微服务相对于单体架构的优势与模块化单体架构的优势完全相同,因此直接得出的结论是,在从头开始构建系统时,模块化单体架构无法替代微服务。 从两端握住大棒,一边是单体,另一边是微服务,都是微型服务。

普通保险示例

在过去,普通保险是一个巨大的系统,一个单体,就像养老金、长期储蓄、人寿、健康、航运等等。

有许多选项可以将单体分解为模块单体--纵向或横向的。纵向将基于一般的保险类型,如汽车、住宅、旅游等。横向将基于功能:客户、政策、索赔等。

将单体分解成微型服务将是纵向和横向的结合,将产生汽车保单(汽车保单与家庭、旅行和商业保单几乎没有共同之处)、汽车索赔、旅行保单、旅行索赔等。

将单体分解为微服务是每个迷你服务中的一个功能或业务实体,将产生:汽车客户、汽车保单、汽车保单保险、汽车保单账单、汽车保单付款、汽车保单文件、汽车供应商、汽车评估师、汽车索赔、汽车索赔法律、汽车索赔保险支付、汽车索赔赔偿等。

我们可以使用迷你服务和微服务的组合进行细分:


  • 付款是一样的,不管是汽车保险、房屋保险等,所以我们有一个付款的微服务。

  • 管理文件和档案是一样的,所以我们有一个文件微服务。

  • 客户大多是一样的,所以我们有一个客户微服务(值得商榷。有些人倾向于拥有汽车客户微服务,因为有一些独特的属性,然后在一个外部系统或一个专门的微服务中管理客户360。我更倾向于拥有一个客户微服务,因为大多数属性是相同的,而且我们想集中查看一个客户的所有信息。在这种情况下,我们可以在汽车保单微服务、旅行保单微服务等中管理客户的独特信息。)

  • 对于每个保险(汽车、旅游等),我将有一个专门的保单微服务(例如汽车保单、旅游保单等),它将包括保单、保险、核保、除外责任等。

总结

在现代化项目中,我们采用现有系统(可能是单体系统)并对其进行重建。重建的需要可能有很多原因:云迁移、技术债务、安全风险、拥有成本、交付业务需求的能力等等。在现代化项目中,必须做出的首要决定之一是我们是要迁移系统还是从头开始构建系统。

在某些情况下,即使从头开始构建系统的成本要高得多——这仍然是值得的,无论是因为技术债务的水平,还是因为新的和未来业务需求的数量。如果我们选择现代化路径,我更喜欢使用模块化单体架构模式,因为它降低了我们的风险和成本,支持增量迁移,并改善了当前的单体状况。

从头开始构建新系统时,我更喜欢结合使用微服务和迷你服务。模块化单体的缺点是如此之大,以至于在我看来,这不是一个可行的选择。有什么不同的见解欢迎提出。


推荐阅读
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
tomorrow
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有