从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



相关文章
|
2月前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
307 6
|
1月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
19天前
|
数据采集 运维 监控
微服务监控:守护系统稳定的终极防线
微服务监控在数字化时代日益重要,它帮助运维和开发人员实时监测服务性能、状态和安全,确保微服务架构的稳定性和可用性。构建微服务监控体系需关注合理监控策略、数据采集处理、可视化及告警。数据采集的三大支柱是指标、日志和链路追踪。监控涵盖基础设施、系统、应用和业务层面。通过优化监控体系、融合业务场景和建立跨团队协作,可提升监控效果。未来,AI和云计算将推动微服务监控向更精准、高效和安全的方向发展。
30 0
|
4月前
|
人工智能 监控 安全
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码
35 0
|
4月前
|
监控 数据可视化 安全
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)
68 0
|
4月前
|
人工智能 监控 安全
基于Springcloud微服务框架智慧工地系统源码
智慧工地工程进度流程: 前期临建搭建、基础工程施工、主体结构施工、主体封顶地库平口、主体结构验收、地库安装完成、外立面施工、室外景观工程、内部一户一验、竣工备案、一站式交付。
35 0
|
5月前
|
负载均衡 监控 关系型数据库
微服务轮子项目(09) - 系统幂等性设计
微服务轮子项目(09) - 系统幂等性设计
40 0
|
5天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
17天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。