当前位置:首页 > 科技  > 软件

从单体架构向微服务迁移:模块化单体是如何帮助的

来源: 责编: 时间:2023-12-20 09:23:41 371观看
导读你开始构建一个漂亮的单体系统。也许是一个模块化的单体系统。随着时间的推移,系统不断增长,需求也在不断变化。渐渐地,系统开始出现裂痕。这可能是出于组织原因,需要在团队之间分配工作。也可能是由于扩展性问题和性能瓶

你开始构建一个漂亮的单体系统。也许是一个模块化的单体系统。随着时间的推移,系统不断增长,需求也在不断变化。渐渐地,系统开始出现裂痕。Iw828资讯网——每日最新资讯28at.com

这可能是出于组织原因,需要在团队之间分配工作。也可能是由于扩展性问题和性能瓶颈。你开始评估可能的解决方案,以及每种解决方案的优势和权衡。最后,你做出了一个决定。是时候将系统的部分部分迁移到独立的(微)服务中了。Iw828资讯网——每日最新资讯28at.com

那么,我们如何从单体架构迁移到微服务呢?Iw828资讯网——每日最新资讯28at.com

Iw828资讯网——每日最新资讯28at.com

使用有界上下文进行解耦

从单体架构转移到微服务的第一步是识别有界上下文。因为它们代表了可用于提取的领域的内聚部分。Iw828资讯网——每日最新资讯28at.com

一个解决方案是使用领域驱动设计战略建模来识别有界上下文。Iw828资讯网——每日最新资讯28at.com

有界上下文定义了模块之间的显式边界,并分离了各自的责任。这是迁移到微服务时面临的最大挑战之一。确定良好的边界确保微服务专注于一个问题领域。Iw828资讯网——每日最新资讯28at.com

在单体中定义边界也更容易,因为你不是在处理分布式系统。重构不良边界风险较低,你有更多自由度去“搞定”。Iw828资讯网——每日最新资讯28at.com

Iw828资讯网——每日最新资讯28at.com

接下来你需要解决的问题是耦合。耦合表现为两种方式:Iw828资讯网——每日最新资讯28at.com

  • 数据库依赖
  • 模块间的通信

你可以通过构建模块化单体来从一开始解决这些问题。但我也会解释你可以使用的指导原则来解决耦合。Iw828资讯网——每日最新资讯28at.com

模块化单体如何解决耦合

模块化单体是一个响亮的名字,指的是由几个有界上下文(模块)构建的单体系统,并遵循一系列控制耦合的原则。每个模块包含一组内聚的功能,并且在系统中与其他模块隔离。这种隔离涉及数据库依赖和模块间的通信。Iw828资讯网——每日最新资讯28at.com

Iw828资讯网——每日最新资讯28at.com

你可以把一个模块看作系统中的一个独立应用程序。一个模块拥有自己的领域、实体、用例和数据库表。模块作为一个单一可执行应用程序一起部署。但在其他方面它们是独立的。Iw828资讯网——每日最新资讯28at.com

你可以对每个模块应用不同的架构方法,比如清晰架构。Iw828资讯网——每日最新资讯28at.com

我提到你需要减少模块间的耦合。Iw828资讯网——每日最新资讯28at.com

以下是解决数据库耦合的两个原则:Iw828资讯网——每日最新资讯28at.com

  • 模块不能在数据库中共享表
  • 模块不能直接查询其他模块的数据库表

共享数据库表会导致高度耦合,而这恰恰是你要避免的。你可以使用模式在逻辑层面或物理上使用不同的数据库为每个模块隔离数据。Iw828资讯网——每日最新资讯28at.com

一个模块应该暴露一个其他模块可以调用的公共 API。这个公共 API 是模块的入口点。这是模块间通信的唯一方式。Iw828资讯网——每日最新资讯28at.com

模块间通信可以是同步的,使用方法调用,或者异步的,使用消息总线。Iw828资讯网——每日最新资讯28at.com

我更倾向于使用消息传递的异步通信。它耦合度低,使得向微服务的转变更加容易。Iw828资讯网——每日最新资讯28at.com

为系统添加消息代理

为了在模块间实现异步通信,你可以引入一个消息代理。但你无需从一开始引入一个完整的消息代理。Iw828资讯网——每日最新资讯28at.com

你可以使用诸如MassTransit这样的抽象来在模块之间实现消息传递,同时将传输机制抽象化。Iw828资讯网——每日最新资讯28at.com

MassTransit 有一个内存传输机制,可以很好地在单个进程中工作。它非常快速。但它不是持久化的,如果总线停止,你可能会丢失消息。Iw828资讯网——每日最新资讯28at.com

在引入真正的消息代理时,你只需要配置不同的传输机制。但你不需要改变你的消息传递代码。Iw828资讯网——每日最新资讯28at.com

Iw828资讯网——每日最新资讯28at.com

在模块化单体中引入消息传递的目的是什么?Iw828资讯网——每日最新资讯28at.com

这样设计系统可以使模块之间松耦合和独立。在项目成熟后,你在开始时增加的复杂性是合理的。Iw828资讯网——每日最新资讯28at.com

将模块提取到微服务中

我们决定从单体系统迁移到微服务。因为我们以模块化的方式构建了系统,所以迁移的关键在于将一个模块提取到一个新的进程中。Iw828资讯网——每日最新资讯28at.com

你应该在服务前面引入一个反向代理,来路由进入的流量。这将隐藏微服务系统的实现细节,不让客户端应用程序知道。Iw828资讯网——每日最新资讯28at.com

新的微服务需要连接到消息总线,但我们不需要在代码中做任何改变。使用消息传递在模块之间进行通信简化了迁移过程。这可能让你想起事件驱动架构。Iw828资讯网——每日最新资讯28at.com

如果你使用方法调用来实现模块间通信,你必须将这种实现替换为通过网络的 HTTP 调用。因为你现在正在构建一个分布式系统,之前的方法调用实现将无法工作。你还需要考虑认证、容错等问题……Iw828资讯网——每日最新资讯28at.com

Iw828资讯网——每日最新资讯28at.com

从单体系统中提取模块会用新微服务的功能替换旧系统的所有功能。这个迁移到微服务的过程遵循了榕树模式。Iw828资讯网——每日最新资讯28at.com

总结思考

从单体架构迁移到微服务的最大障碍是耦合。耦合是变更的阻止者。因此,这是你需要解决的第一件事。Iw828资讯网——每日最新资讯28at.com

你需要在数据库层面和代码中的组件间解决耦合。以模块化的方式构建系统可以从一开始就避免这些问题。Iw828资讯网——每日最新资讯28at.com

这就是为什么模块化单体是一个很好的方法。Iw828资讯网——每日最新资讯28at.com

你可以在系统中识别有界上下文,并将它们用作单体中的边界。在单体中正确划分边界要容易得多。Iw828资讯网——每日最新资讯28at.com

迁移到微服务就是将模块提取到独立服务的过程。Iw828资讯网——每日最新资讯28at.com

当然,你仍然需要考虑安全性和容错性,因为现在你有了一个分布式系统。Iw828资讯网——每日最新资讯28at.com

当谈论抽象的架构时,可能难以理解,但在讨论概念性解决方案时却是很重要的。Iw828资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-50038-0.html从单体架构向微服务迁移:模块化单体是如何帮助的

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Golang 清晰代码指南

下一篇: 四大软件架构:掌握单体、分布式、微服务、Serverless 的精髓

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top