从300万行到50万行代码,遗留系统的微服务改造(6)

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 从300万行到50万行代码,遗留系统的微服务改造(6)

步骤1:通过遗留系统API提供数据

通过如上所述的方式,极大地减少了对原门户平台的修改,同时通过在新服务上实现相关逻辑,不仅提升了交付效率,而且该服务能够独立部署上线。


步骤2:通过遗留系统数据源提供数据

接下来,研发团队接到的特性需求如下:

  • 支持房产发布者的信息展示。
  • 支持地理兴趣点(POI)信息显示。


但是这两部分的数据在原门户平台的基础搜索API中并未包含,在面临人手有限和交付时间紧的挑战下,如果要在门户平台中新增接口,变更成本会比较高,可能无法按时交付。

面对这些挑战,团队决定尽量避免对原有遗留系统的直接修改,改为在AppService微服务中实现新业务逻辑,做了如下修改:


  • 直接访问遗留系统数据源:由于原门户平台的基础搜索API提供的数据不足,便让AppServic
  • 通过直接访问遗留系统数据源的方式,获得所需的房源、发布者、地理兴趣点等数据信息。
  • 构建基础搜索模块:在AppService中构建基础搜索模板(EngineAPI),实现与原门户平台的基础搜索API同样的功能,提供数据给上层API。
  • 构建业务层API:在AppService中构建业务层API,新增两组API,分别是提供地理兴趣点数据的POIAPI和房产发布者信息的PubAPI。
  • 独立地理位置服务:将之前相对独立的LocAPI,拆分出来作为独立的地理位置服务LocService。


改造后的系统架构图,如图6-15所示。通过这步改造,将基础搜索数据的查询功能重构到了AppService微服务内,减少了对原门户平台相关功能的修改。


步骤3:拆分基础搜索服务,替换数据源

产品的需求持续演进,接下来,团队需要为桌面端用户新增支持多边形的地理位置搜索功能。但在现有架构下,FASTSearch搜索引擎并不支持这个功能,这就意味着需要替换原有的搜索引擎,需要对原门户平台的代码做大量的修改。


如何有效地实现这个特性呢?具体操作方法如下:

1.将基础搜索API拆分出来作为独立服务EngineService,这样以后关于搜索相关的逻辑,都可以放在EngineService中实现了。


image.png


2. 在EngineService中实现基于多边形的搜索。

3. 对原门户平台的搜索机制重构,让其使用EngineService获取相关数据(之前是使用FASTSDK)。基于这种方式,门户平台和AppService与底层搜索引擎隔离开来,可以方便地替换底层数据源。


该方案的实现,如图6-16所示。


image.png


步骤4:构建移动端专属的后端服务

团队在预期时间内很快地完成了前面的各项需求,随着业务发展迅猛,接下来需要在手机端和平板端增强用户体验。然而,目前手机端、平板端的实现逻辑较落伍,均是基于JSP的模板方式实现。如果要直接修改,成本高。


考虑到在屏幕尺寸、性能和显示限制等方面,移动设备与桌面浏览器的能力存在显著差异。因此,移动应用对后端的需求与桌面UI是不一致的。


如果仍然使用原有的门户平台逻辑,则需要同时为这两种客户端提供数据,这极大地增加了维护的成本。于是,团队借鉴了BFF模式,将手机端和平板端网站的特定后台需求,拆分为一个独立的后台服务SPA-Web,作为后端实现。为前端提供数据。然后基于最新的前端技术,采用轻量级、更有效的单页面方式实现前端,如图6-17所示。


image.png



骤4:构建移动端专属的后端服务

通过为移动端创建一个专属的后端服务,可以为移动端的用户进行专门的优化,量身打造最佳体验。同时,由于微服务架构下的这个新服务足够的小而简单,就更容易进行修改、部署和上线了,也更容易在性能和行为方面进行精心的优化。


步骤5:基于数据继续划分微服务

随着团队的微服务化实践越来越成熟,整个系统的架构趋向于朝更细的粒度演进。


系统典型的业务场景分为待售房源(Buy)、已售房源(Sold)、待租房源(Rent)等。所以,团队基于这些业务继续划分单独的搜索API以及独立的数据存储机制,每种数据由独立的ElasticSearch 集群存储,并利用前后端分离的机制实现前后端的解耦。


解耦后的系统,如图6-18所示。



image.png


对于系统中使用的服务支撑组件,如服务注册发现机制、集中化配置信息等机制,其实现和在之前的章节中阐述的差不多,这里就不展开赘述了。


3. 改造结果

可以看到,经过上面一系列步骤后,原有的门户平台已逐渐迁移为微服务的系统,原有的大约300万行的代码也只剩下了大约50万行,继续提供着业务价值。团队对遗留系统的修改和变更成本已经大大减少,总体交付周期也大大缩短,技术的升级带来性能、可维护性的提升,充分享受到了微服务架构小而美的好处。

小结

本章介绍了遗留系统的特点、改造策略和场景,并结合一个实战案例进行了讲解。目的是帮助读者从以下方面掌握对遗留系统的微服务改造方法:


  • 遗留系统是“需要被替代的系统”,往往存在类似的特征,如难于修改、学习和维护成本高、缺乏质量保障等。
  • 通过直接重写并一次性替换遗留系统解决微服务改造问题是不现实的,可能会导致上线困难、影响面不可控、学习成本高等问题的产生。
  • 对于遗留系统的改造过程,应当采取逐步替换而非一次性替换的策略。通常采用“演进式改造流程”和“绞杀者模式”来保证整个改造过程可控,并实现平滑过渡。


另外,对于遗留系统的改造需求,本章将其细分为三种场景,如新业务数据独立、新业务数据依赖以及现有业务服务化。通过对这些场景的分析,能有效地指导读者进行微服务的演进。

本文节选自《微服务架构与实践(第2版)》一书,王磊等著,电子工业出版社出版。点击阅读原文,可直接购买此书。


目录
打赏
0
0
0
0
371
分享
相关文章
从代码到心灵对话:我的CodeBuddy升级体验之旅(个性化推荐微服务系统)
本文分享了使用CodeBuddy最新版本的深度体验,重点探讨了Craft智能体、MCP协议和DeepSeek V3三大功能。Craft实现从对话到代码的无缝转化,大幅提升开发效率;MCP协议打通全流程开发,促进团队协作;DeepSeek V3则将代码补全提升至新境界,显著减少Bug并优化跨语言开发。这些功能共同塑造了AI与程序员共生的未来模式,让编程更高效、自然。
149 15
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
236 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
|
4月前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
180 0
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
126 4
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
245 2
微服务架构系统稳定性的神器-Hystrix
Hystrix是由Netflix开源的库,主要用于微服务架构中的熔断器模式,防止服务调用失败引发级联故障。它通过监控服务调用的成功和失败率,在失败率达到阈值时触发熔断,阻止后续调用,保护系统稳定。Hystrix具备熔断器、资源隔离、降级机制和实时监控等功能,提升系统的容错性和稳定性。然而,Hystrix也存在性能开销、配置复杂等局限,并已于2018年进入维护模式。
107 0
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
199 0
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
390 6
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
188 1
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
514 71
从单体到微服务:如何借助 Spring Cloud 实现架构转型
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问