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

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文章内容将从三个方面的内容进行讲解,微服务平滑迁移上云服务。 1、明白微服务上云给企业带来的价值 2、了解微服务迁移过程中带来的挑战 3、掌握通过MSE提供的迁移方案平滑上云

作者:草谷


背景


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


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


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


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


微服务迁移上云背景


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


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


1.png


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


  • 微服务组件复杂度高,维护难
  • 网关和注册配置中心是微服务架构中核心的组件,要保证高性能,高可用稳定的设计,必然导致组件的复杂度提升,同时部署结构要保证多级容灾,这也加大了整体的维护难度。  
  • 自建组件无专业运维,线上稳定性无法保障
  • 线上出现问题时,需要能够熟悉组件设计的专业运维同学参与排查,否则难以快速找到问题,导致故障恢复时间延长。
  • 开源自建组件功能缺失,问题反馈周期长,无法满足企业需求
  • 采用开源的组件,出现问题,往往缺少专职维护跟进,凭借社区的志愿者热情,一些紧急问题很难得到及时反馈。
  • 互联网的流量难以预知,无法准确做容量评估
  • 自建组件在面临极端流量时,如果准备大量机器应对,峰值过后又是一笔浪费,无法做到资源的高效利用。


MSE提供一站式微服务平台


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


2.png


  • 托管易用免运维
  • 提供白屏化监控告警、容灾、宕机重启、扩缩容等能力,减少运维成本,有技术兜底,让客户专注于业务开发本身。
  • 高性能高可用
  • MSE 基于开源在性能和稳定性上做了大量优化,大规模服务数据下 SLA 99.95%。
  • 安全防护
  • 网关支持多种服务来源,丰富的路由策略和认证鉴权方式,可对不同架构、多个业务域的服务调用进行统一的配置、管理和保护。
  • 无厂商绑定
  • 100%兼容开源,代码无需更改,实例无需停机即可平滑迁移。


企业上云案例


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


  • 互联网金融-上海费芮
     

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


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


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


3.png


  • 零售行业-斯凯奇


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


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


4.png


迁移上云常见问题


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


  • 云上云下数据不一致
  • 自建网关里面有大量的路由配置,微服务里面注册中心和配置中心里面存储着大量的地址信息和配置信息,这些都是微服务运行时必不可少的,这些数据在云上都是没有的。
  • 迁移操作过程复杂,如何切流才能业务不中断
  • 迁移过程必然存在云上云下组件同时工作的情况,流量如何无损的从云下切到云上呢,如果出现问题是否能够快速回切止损呢。
  • 微服务组件兼容问题,客户端需要改动
  • 云下和云上是否存在兼容问题,MSE 能否兼容自建 Eureka,客户端是否需要做代码层面的改动等。


5.png


MSE 平滑迁移方案


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


注册配置中心平滑迁移


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


  • 支持双向实时同步
  • 同一个服务可以从云下同步到云上,也能从云上同步到云下,支持两边同时操作一个服务不出现冲突。
  • 部署操作简单,一键生成同步配置
  • MSE Sync 的同步配置,通过控制台上云迁移功能一键生成,默认同步全量服务,无需额外编辑配置。
  • 支持客户端灰度切换,不中断业务
  • Provider 和 Consumer 无需按序切换,无需全量同时切换,可任意节点灰度切换,进而保持业务的连续性。
  • 支持多种异构/同类型注册配置中心迁移
  • 支持 Eureka/Nacos/ZooKeeper 常用注册配置中心迁移到 MSE,兼容原生客户端无需修改 API。


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


6.png

云原生网关 MSE Ingress 平滑迁移


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


  • 支持自动监听路由配置
  • 在网关实例创建成功后会监听目标 K8s 集群的Ingress 资源,自动完成 Nginx Ingress Annotation 的转换
  • 支持权重切流,可灰度可回滚
  • 在 MSE 云原生网关控制台中逐步增大权重值直至 100 即可完成最终的切流
  • 应用侧无需做任何修改
  • 迁移过程应用侧无需做代码层面修改即可完成配置和流量的迁移
  • 迁移阶段总览


7.png


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


  • 迁移分解
     

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


8.png


MSE Sync 上云迁移实践


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


9.png


操作步骤


步骤 1 : 规格评估


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


10.png


步骤 2 : 下载启动 MSE Sync


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


11.png


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


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


12.png


点击下一步,会自动生成一份 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,提供了两种导入方式:


13.png


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


步骤 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 专业版,更具性价比,可直接从基础版一键平滑升级到专业版!


14.png


点击此处,即刻查看~

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
3月前
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
162 0
|
25天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
44 5
|
25天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
27天前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
60 2
|
2月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
3月前
|
JSON 测试技术 API
探索微服务架构下的API设计最佳实践
微服务架构的普及带来了开发灵活、可扩展的系统的新机遇,但同时也对API设计提出了更高的要求。有效的API设计不仅影响系统的可维护性和可扩展性,还直接影响开发效率和用户体验。本文将深入探讨在微服务架构下如何设计高效、可靠的API,重点介绍RESTful API设计原则、版本控制策略、身份认证机制及错误处理最佳实践,并结合实际案例提供具体的实现建议。
|
4月前
|
Kubernetes 负载均衡 API
构建高效后端服务:微服务架构的最佳实践
【7月更文挑战第30天】在现代软件开发中,微服务架构已成为设计可扩展、灵活和容错后端系统的首选方法。本文深入探讨了微服务架构的核心概念、设计原则以及实施过程中的关键技术选择。通过分析实际案例,我们揭示了成功部署微服务的最佳实践,包括服务划分、通信协议、数据一致性保障等关键方面,旨在为开发者提供一套实用的指南,以构建和维护高性能的后端服务。
53 4
|
3月前
|
存储 缓存 NoSQL
微服务缓存原理与最佳实践
微服务缓存原理与最佳实践
|
3月前
|
人工智能 Kubernetes 持续交付
Kubernetes环境下基于微服务架构的容器化AI应用部署与管理最佳实践
【8月更文第19天】随着AI技术的快速发展,越来越多的企业开始将AI应用部署到生产环境。然而,AI应用往往包含大量的组件和服务,这使得其部署和管理变得非常复杂。微服务架构和容器化技术(如Docker)结合Kubernetes集群管理,为解决这些问题提供了强大的工具。本文将介绍如何在Kubernetes环境中部署和管理基于微服务架构的容器化AI应用。
183 0
下一篇
无影云桌面