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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 从300万行到50万行代码,遗留系统的微服务改造(3)

3. 挎斗模式


传统企业中存在大量的遗留系统,要对这些遗留系统全部进行微服务化改造的成本会很高,并不现实,而且有些遗留系统甚至是无法完全改造的。对于这些系统,我们的选择并不一定是将其进行微服务化改造,而是将其接入到微服务环境中,与其他服务共同协作来实现业务需求。


  • 然而将各种形态各异的遗留系统接入到微服务环境中并不容易,存在以下常见问题:


  • 需要对原有代码进行一定修改,但遗留系统有时本身已经难于修改,而且如果原系统是由多种语言构成的,就要为每种语言考虑解决方案。


接入代码如果是和原系统运行在同一进程中,就意味着没有很好的隔离,可能会因为接入代码的一点小问题造成原系统无法工作。那么是否存在低成本的方法,将遗留系统接入到微服务环境中呢?一种方法是使用挎斗模式,如图6-4所示。“挎斗”一词来源于带挎斗的摩托车。


微信图片_20220123184453.jpg



图6-4  挎斗模式


如图6-4所示,具体到遗留系统接入场景下,挎斗模式就是将接入功能代码集中在一起,作为一个独立的进程或服务,为不同语言的遗留系统提供一个同构的接入接口。在部署结构上,挎斗服务与原遗留系统紧密相关,原遗留系统在哪里它就在哪里。对于原遗留系统应用程序的每个实例,旁边都部署和托管了一个挎斗实例。挎斗是支持与原应用一起部署的进程或服务。


使用挎斗模式的好处有以下几个:

  • 挎斗服务是独立运行的进程或服务,与原遗留系统的实现语言无关,不需要为每种语言各开发一种挎斗。
  • 由于是非侵入式的接入方法,通常不需要改写原遗留系统的代码,可以实现零修改成本的接入。
  • 挎斗服务与原遗留系统相邻部署,可以访问与原系统相同的资源,有时可以拿来作为监控服务的接入代理。
  • 虽然增加了一些通信成本,但是由于挎斗与原系统相邻部署,增加的通信成本往往很少,延迟很低。


在使用挎斗模式时,也需要注意以下问题:


  • 注意与原系统相邻部署,降低通信时延。
  • 注意进程间采用与语言无关的通信机制,如REST。
  • 考虑使用容器化的部署方式,比如将跨斗服务和遗留系统部署在同一个Pod中。
  • 考虑放入挎斗的功能,是作为单独的服务或是传统的守护进程运行方式。


ServiceMesh就是采用了挎斗模式的思路,在每个服务近端部署一个代理,帮助遗留系统接入ServiceMesh,享受服务治理带来的好处。



三、遗留系统改造场景

在进行具体的改造前,可能会遇到如下的挑战:


  • 新旧系统可能需要不同的数据源,或具有不同的数据库结构,怎样解决数据之间的同步和依赖问题呢?
  • 单体应用下的旧系统需要拆分为多个服务时,怎样实现安全的渐进式拆分?


下面根据遗留系统改造过程中的常见场景,来一一解答这些问题。遗留系统的常见改造场景,如图6-5所示。


微信图片_20220123184516.jpg


图6-5遗留系统的常见改造场景


如图6-5所示,对于某个具体改造需求,可以分为以下两种不同的场景。

  • 实现新业务:需要在系统中增加新业务,与现有业务相对独立。根据新业务与现有业务之间.
  • 否存在数据依赖关系,又可分为两种子场景,即与现有业务数据独立或者与现有业务数据依赖。
  • 对现有业务微服务化:需要将系统的现有业务改造为微服务架构,比如对现有业务的拆分和服务化工作。


改造场景1:实现新业务时与现有业务数据独立

微信图片_20220123184534.jpg


图6-6改造场景1:业务数据独立


由于和遗留系统的数据之间无耦合,新服务的技术栈、工具选型就比较灵活,充分利用到微服务技术的异构性。


改造场景2:实现新业务时与现有业务数据依赖

新业务与现有业务有数据依赖时,根据数据持有者不同,有两种处理方案。


  • 方案A:遗留系统持有数据,新业务访问共享数据。
  • 方案B:新业务服务持有数据,通过数据同步解决数据依赖问题。


方案A:遗留系统持有数据,新业务访问共享数据

适用场景:允许新业务访问遗留系统的共享数据,或者数据库分离成本较高。

实现方案:在允许新业务服务直接访问遗留系统的数据库的情况下,最简单的一种实现方案是新业务服务直接连接遗留系统数据库获得数据,如图6-7所示。


这种方案的实施成本相对较低,与原有数据源进行集成即可,但缺点也在于此,由于直接使用了数据库作为集成方式,新业务服务仍与原遗留系统数据存在直接耦合,原数据库的变动会直接影响到新业务服务的实现,而且对于新旧业务的数据访问权限与控制也需要纳入考虑范围内。针对这些问题,也可以考虑另外一种方案,即新业务服务通过遗留系统所提供的API来获得数据,如图6-8所示。



适用场景:新业务与现有业务数据独立,不存在依赖。


实现方案:新业务可以通过单独的服务和数据库来实现。在消费者请求和底层系统之间引入一个绞杀者门面服务,该服务负责将请求按照业务不同路由到遗留系统和新业务服务上即可,如图6-6所示。


微信图片_20220123184554.jpg


image.png



相关文章
|
8天前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
317 6
|
8天前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
8天前
|
API 开发者 UED
构建高效微服务架构:后端开发的新趋势移动应用与系统:开发与优化的艺术
【4月更文挑战第30天】 随着现代软件系统对可伸缩性、灵活性和敏捷性的日益需求,传统的单体应用架构正逐渐向微服务架构转变。本文将探讨微服务架构的核心概念,分析其优势,并着重讨论如何利用最新的后端技术栈实现一个高效的微服务系统。我们将涵盖设计模式、服务划分、数据一致性、服务发现与注册、API网关以及容器化等关键技术点,为后端开发者提供一份实操指南。 【4月更文挑战第30天】 在数字化时代的浪潮中,移动应用和操作系统的紧密交织已成为日常生活和商业活动的基石。本文将深入探讨移动应用开发的关键技术、跨平台开发工具的选择以及移动操作系统的架构和性能优化策略。通过分析当前移动应用开发的挑战与机遇,我们将
|
8天前
|
消息中间件 监控 中间件
探索微服务架构下的系统弹性设计
【4月更文挑战第26天】 在当今快速迭代和持续部署的软件发展环境中,系统的弹性设计成为维护高可用性和稳定性的关键因素。本文将深入探讨在微服务架构下如何实现系统弹性,包括识别潜在的故障点、设计容错机制、以及通过实践案例分析提升系统整体的韧性。我们将讨论一系列策略,如服务降级、超时管理、重试策略、断路器模式等,旨在为开发者提供一套实用的系统弹性设计方案。
|
8天前
|
数据采集 运维 监控
微服务监控:守护系统稳定的终极防线
微服务监控在数字化时代日益重要,它帮助运维和开发人员实时监测服务性能、状态和安全,确保微服务架构的稳定性和可用性。构建微服务监控体系需关注合理监控策略、数据采集处理、可视化及告警。数据采集的三大支柱是指标、日志和链路追踪。监控涵盖基础设施、系统、应用和业务层面。通过优化监控体系、融合业务场景和建立跨团队协作,可提升监控效果。未来,AI和云计算将推动微服务监控向更精准、高效和安全的方向发展。
77 0
|
8天前
|
人工智能 监控 安全
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
39 0
|
8天前
|
监控 数据可视化 安全
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
73 0
|
1天前
|
消息中间件 监控 API
构建高效微服务架构是后端开发的关键
【5月更文挑战第22天】构建高效微服务架构是后端开发的关键,涉及核心原则如服务独立、去中心化、自治和轻量级通信。优势包括可扩展性、独立性、技术灵活性和团队协作。最佳实践包括恰当的服务拆分、选择RESTful API、RPC或消息队列进行通信、处理数据一致性和分布式事务、实施服务治理与监控,以及确保安全性与权限控制。随着技术进步,未来将探索服务网格、容器化和云原生技术,以提升微服务架构的效能和适应性。
9 0
|
2天前
|
消息中间件 安全 数据管理
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第21天】 在现代软件开发的浪潮中,微服务架构已经成为一种流行且有效的解决方案。它通过将复杂的应用拆分成一组小服务来增强系统的可维护性、扩展性和技术多样性。本文深入探讨了构建高效微服务架构的关键要素,包括服务划分原则、通信机制、数据管理以及安全性考量。通过对这些核心组件的分析,我们将揭示如何优化后端开发流程,以适应快速变化的市场需求和技术演进。
|
2天前
|
消息中间件 设计模式 开发者
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第21天】 在快速迭代的软件开发领域,微服务架构已经成为支持复杂应用和持续交付的关键设计模式。本文将深入探索微服务的核心原则、技术栈选择以及它们如何影响现代后端开发流程。通过分析微服务的设计理念和最佳实践,我们将了解如何构建一个既灵活又高效的系统,以应对不断变化的业务需求和技术挑战。