微服务平滑迁移上云最佳实践

news2025/1/17 21:36:48

作者:草谷

背景

许多企业在做微服务架构改造的时候,在自建还是上云的选择上难以决策,选择上云后,在微服务上云过程中,如何能够做到不影响业务情况下平滑迁移呢,通过阅读本文,你可以快速获得以下知识点和能力:

  1. 了解微服务上云给企业带来的价值

  2. 了解微服务迁移过程中带来的挑战

  3. 掌握通过 MSE 提供的迁移方案平滑上云

微服务迁移上云背景

自建微服务平台面临的问题

在早期的时候,由于平台型 PaaS 设施服务还不够完善,有不少企业的微服务平台是自建的,我们今天一起看下,这些企业在运维自建微服务组建过程中,遇到哪些比较典型的问题:

在这里插入图片描述

这张图是一个典型的微服务架构,主要包含接入层和微服务中心两块,终端的 HTTP 请求进入到接入层,这层采用一定的分配算法将网络请求分发到后端的多个服务器,后端的服务器组成了一个微服务中心,里面部署着大量业务机器和注册配置中心等微服务组件,这些组件基本采用的都是开源组件:

  • 微服务组件复杂度高,维护难

  • 网关和注册配置中心是微服务架构中核心的组件,要保证高性能,高可用稳定的设计,必然导致组件的复杂度提升,同时部署结构要保证多级容灾,这也加大了整体的维护难度。

  • 自建组件无专业运维,线上稳定性无法保障

  • 线上出现问题时,需要能够熟悉组件设计的专业运维同学参与排查,否则难以快速找到问题,导致故障恢复时间延长。

  • 开源自建组件功能缺失,问题反馈周期长,无法满足企业需求

  • 采用开源的组件,出现问题,往往缺少专职维护跟进,凭借社区的志愿者热情,一些紧急问题很难得到及时反馈。

  • 互联网的流量难以预知,无法准确做容量评估

  • 自建组件在面临极端流量时,如果准备大量机器应对,峰值过后又是一笔浪费,无法做到资源的高效利用。

MSE提供一站式微服务平台

针对上面这些问题,MSE 提供了一站式的微服务平台,集成了微服务里面常用核心的组件,统一构建运维:

在这里插入图片描述

  • 托管易用免运维

  • 提供白屏化监控告警、容灾、宕机重启、扩缩容等能力,减少运维成本,有技术兜底,让客户专注于业务开发本身。

  • 高性能高可用

  • MSE 基于开源在性能和稳定性上做了大量优化,大规模服务数据下 SLA 99.95%。

  • 安全防护

  • 网关支持多种服务来源,丰富的路由策略和认证鉴权方式,可对不同架构、多个业务域的服务调用进行统一的配置、管理和保护。

  • 无厂商绑定

  • 100%兼容开源,代码无需更改,实例无需停机即可平滑迁移。

企业上云案例

MSE 服务了大量的微服务架构企业,这里给大家介绍两个典型的标杆客户,他们通过 MSE 解决了一些在它们领域里面遇到的微服务问题,大家可以看看是否有值得借鉴的地方。

  • 互联网金融-上海费芮

上海费芮是一家提供专业互联网金融服务的企业,提供专业的在使用 MSE 之前,他们是自己部署的 Nginx Ingress 作为流量网关的,面临以下问题:

  • 网关运维能力不足,缺乏专业的网关运维人员
  • 原生的 Ningx Ingress 部署在用户集群里面,稳定性和安全容易受业务影响
  • 原生的 Ningx Ingress 的功能有限,例如缺少 TLS 版本设置,IP 黑名单等

在迁移到 MSE 云原生网关后,这些问题都得到了解决,在整个迁移过程中,改动成本也非常低,MSE 云原生网关完全兼容 Nginx Ingress 注解,无需二次编辑路由规则,MSE 提供了网关的全托管服务,将网关与业务集群分离,大幅度提高了稳定性,安全性。

在这里插入图片描述

  • 零售行业-斯凯奇

斯凯奇是零售行业里非常有名的鞋类品牌,它的架构就是典型的微服务架构,接入层已经迁入了 MSE 云原生网关,微服务中心采用的是 Dubbo+MSE Nacos,配置中心采用的也是 MSE Nacos。

MSE 给斯凯奇提供了统一的微服务路由、流控、安全管理,丰富的可观测等能力,方便内外部多系统间的集成,极大提高了中台服务的开发效率,并降低运维成本,顺利应对双 11 流量洪峰,支撑斯凯奇双 11 业绩超 12 亿的交易系统。

在这里插入图片描述

迁移上云常见问题

MSE 支持了许多企业把微服务平台迁移上云,在这个过程中,遇到了不少的问题,主要分为以下几点:

  • 云上云下数据不一致

  • 自建网关里面有大量的路由配置,微服务里面注册中心和配置中心里面存储着大量的地址信息和配置信息,这些都是微服务运行时必不可少的,这些数据在云上都是没有的。

  • 迁移操作过程复杂,如何切流才能业务不中断

  • 迁移过程必然存在云上云下组件同时工作的情况,流量如何无损的从云下切到云上呢,如果出现问题是否能够快速回切止损呢。

  • 微服务组件兼容问题,客户端需要改动

  • 云下和云上是否存在兼容问题,MSE 能否兼容自建 Eureka,客户端是否需要做代码层面的改动等。

在这里插入图片描述

MSE 平滑迁移方案

针对迁移过程中遇到的常见问题,MSE 提供了一套迁移工具:MSE Sync,并给出了完整的迁移方案,主要包括注册配置中心及网关的迁移。在实践操作过程中,一般会先从注册配置中心进行迁移,然后再做接入层的迁移,接下来,给大家介绍下每个模块的具体迁移方案。

注册配置中心平滑迁移

MSE Sync 可以平滑的把云下的注册配置中心迁移到云上,它主要提供了以下的能力:

  • 支持双向实时同步

  • 同一个服务可以从云下同步到云上,也能从云上同步到云下,支持两边同时操作一个服务不出现冲突。

  • 部署操作简单,一键生成同步配置

  • MSE Sync 的同步配置,通过控制台上云迁移功能一键生成,默认同步全量服务,无需额外编辑配置。

  • 支持客户端灰度切换,不中断业务

  • Provider 和 Consumer 无需按序切换,无需全量同时切换,可任意节点灰度切换,进而保持业务的连续性。

  • 支持多种异构/同类型注册配置中心迁移

  • 支持 Eureka/Nacos/ZooKeeper 常用注册配置中心迁移到 MSE,兼容原生客户端无需修改 API。

MSE Sync 的同步原理,是通过模拟客户端对需要同步的数据进行实时监听,当数据发生变化之后,把对应的数据发布到目标集群中,同时也解决了环同步的问题,支持双向同步。通过 MSE Sync 将云上云下集群数据保持同步,从而实现了客户端可以任意切换迁移的目的,对于业务来讲,就当作一次正常的发布即可。

在这里插入图片描述

云原生网关 MSE Ingress 平滑迁移

从 Nginx Ingress 迁移到 MSE 云原生网关的过程中,为帮助用户了解各迁移阶段,我们梳理了各个阶段的简要说明,且考虑到在用户迁移后能仍然能够复用已有的 SLB,降低迁移成本,MSE 云原生网关也提供了“SLB 迁移”功能,让用户能够方便的将流量分进程迁移到 MSE 云原生网关。

  • 支持自动监听路由配置

  • 在网关实例创建成功后会监听目标 K8s 集群的Ingress 资源,自动完成 Nginx Ingress Annotation 的转换

  • 支持权重切流,可灰度可回滚

  • 在 MSE 云原生网关控制台中逐步增大权重值直至 100 即可完成最终的切流

  • 应用侧无需做任何修改

  • 迁移过程应用侧无需做代码层面修改即可完成配置和流量的迁移

  • 迁移阶段总览

在这里插入图片描述

从上图中可以看到,虽然迁移分成了 5 个阶段,但真正在“迁移”阶段,用户只需要执行一步操作即可完成 Nginx Ingress 配置到 MSE 云原生网关的迁移,非常简便快捷

  • 迁移分解

从 Nginx Ingress 迁移到 MSE 云原生网关的具体流程图如下:

在这里插入图片描述

MSE Sync 上云迁移实践

我们通过一个具体的迁移案例,让大家更有体感的感受整个迁移过程,案例的场景是 Dubbo+ZooKeeper 部署的一个微服务应用,连的是自建 ZooKeeper,通过 MSE Sync 进行服务数据的迁移,最终把 Provider/Consumer 切换连到 MSE Zookeeper,整个迁移期间保持服务不中断。

在这里插入图片描述

操作步骤

步骤 1 : 规格评估

迁移之前,需要先购买 MSE ZooKeeper,MSE提供了规格评估的功能,通过输入节点数或者自建配置,MSE 会生成一个建议的配置给到你。

在这里插入图片描述

步骤 2 : 下载启动 MSE Sync

MSE Sync 支持 2 种部署模式,一种是通过容器部署,一种是通过 tar 包部署,并制作了详细的 Step By Step 的操作流程,点击“迁移配置”,你可以跟着上面的步骤进行操作。

在这里插入图片描述

步骤 3 : 生成一份 Sync 迁移配置

部署完了 MSE Sync 后,需要生成一份 Sync 配置,主要作用是告诉 MSE Sync 要同步的源和目标集群,目标集群需要提前购买好,在创建配置的步骤里面,可以自动下拉选择。这里需要注意一点,就是 MSE Sync 部署的机器,网络需要能同时与源/目标集群连通。

在这里插入图片描述

点击下一步,会自动生成一份 YAML 格式的配置,默认配置会同步所有的 Dubbo/Spring Cloud 服务,并且是双向同步的:

clusters:
  - clusterName: mse-cn-7pp2wvnwl01
    connectKeyList:
      - mse-xxxxx-p.zk.mse.aliyuncs.com:2181
    clusterType: ZK
  - clusterName: zk_source
    connectKeyList:
      - 127.0.0.1:2181
    clusterType: ZK
    namespace: ''
tasks:
  - source: zk_source
    destination: mse-cn-7pp2wvnwl01

步骤 4 : 导入 Sync 迁移配置完成同步

将上一步的配置, 导入到 MSE Sync,提供了两种导入方式:

在这里插入图片描述

按照你的喜好选择,导入配置是动态生效的,也就是,执行完导入之后,立刻会进行数据的同步,无需重启进程。

步骤 5 : 修改 Endpoint 重启完成迁移

最后一步,数据同步完了之后,修改 Consumer/Provider 的 Endpoint,把自建的 ZooKeeper 地址,改成 MSE ZooKeeper 地址,重启客户端即可完成迁移,重启的顺序和数量没有要求,当作一次正常的配置修改发布即可。

以上案例的操作大概 10 分钟即可完成,非常的便捷快速,有兴趣的同学可以跟着操作一下,如果有一些定制的迁移需求,例如需要单向同步,同步非 Dubbo/Spring Cloud 服务等,MSE Sync 提供了一些常用的参数进行配置,详细可见 MSE 的官方文档:

《MSE Sync 简介和部署》

https://help.aliyun.com/document_detail/454740.html

MSE 专业版重磅推出!

MSE 专业版,更具性价比,可直接从基础版一键平滑升级到专业版!

在这里插入图片描述

点击此处,即刻查看~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树之基本概念(有图头真相)

文章目录树的概念及结构1.树的概念2.树的相关概念3.树的表示4.树在实际中的应用树的概念及结构 1.树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#…

高项 干系人管理论文

4个过程: 1,识别干系人:识别能影响项目决策、活动或结果的个人、群体或组织,以及被项目、活动或者结果影响的个人、群体或者组织,并分析和记录他们的相关信息的过程。这些信息包括他们的利益、参与度、互相依赖、影响…

PDF怎么编辑文字?教你两招非常实用的方法

怎么在PDF文件上直接编辑文字呢?相信这是大家在刚接触PDF文件不久时发出的疑问。在发现文件中有需要改正的地方,想要编辑时发现编辑不了,出现这种情况时应该怎么办呢?今天教大家两种非常简单实用的方法,有需要的小伙伴…

《元宇宙工程》南京首发 落地实用是关键

2022年11月20日上午,由江苏省人工智能学会、南京信息工程大学人工智能学院(未来技术学院)、中国移动通信联合会元宇宙产业工作委员会联合主办,由南京信息工程大学元宇宙研究院、江苏省人工智能学会元宇宙专委会(筹&…

PMP考前最后2天思路整理

1 问题解决的思路,先分析,再行动。要直接、要直面。要有担当,要有作为,敢负责任。 2 风险管理里面的三个文件一定要分清楚:风险管理计划、风险登记册和风险报告。风险应对的五种方法每个是什么。各自在书里面举的例子…

NAND闪存改变了现代生活

1989年 我出生了, 额,扯远了。 1989年NAND闪存面世了,它曾经且正在改变了我们的日常生活。 NAND 闪存发明之所以伟大,是因为,有了这项颠覆性的发明,才有了我们现如今用的智能手机的高速大容量内存(eMMC、UF…

react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题

文章目录react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题需求问题问题根源部分代码参考react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题 需求 项目中使…

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm足球赛会管理系统》 该项目分为2个角色,管理员、用户。 用户可以浏览前台,包含功能有: 首页、球队介绍、球星介绍、线下足球、赛论坛信…

Revit中项目的正负零零,尺寸标注,标注生成问题

一、 Revit中如何改变项目的正负零零 有时候,在一个项目中,我们要改变项目的 正负零零,如下图 第一步,打开视图的“可见性/图形”,如图2 第二步,在“可见性/图形替换”中勾选“项目基点”,如图 …

TK爆品剖析 水晶首饰降临节日历持续火爆TikTok,独立站卖到断货

圣诞节是年末促销旺季的关键节点,很多商家都会推出圣诞主题礼物产品,比如圣诞树、圣诞贺卡、圣诞老人等等,但很少会推出降临节日历。 其实,“降临节日历”一直是人们在圣诞节前最喜欢的礼物。谷歌趋势显示,2021年圣诞节…

[Spring Cloud] Ribbon介绍与定义负载均衡

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

QXlsx 使用

QXls使用分两种方式: 1 直接加载pri文件,就可以使用;2 编译后作为Qt的模块加载使用; 此文章主要针对第二种使用方式做记录,该方式又分为两种编译器进行说明: 第一种,使用MinGW64位编译器&…

nginx部署web项目(跟着搞不出来,来砍我)

前端打包成dist,详情可以参考我的vue博客 vue速学_我要用代码向我喜欢的女孩表白的博客-CSDN博客 nginx下载地址:nginx1.16.1离线安装包_nginx1.16.1依赖-Web服务器文档类资源-CSDN下载 (如果报错缺少依赖,可以参考我的nginx-rtmp直播流博客…

文献阅读01_基于深度学习的个性化新闻推荐方法研究_20221114

论文信息 Subjects:新闻推荐;长短期用户表示;多视角学习;联合学习; (1)题目:Attention Is All You Need (你需要的就是关注) (2)文章下载地址:https://kreader.cnki.net/Kreader/Ca…

行业安全解决方案|腾讯打造汽车一体化安全防护,助力车企数字化安全

随着汽车智能化的发展,车联网、自动驾驶、车路协同等应用快速落地,汽车作为智能终端所产生的数据成指数级增长态势。然而,当汽车行业数字化转型正如火如荼进行时,新的安全挑战也接踵而至,车企甚至可能因忽视安全建设&a…

(八)centos7案例实战——docker仓库Harbor服务安装部署

前言 Harbor (港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。我们可以使用dockerhub仓库或者阿里云docker仓库等第三方仓库管理我们的docker镜像。对于企业来说,条件允许,可以搭建自己的docker镜…

FEDformer 代码分析(1)

参数设置如下, --seq_len 是 96 --label_len 是 48 --pred_len 是 96 也就是说,输入是96的,预测96. batch_x 是 (1,96,7)的维度的。 batch_x_mark 是(1,96,4)的维度的。 batch_y的维度是…

嵌入式系统开发笔记107:层次化软件设计思想

文章目录前言一、嵌入式系统设计的本质二、基于寄存器结构的程序设计三、嵌入式系统优良程序的评判标准四、计算机上的软件分层五、嵌入式程序的分层设计前言 本文以思维导图的形式介绍层次化软件设计思想。 一、嵌入式系统设计的本质 二、基于寄存器结构的程序设计 三、嵌入式…

Java 内存溢出(一)原因、复现、排查

目录一、内存溢出原因二、内存溢出实例1、堆溢出2.虚拟机栈和本地方法栈溢出3.方法区和运行时常量池溢出4.本机直接内存溢出三、内存溢出排查内存溢出: 是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供…

[附源码]计算机毕业设计JAVA基于新高考模式下的排课系统

[附源码]计算机毕业设计JAVA基于新高考模式下的排课系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: S…