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

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

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

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

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

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


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

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

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

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

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

  • 可维护性

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

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

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

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

  • 并行工程

  • 敏捷 SDLC

  • CI/CD

微服务

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

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

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


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

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

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

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

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

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

  • 缓存

  • 业务领域报告和仪表板

  • 跨微服务特性

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

  • 端到端测试

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

模块化单体

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

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


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

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

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

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


  • 更简单的管理

  • 更多隔离

  • 更少的依赖

  • 降低企业责任风险

  • 提高可重用性

  • 更好的可维护性

  • 更简单的测试

  • 更好的安全性

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


  • 更简单的操作和支持

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

  • 降低基础设施成本

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

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

普通保险示例

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

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

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

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

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


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

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

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

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

总结

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

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

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


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
    go,通过,map,filter,foreach,等,流,式,ap ... [详细]
  • API网关作为微服务架构中的关键组件,扮演着系统与外部世界交互的唯一接口角色。它不仅封装了系统的内部复杂性,还为不同客户端提供了个性化的API接口。本文将探讨API网关的重要性及其核心功能。 ... [详细]
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社区 版权所有