12 个技巧帮你顺利从单体应用到微服务

2026马年测算系统架构演进:从Layui到分布式高并发的全栈实践 本文详细介绍了2024马年测算系统从Layui到分布式高并发架构的全栈演进过程。通过前端交互优化、微服务拆分、高并发处理等实战技巧,系统成功支撑百万级用户访问,特别是在塔罗牌测算和黄历查询等特色功能上实现技术突破,为玄学应用开发提供了宝贵经验。 阅读详情

前言

你的团队决定是时候摆脱那个旧的、笨重的单体了,它运行得很好,但是单体已经变得如此之大,以至于你花费更多的精力来维护它而不是添加功能。这里有 12 个技巧,可帮助您尽可能顺利地过渡到微服务。

#1 确保你知道你在做什么

重写从来都不是一件容易的事,但是从单体应用到微服务,你改变的不仅仅是编码方式;你正在改变公司的运营模式。你不仅需要学习一个新的、更复杂的技术栈,管理层还需要调整工作文化,将人员重组为更小的跨职能团队。 如何最好地重组团队和公司是值得单独发帖的主题。在本文中,我想重点介绍迁移的技术方面。 首先,在开始之前尽可能多地研究采用微服务所涉及的权衡是很重要的。您希望绝对确定微服务(而不是其他替代解决方案,例如模块化单体)是适合您的解决方案。 首先学习有关微服务架构的所有知识,并查看一些示例项目以了解其工作原理。这里有些例子

#2 制定计划

拆除单体应用需要大量准备工作,因为旧系统必须在过渡期间保持运行。 迁移步骤可以通过工单进行跟踪,并像任何其他任务一样在每个 sprint 中进行。这不仅有助于获得动力(实际上有朝一日实现迁移),而且让业务所有者了解团队如何计划实施如此大的变化。 在计划期间,您必须:

  • 解开单体内部的依赖关系。

  • 确定所需的微服务。

  • 为微服务设计数据模型。

  • 开发一种在单体和微服务数据库之间迁移和同步数据的方法。

  • 设计 API 并计划向后兼容。

  • 捕获单体应用的基线性能。

  • 为新系统的可用性和性能设定目标。

除非您从一个相当简单的单体架构迁移,否则您将需要高级技术,例如领域驱动设计 (DDD)。

#3 把所有东西都放在一个 monorepo 中

当你分解单体时,大量代码将从单体中移出并转移到新的微服务中。monorepo可帮助您跟踪这些类型的更改。此外,将所有东西放在一个地方可以帮助您更快地从故障中恢复。 您的单体应用很可能已经包含在一个存储库中。因此,只需为微服务创建新文件夹即可。

#4 使用共享

CI 管道 在开发过程中,您不仅会不断推出新的微服务,还会重新部署单体应用。这个过程越快、越轻松,你的进步就越快。设置持续集成和交付(CI/CD) 以自动测试和部署代码。 如果您使用 monorepo 进行开发,则必须牢记以下几点:

  • 通过启用基于更改的执行或使用单存储库感知构建工具(例如Bazel或Pants )来保持管道快速。通过仅对更新的代码运行更改,这将使您的管道更加高效。

  • 配置多个促销,每个微服务一个,一个单体。使用这些促销活动进行持续部署。

配置测试报告以快速发现和排除故障。

#5 确保你有足够的测试

当我们确定代码没有回归时,重构会更加令人满意和有效。自动化测试让您有信心持续发布单体更新。 一个很好的起点是测试金字塔。您将需要大量的单元测试、一些集成测试和一些验收测试。

​旨在像在持续集成管道中一样经常在本地开发机器上运行测试。

#6 安装 API

网关或 HTTP 反向代理 随着微服务的部署,您必须隔离传入流量。迁移的功能由新服务提供,而尚未准备好的功能由单体提供。 有几种路由请求的方法,具体取决于它们的性质:

  • API 网关允许您根据经过身份验证的用户、cookie、功能标志或 URI 模式等条件转发 API 调用。

  • HTTP 反向代理的作用相同,但针对的是 HTTP 请求。在大多数情况下,单体实现了 UI,因此大多数流量都会流向那里,至少一开始是这样。

​使用 API 网关和 HTTP 反向代理将请求路由到适当的端点。您可以在非常细粒度的级别上在单体和微服务之间切换。 迁移完成后,网关和代理将保留——它们是任何微服务应用程序的标准组件,因为它们提供转发和负载平衡。如果服务出现故障,它们还可以充当断路器。

#7 考虑一体成型的模式

好的,这仅适用于您计划将容器或 Kubernetes 用于微服务的情况。在这种情况下,容器化可以帮助您实现基础架构的同质化。一体式整体模式包括在 Docker 等容器内运行整体。 如果您以前从未使用过容器,那么这是熟悉该技术的好机会。这样一来,您就离了解 Kubernetes 更近了一步。要学习的东西很多,所以要为陡峭的学习曲线做好计划:

  • 了解 Docker 和容器。

  • 在容器中运行你的单体应用。

  • 在容器中开发和运行您的微服务。

  • 完成迁移并掌握容器后,了解 Kubernetes。

  • 随着工作的进展,您可以扩展微服务并逐渐将流量转移到它们。

​容器化单体应用是标准化部署的一种方式,也是学习 Kubernetes 的绝佳第一步。

#8 热身于变化

习惯微服务需要时间,所以最好从小处着手,为新范式做好准备。留出足够的时间让每个人都进入正确的心态、提高技能并从错误中吸取教训,而不会受到最后期限的压力。 在这些初步的初步步骤中,您将学到很多关于分布式计算的知识。您必须处理云 SLA,为您自己的服务设置 SLA,实施监控和警报,定义跨团队通信的渠道,并决定部署策略。

选择一些容易开始的东西,比如与单体架构的其余部分几乎没有重叠的边缘服务。例如,您可以先构建身份验证微服务并路由登录请求。

​选择一些容易开始的东西,比如简单的边缘服务。

#9 使用功能标志

功能标志是一种无需重新部署即可更改系统功能的软件技术。您可以使用功能标志在迁移时打开和关闭部分单体应用、试验替代配置或运行 A/B 测试。 启用功能标志的迁移的典型工作流程是:

  • 确定要迁移到微服务的单体功能的一部分。

  • 用功能标志包装功能。重新部署单体。

  • 构建和部署微服务。

  • 测试微服务。

  • 一旦满意,通过关闭该功能来禁用单体应用上的该功能。

  • 重复直到迁移完成。

因为功能标志允许我们将非活动代码部署到生产环境并随时切换它,所以我们可以将功能发布与实际部署分离。这为开发人员提供了极大的灵活性和控制力。

#10 模块化单体

如果你的单体应用是一堆代码,那么一旦迁移完成,你很可能会得到一堆分布式代码。就像在全面翻新之前收拾房子一样,模块化整体结构是必要的准备步骤。 模块化单体是一种软件开发模式,由独立且可互换的垂直堆叠模块组成。与模块化单体相反的是经典的 N 层或分层单体。

​分层的单体很难解开——代码往往有太多的依赖关系(有时是循环的),使得更改难以实现。 模块化单体是微服务的下一个最佳选择,也是迈向微服务的垫脚石。规则是模块只能通过公共 API 进行通信,默认情况下一切都是私有的。因此,代码的交织更少,关系易于识别,依赖关系清晰。

​有两种模式可以帮助你重构单体:Strangler Fig 和 Anticorruption Layer。

Strangler Fig 在Strangler Fig模式中,我们将整体重构从边缘到中心。我们在边缘咀嚼,逐步重写孤立的功能,直到整体重做。 模块之间的调用通过“扼杀外观”进行路由,该外观模拟和解释遗留代码的输入和输出。一点一点地,模块被创建并慢慢取代旧的单体。​

​单体是一次模块化的。最终,旧的巨石消失了,取而代之的是新的。

反腐败层模式 您会发现,在某些情况下,当您重构整体时,一个模块中的更改会传播到其他模块。为了解决这个问题,您可以在快速变化的模块之间创建一个转换层。此防腐败层可防止一个模块中的更改影响其余模块。

​反腐败层通过转换模块和单体之间的调用来防止更改传播。​

#11 解耦数据

超级强大的微服务使您能够随时部署任何微服务,而与其他微服务几乎没有协调。这就是为什么必须不惜一切代价避免数据耦合的原因,因为它会在服务之间产生依赖关系。每个微服务都必须有一个私有且独立的数据库。 意识到您必须将单体应用的共享数据库非规范化为(通常是冗余的)较小的数据库,这可能会令人震惊。但数据局部性最终将让微服务自主工作。

​

上图是将数据解耦到独立的数据库中。 解耦后,您必须安装机制以在转换过程中保持新旧数据同步。例如,您可以设置数据镜像服务或更改代码,以便将事务写入两组数据库。

​

在开发过程中使用数据复制来保持表同步。

#12 添加可观察性

新系统必须比旧系统更快、性能更高、可扩展性更强。否则,为什么要用微服务呢? 您需要一个基线来比较旧的和新的。在开始迁移之前,请确保您有良好的指标和日志可用。安装一些集中式日志记录和监控服务可能是一个好主意,因为它是任何微服务应用程序可观察性的关键组件。

​

​结论

微服务之旅绝非易事。但我希望通过这些提示,您可以节省一些时间和挫败感。 请记住以小增量进行迭代,利用 CI/CD 来保证单体应用程序正在接受回归测试,并将所有内容保存在一个存储库中,以便在出现问题时随时回退。

​注:该文以小增量小心翼翼谨慎的方式重构原来系统,但是没有充分认识到单体与微服务是两种完全不同风格的架构,是南辕北辙的战略方向性区别,​为什么?

因为微服务比单体​切分更小,如何小?是依据DDD有界上下文去切分的,而上下文需要从战略大背景大景观图下考虑的,所以,是团队认知上对业务理解巨大升迁,变革,这种忽然开朗的结果往往是方向上南北大区别,而摸着石头过河的小增量重构只适合方向未定或方向大概没有偏向情况下​。

这种重构是听上去很有道理,但是完全不实用,从单体到微服务的迁移,不只是技术上的变化,还有业务知识的进步,更可能是团队彻底改变​。

​新团队能忍受在旧思维旧单体下委曲求全吗?

Java系统上线与监控的10大绝技,你掌握了几招? 通过今天的探索,你应该对如何让Java应用顺利上线并保持其高效、稳定的运行状态有了全面的理解。虽然这个过程可能看起来有些复杂,但实际上,只要按照正确的步骤走,任何人都能成功搭建出自己的监控体系。记住,实践是最好的老师,不断地尝试和优化才能让你的技术更加精湛。现在,就让我们一起踏上这段充满挑战与乐趣的学习之旅吧! 阅读详情

相关推荐

2026版大学生Java毕设通关:SpringBoot从入门到项目落地一站式教程

专为2026届计算机/软件工程/Java相关专业大学生量身打造,,从选题、环境搭建、项目开发、部署上线到论文答辩全流程全覆盖。哪怕你只有JavaSE基础,也能1-3个月搞定合格毕设,拒绝踩坑、拒绝拖延、拒绝答辩翻车。

2601_94871597的博客 198

如何将单体服务重构成微服务

本文提供了将单体应用重构为微服务的实用指南。采用演进式重构策略,建议冻结单体功能,通过防腐层隔离新旧系统,按业务能力或DDD原则拆分服务。重点推荐绞杀者模式逐步替换功能,强调数据拆分需谨慎处理分布式事务。文章还列出了微服务基础设施选型建议,包括API网关、服务发现等核心组件,并给出了分阶段的演进路线图。最后提醒避免大爆炸重写、分布式单体和忽视运维成本等常见陷阱,强调采用增量交付和小步快跑策略。

huangpf_vcx 1724

Java MES源码实战:产线级Spring Boot制造系统解析

MES(制造执行系统)是连接企业计划层与车间控制层的核心枢纽,其本质在于实现人、机、料、法、环的数据闭环。基于Spring Boot的Java MES系统,凭借稳定架构、低耦合模块设计与强产线适配性,成为制造业数字化落地的关键技术载体。本文深入剖析一套真实产线验证的JAVA MES源码,涵盖单体分层架构选型逻辑、工单防错报工的乐观锁实现、设备协议适配器工厂模式、质量规则Groovy引擎及物化视图加速OEE计算等关键技术原理。内容聚焦制造业高频痛点——如扫码报工并发冲突、哑设备接入、BOM动态变更、质检规则可

weixin_33849215的博客 510

从单体迁移到微服务的十二种方法

你的团队决定是时候摆脱那个旧的、笨重的单体了,它运行得很好,但是单体已经变得如此之大,以至于你花费更多的精力来维护它而不是添加功能。这里有 12 个技巧,可帮助您尽可能顺利地过渡到微服务。#1 确保你知道你在做什么重写从来都不是一件容易的事,但是从单体应用到微服务,你改变的不仅仅是编码方式;你正在改变公司的运营模式。你不仅需要学习一个新的、更复杂的技术栈,管理层还需要调整工作文化,将人员重组为更小...

1477

传统架构迁移到微服务架构方案

本文档描述了从传统架构迁移到微服务架构的实际生产级方案。

贝塞尔曲线在机器人路径平滑中的实战应用与优化

本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。

weixin_29051811的博客 307

从服务化到微服务-springcloud

文章目录从服务化到微服务RibbonRestTemplateFeign的目标 从服务化到微服务 微服务架构与传统单体架构的对比 微服务的架构: 微服务把每一个职责单一的功能放在一个独立的服务中 。 每个服务运行在一个单独的进程中。 每个服务有多个实例运行。运行在容器化的平台,可以平滑伸缩。 每个服务有自己的数据存储。独立的数据,缓存,消息队列等。 每个服务有独立的运营平台。每个服务高度自治,内部...

qq_24095055的博客 1638

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1744

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

你开始构建一个漂亮的单体系统。也许是一个模块化的单体系统。随着时间的推移,系统不断增长,需求也在不断变化。渐渐地,系统开始出现裂痕。这可能是出于组织原因,需要在团队之间分配工作。也可能是由于扩展性问题和性能瓶颈。你开始评估可能的解决方案,以及每种解决方案的优势和权衡。最后,你做出了一个决定。是时候将系统的部分部分迁移到独立的(微)服务中了。那么,我们如何从单体架构迁移到微服务呢?使用有界上下文进行...

小技术君 1563

SPH vs Lagrange网格混合建模实战:用LS-DYNA模拟弹丸穿孔效应

本文深入探讨了在LS-DYNA中运用SPH与Lagrange网格混合建模技术,高效模拟超高速碰撞下弹丸穿孔效应的实战方法。通过分析模型分区策略、耦合界面处理及关键参数设置,解决了传统方法在模拟大变形、材料断裂时的网格畸变或计算成本高昂问题,为相关工程仿真提供了兼顾精度与效率的解决方案。

weixin_29211309的博客 109

手把手教你用STM32F429+FreeRTOS搭建开源SIP电话(附代码与避坑指南)

本文详细介绍了如何使用STM32F429和FreeRTOS搭建开源SIP电话系统,涵盖硬件选型、FreeRTOS任务划分、PJSIP协议栈移植、音频系统优化及安全实践。通过实战案例和代码示例,帮助开发者快速实现嵌入式VoIP通信,特别适合物联网和音视频通信领域的应用开发。

weixin_33582311的博客 360

一文带你搞懂微服务架构深度解析:微服务的采用前提,技术与理念

技术与理念 微服务的概念还在快速发展的过程中,它不仅给我们提供了分布式下细粒度服务设计、构建、交付、运维的方法,同时整合了过去几年行业的先进技术和最佳实践。 面向服务 大部分企业选择微服务架构是业务驱动的。对于基于传统J2EE技术栈的Web项目而言,早期单体架构就是所谓的“一个War包打天下”,将应用程序的所有功能都打包成一个独立的War包,部署在Tomcat的指定目录下就可以顺利运行。然而,软件项目是一个不断迭代和变化的过程,业务模块的增加、功能的扩展、人员的更迭、需求的变动最终都需要修改代码来实现

m0_63437643的博客 737

AUTOSAR BswM配置实战:手把手教你用Vector Davinci Configurator搭建第一个模式管理规则

本文详细介绍了如何使用Vector Davinci Configurator工具配置AUTOSAR BswM模块,实现车身控制ECU的模式管理规则。通过实战案例,从环境准备、核心概念梳理到具体配置步骤,包括ModeRequestPort、ModeCondition、Logical Expression和Rules的构建,帮助工程师快速掌握BswM配置技巧,提升汽车电子软件开发效率。

weixin_28678831的博客 353

阿里系微服务进阶指南

随着移动互联网的深入发展,分布式、微服务成为了当下技术人必须要了解的架构方向。不少开源社区也涌现出了大量的微服务解决方案,如SpringCloud全家桶、SpringCloudAliba...

Java知音 752

Quartus原理图设计入门:从半加器到4位全加器的保姆级教程

本文提供Quartus原理图设计入门教程,详细讲解从半加器到4位全加器的实现过程。通过原理图输入法,逐步构建数字电路设计基础模块,涵盖环境搭建、逻辑设计、层次化实现及功能验证等关键步骤,帮助FPGA初学者快速掌握Quartus工具链和加法器设计方法。

weixin_29291185的博客 466

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 294

Must Read Resources for Java Developers:DevOps和云原生实践终极指南

Java开发者想要在云原生时代保持竞争力,掌握DevOps和云原生实践至关重要。这份**Must Read Resources for Java Developers**资源集合为开发者提供了从基础到进阶的完整学习路径。无论你是刚接触云原生技术的新手,还是希望深化DevOps实践的经验丰富的Java开发者,这些精选资源都能帮助你快速掌握核心技能。💡 ## 🚀 DevOps和云原生学习路线图

gitblog_00604的博客 466

滑模观测器与锁相环结合应用:让电机“无感”也能精准旋转的奥秘

本文介绍了永磁同步电机无传感器控制中的滑模观测器(SMO)结合锁相环(PLL)技术。SMO通过创建虚拟电机模型,利用电流误差产生控制信号来估计反电动势;PLL则从反电动势中解码转子位置和速度信息。该组合方案兼具SMO的鲁棒性和PLL的高精度,计算量小且硬件要求低。文章详细阐述了原理、数学模型、参数整定方法及实际实现技巧,包括离散化处理、符号函数替代等优化手段,并分析了低速性能限制、抖振问题等常见挑战及解决方案。最后指出该技术未来将与人工智能、多观测器融合等方向结合发展。

汽车软件开发 196

想成为软件架构师,一定要看的经典书单

点击图片购书参与文末话题讨论,每日赠送异步图书​——异步小编互联网的发展带动了各行各业信息化的趋势,一大批高新企业如雨后春笋般出现在大众的视野中。于是,不同类型的软件项目应运而生。在这些琳琅满目的项目中,有企业管理、电商平台、财务报表、金融银行、医疗器械、智慧城市和大数据分析等类型。项目的层出不穷带来了巨大的利润,让高新企业不断地成长起来,与此同时,也带来了很多相关的就业岗位。当然,要顺利地完成这...

人邮异步社区 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【若依框架】Java最新AI+若依框架项目开发新方案

若依内置的数据字典,用于维护系统中常见的静态数据。例如:性别、状态…功能包括:字典类型管理、字典数据管理若依为定时任务功能提供方便友好的web界面,实现动态管理任务。允许用户通过拖放等可视化操作创建表单,比如用来收集数据的表格或调查问卷。可以自定义表单的各个部分,比如添加不同的输入项和设置验证规则,无需编写代码。提供了导出数据、导入数据、分享表单和设置权限的功能,方便数据管理和共享。ruoyi-vue数据库设计包含了多个表结构,用于支持系统的各种功能模块。

qq_60969145的博客 3389

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TOGAF架构会议中引入反对派角色的实践与效果

在软件架构设计过程中,群体性思维盲区是影响决策质量的关键挑战。通过引入结构化反对机制,可以有效提升架构评审的科学性。本文基于TOGAF框架实践,详细解析了反对派角色的三个核心维度:专业深度、思维差异和表达技巧。该机制通过预研、辩论、收敛三阶段流程设计,结合量化评估体系,在腾讯实际项目中实现重大缺陷发现率降低63%的显著效果。特别适用于微服务拆分、技术选型等关键架构决策场景,为构建高效技术决策文化提供了可复用的工程实践方案。

weixin_30411819的博客 357

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【课程设计】基于微服务架构的电商平台 计算机毕业设计源码84409

该平台适用于多种用户角色:注册用户可以注册登录、浏览商品、管理购物车和订单;商家能管理商品信息、处理订单及物流配送;管理员负责系统用户管理、公告发布及资源管理等。平台还集成了商城公告和资讯推荐功能,丰富用户交互体验。整体设计注重灵活性和可扩展性,使平台能够应对市场变化并持续优化用户体验。这种架构不仅提升了用户体验,也为后续的功能扩展和技术升级奠定了坚实基础,更好地服务于现代电商环境下的多样化需求....

专业程序开发源的博客 462

IntelliJ IDEA 从安装配置到高效开发:核心功能与实战技巧全解析

集成开发环境(IDE)是现代软件开发的核心工具,它通过集成代码编辑、编译、调试和项目管理等功能,极大提升了开发效率与代码质量。其核心原理在于对编程语言的深度理解和对开发者工作流的智能辅助。在Java开发领域,IntelliJ IDEA凭借其卓越的代码智能感知、强大的重构能力和丰富的插件生态,成为众多开发者的首选。它不仅能无缝支持Maven、Gradle等构建工具和Git版本控制,还通过实时代码分析、模板生成和深度调试等功能,直接服务于Web开发、微服务架构等主流应用场景。本文聚焦于IDEA的实战应用,详细解

weixin_34413802的博客 510
上一篇: 有哪些是Spring用到的设计模式
下一篇: 谈谈基于Kafka的六种微服务架构事件驱动模式
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值