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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 从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版)》一书,王磊等著,电子工业出版社出版。点击阅读原文,可直接购买此书。


相关文章
|
25天前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
275 6
|
6月前
|
监控 负载均衡 安全
服务治理:构建健壮的微服务生态系统的关键
在微服务架构中,服务治理是确保服务可靠性、可伸缩性和高可用性的关键组成部分。本博客将深入探讨服务治理的概念、重要性以及如何有效地在微服务生态系统中实施它。
|
3月前
|
人工智能 监控 安全
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
32 0
|
3月前
|
监控 数据可视化 安全
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
60 0
|
3月前
|
人工智能 监控 安全
基于Springcloud微服务框架智慧工地系统源码
智慧工地工程进度流程: 前期临建搭建、基础工程施工、主体结构施工、主体封顶地库平口、主体结构验收、地库安装完成、外立面施工、室外景观工程、内部一户一验、竣工备案、一站式交付。
31 0
|
4月前
|
负载均衡 监控 关系型数据库
微服务轮子项目(09) - 系统幂等性设计
微服务轮子项目(09) - 系统幂等性设计
35 0
|
6月前
|
NoSQL Java Nacos
GitHub最火的成熟私活利器:基于微服务架构的前后端分离博客系统
博客使用了一些监控的 SpringCloud 组件,但是并不一定都需要部署,必须启动的服务包含 nacos,nginx,rabbitmq, redis,mysql,mogu-gateway,mogu-sms,mogu-picture, mogu-web, mogu-admin 其它的服务都可以不启动,也不影正常使用,可以根据自身服务器配置来启动 最低配置:1核2G 【需开启虚拟内存】【容易宕机】
|
4天前
|
消息中间件 Kubernetes Java
构建高性能微服务架构:从理论到实践
【2月更文挑战第24天】 在当今快速发展的数字化时代,微服务架构已成为软件开发领域的关键趋势。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、技术选型和性能优化策略。我们将通过实际案例分析,揭示微服务架构在提高可伸缩性、容错性和维护性方面的优势,并讨论在实施过程中可能遇到的挑战及其解决方案。
|
4天前
|
消息中间件 缓存 持续交付
构建高效微服务架构:从理论到实践
【2月更文挑战第23天】 随着现代软件系统向着复杂且动态的环境演进,传统的单体应用架构已不足以应对快速变化的市场需求。微服务架构作为一种新兴的架构模式,以其灵活性、可扩展性和技术多样性受到广泛关注。本文将深入探讨微服务架构的设计原则和实施策略,通过具体案例分析如何构建一个既满足业务需求又保证系统稳定性的微服务系统。我们将讨论微服务拆分的策略、服务间通信的最佳实践、数据一致性的挑战以及持续集成与部署的重要性。文章的目的是为开发者、架构师和技术决策者提供一份实操指南,帮助他们在构建和维护微服务系统时做出明智的选择。
|
4天前
|
存储 Kubernetes 持续交付
构建高效微服务架构:后端开发的新趋势
【2月更文挑战第23天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为众多企业后端开发的首选。本文将深入探讨微服务的核心概念,剖析其设计原则,并通过具体案例展示如何在现代后端开发实践中实现微服务的高效构建与管理。

相关产品

  • 微服务引擎
  • 服务网格