万博智云基于阿里云原生构建迁移即服务

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 自2016年开发迁移工具主要面向私有云环境,但是随着公有云用户越来越多,我们迫切的希望以一种SaaS形态提供给所有有公有云迁移的客户使用。快速的将工具平台化、并且具有扩展性、可靠性是我们在转型过程中深入思考的问题。同时,如何在不增加人力的情况下,完成平台的运维变得尤为重要。所以使用云原生服务方式去构建我们的平台是唯一的捷径。

业务痛点

自2016年开发迁移工具主要面向私有云环境,但是随着公有云用户越来越多,我们迫切的希望以一种SaaS形态提供给所有有公有云迁移的客户使用。快速的将工具平台化、并且具有扩展性、可靠性是我们在转型过程中深入思考的问题。同时,如何在不增加人力的情况下,完成平台的运维变得尤为重要。所以使用云原生服务方式去构建我们的平台是唯一的捷径。
传统行业用户从传统环境过渡到云平台时,上云往往是第一步要做的。但是大部分客户是想迁移而不敢迁移,究其原因就是担心迁移过程对业务系统的影响,迁移人员对原架构和云平台的技术能力,迁移周期管控,迁移成本,以及迁移后业务系统的稳定性。
用户在迁移过程中最关心的问题是:业务连续性如何保障?怎么可以自动智能适配不同平台的驱动?怎么减少人员干预带来的风险?怎么控制迁移周期和成本?怎么可以批量高效迁移?失败是否可以回退?

解决方案

解决方案逻辑图

image.png
image.png

方案细节:

上云需求的产生——从工具到SaaS

从2016年开始,我们团队开发了针对私有云整机迁移的工具HyperMotion,这款工具基于云原生API接口开发,实现高度自动化的迁移。随着时间的发展,越来越多的企业选择将一部分负载运行在公有云上,混合云的形态越来越多。公有云迁移的需求也随之增多。所以,我们在2019年初增加了对阿里云迁移的支持。不同于私有云的迁移,如何让我们的客户更快的进入迁移流程,不把时间花在介质下载和安装的步骤呢?SaaS化是解决这个问题的最佳选择。

云迁移的痛点

2016年开始,在建设金融行业私有云建设过程中,我们发现迁移是私有云建设中非常强烈的刚需。同时,对后续云平台扩容起着至关重要的作用。但是用户在上云时却谨小慎微,总结其原因主要有以下几个方面:

如何保障业务在上云过程和上云运行的稳定性

在任何行业中,稳定、可靠是当仁不让的第一原则,对于关乎民生的金融行业更是如此。所以在实际云平台建设过程中,原有业务系统上云时往往受到的阻力最大。究其原因就是在上云过程中没有一套完整的、科学的方法论及工具让用户打消对上云的顾虑。

业务连续性

在上云过程中,如何保障业务系统连续性是用户尤为关注的一点,任何客户都希望在迁移过程中全程无感知,业务中断为0。但是在实际从云下到云上迁移过程中,是一个极其复杂的建设过程中,如果没有强有力的工具支撑,很难做到这一点。

如何选择上云方式

用户在上云方式上面临多种选择,常见的七种策略:重新托管(Rehosting), 更换平台(Replatforming), 重新购买(Repurchasing), 重构(Refactoring/Re-architecting), 退役(Retire), 保留(Retian)。那么对于传统行业客户最简单、高效的就是Reshot方式。传统客户由于历史原因,积累下大量的业务系统,这些老旧的业务系统只能勉强维持运行,可能由于开发厂商的消失,根本谈不到重新部署、升级和新功能开发。所以在实际迁移时,对应用本身依赖程度越低越好。所以在众多迁移方式中,Rehost成为快速上云的不二选择。Rehost方式通常是从操作系统底层即块级别实施整体搬迁,对应用影响最小。同时,用户在快速上云后,可以逐步改造自己的业务系统,逐步将应用过渡到云原生方式。

迁移可验证,失败可回退

为了保障迁移后的稳定性,在正式将业务切换到云平台前,需要进行必要的验证工作。验证过程中,不能影响原有业务的运行状态。如果迁移失败,需要快速的将系统回滚至原有系统。

如何减少人员依赖和人为干预的风险

迁移涉及业务系统、涉及原架构、目标云架构的技术特性,因此对人员技术能力要求较高;然而过多人为干预又会导致诸如业务影响、周期控制、成本居高的问题。因此,将迁移过程工具化,将技术逻辑抽象处理并融合到操作流程中,以此降低人员技术能力要求,通过迁移工具底层运行最大化自动化迁移过程。

如何基于云原生资源进行云迁移

在开发之初,我们坚持使用云原生的方式构建我们整个迁移流程。我们对云原生使用方式包括:云原生的API和云原生资源。

使用云原生API,能够大幅度简化繁琐的迁移流程,减少用户操作,降低出现错误的概率。并且通过对迁移流程的抽象,使迁移软件能够支持多云平台。在对接一朵新的云平台时,开发周期仅为2周。

使用云原生的资源,能够减少在迁移过程中资源转换的时间损耗。在迁移过程中,将数据直接存储在云平台块存储上,之后能够快速的将存储转换为云主机,达成迁移中验证和切换的需求。

下面以迁移中最常见的两个流程:数据同步和启动主机来说明对云原生资源的使用方式。

数据同步

为了实现Rehost的效果,需要使用块级别的差量同步技术来满足整机迁移的效果。如图所示,我们分别在10点和12点进行了同步,10点同步时为第一次同步数据,所以我们会同步磁盘中的所有有效块。在阿里云侧,我们利用阿里云EBS作为接收端,创建一个与源端同样大小的云硬盘,将该EBS挂载到云代理同步的ECS上后,将数据直接写入该EBS设备上。在10点完成后,这块EBS设备的状态与源端数据状态一致。在同步完成后,迁移平台会调用EBS快照接口,进行快照,保留当时状态。后续我们可以使用该时间点对迁移后的系统进行验证。

在12点同步时,通过对10点到12点变化块序列的记录,同步逻辑发现系统删除了两个块,并新增了一个块。同步程序在接收端的EBS上也执行删除两个快,并复制一个块的动作,此时磁盘的状态又和源端磁盘保持了一致。完成后再次执行EBS快照操作。此时用户可以使用10点和12点的快照进行迁移验证操作。
image.png

启动主机

启动主机的过程其实就是由云平台的块存储转换为云主机的过程。由于阿里云目前并不支持直接用云硬盘直接作为系统盘启动,所以在阿里云处理上,我们采用了其他策略。整个流程如下:
第一步:根据用户选择的快照时间点进行主机启动。
第二步:通过驱动修复主机镜像和用户选择时间点的快照,重组成用于驱动修复的镜像。
第三步:使用该镜像模板启动主机后,进行驱动修复。驱动修复主要是解决源端环境和目标环境的驱动差异、符合目标平台管制需求。例如:在KVM平台上需要使用virtio驱动,在云平台上使用DHCP方式获取IP地址。
第四步:对修复好的磁盘再次进行快照,重组用于启动的迁移主机镜像。
第五步:进行主机启动,完成迁移验证或启动流程。用户可以登录修复后的主机,进行验证。此时,源端主机仍然处于运行状态。
image.png

从工具到平台

image.png

在工具阶段,我们为用户提供产品时往往以私有化方式部署为主。用户通过镜像方式下载安装介质到本地环境进行安装。我们提供的介质大小在3.6G左右,由于目前很多网盘都有速度限制,所以用户往往下载好需要几个小时。平台化后,用户无须再在将时间花在下载介质的时间上,而可以快速的进入整个迁移流程。
在单机版本软件上,往往都是一个用户进行操作,并无太多的并发压力。到了SaaS版本,首先需要实现多租户模式,意味着软件需要承受更多的并发压力,这就要求平台具备高度扩展能力,满足用户量激增的压力。

原有单机版本并发迁移时,需要用户手动对云代理节点进行扩容,在SaaS版本里为了更好的用户体验,云代理节点也应当具备弹性扩展能力。
研发团队需要用最短的时间将单机版本改造为线上SaaS版本。由于人力资源的限制,实施团队需要兼顾私有项目和线上运维,这就要求平台稳定、高可靠、易运维。所以对云原生的应用就变得尤为关键。
image.png

在由工具向平台改造过程中,必须要解决以下几个问题:

应用本身改造

为了支持多租户的需要,我们增加了单独的用户管理模块,来满足多租户的需要;同时为了满足线上运营的需求,还针对性的开发了运营模块来支撑不同角色用户的操作需求。在原有单机版本中由于客户在实施过程中基本都是本地局域网,所以源端和控制端通讯时不受制约,但是SaaS平台上线后。为了降低用户网络配置成本,需要将源端和控制端的通讯变为单向。即源端可以访问控制端,无须控制端直接与源端连接。

平台部署和运维

在阿里云服务选择上,我们尽量选择云原生的服务来满足我们的需求,通过价格比对,寻找适合我们的方案。
使用云原生服务另外的一个好处就是服务之间的关联性,几乎不需要复杂配置就可以完成,例如:监控、日志等运维支持服务。
平台上线初期采用按量计费的方式,寻找到规律后,再转为包年包月或改为资源包购买方式。
我们的所有服务都是以容器化方式进行部署,所以在选择Kubernetes托管服务商,我们对比了自建、专有版本、托管版本和Serverless版本的价格。最初为了节约成本,我们选择了Serverless版本,Serverless版本使用按量计费的方式,是集中模式下性价比最高的,但是随着平台上线后,我们在使用云原生监控时发现Serverless版并不支持插件的安装,导致监控和告警服务无法使用。最终,基于成本的考虑,我们选择了托管版本,能够满足我们的需求。
image.png

CI流程的改造

在之前的CI流程,我们只需要提供镜像文件(QCOW2)和ISO文件。在SaaS平台上线后,我们的流程出现了很大的变化。一方面我们搭建了三套环境:本地的Kubernetes、阿里云上的QA和生产环境。本地环境采用及时更新的策略,研发代码Review入库后,立即会更新到研发环境中。而QA和线上环境采用手动部署方式,从特定的代码分支进行部署。在镜像仓库选择上,线下环境使用Harbor,而线上环境直接使用阿里云的镜像仓库服务。CI控制采用Jenkins触发方式,所有脚本都使用代码仓库进行统一管理。
image.png

上云价值

得益于云原生的使用,我们从7月份提出需求,9月份在阿里云上线内部测试版本,到今年春节之后正式邀请客户进行使用,并且今年春节后推出了“零接触”云迁移免费3个月时间。能在这么短的时间内,将一款单机版本的软件具有多用户并发支持能力的SaaS平台,云原生提供的支持功不可没。

在没有增加人力的情况下,运维压力并没有过多增加,云原生的方式提供天然的容灾、备份服务,使得运维人员很轻松的简单配置就可以实现传统运维需要大量安装和配置的效果。
利于成本控制,具有高度可扩展性。由于迁移本身是具有一定专业性的产品,用户以企业用户为主。所以客户增长的速度可能不会像C端增长明显,所以采用按量计费的方式可以更精细化的控制成本。同时,基于云的扩展性,用户量一旦激增后,也可以轻松应对。
函数计算服务的使用,简化了开发成本,运维成本直接降为零。目前将License服务使用函数计算提供,如果使用传统方式构建,我们至少需要http服务端、定义接口等开发,再加上部署上打包成容器、部署等操作,成本很高。但是如果使用阿里的函数计算服务,天然支持http trigger方式,我们只需要在函数中定义接口,发布一下马上就可以使用了。并且函数计算拥有详细的监控,调用统计等信息一目了然,通过日志服务收集日志信息,可以用于后续的分析。

选用的产品

image.png

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
11天前
|
Cloud Native 持续交付 开发者
探索云原生技术:构建高效、灵活的应用架构
【10月更文挑战第6天】 在当今数字化浪潮中,企业面临着日益复杂的业务需求和快速变化的市场环境。为了保持竞争力,他们需要构建高效、灵活且可扩展的应用程序架构。本文将探讨云原生技术如何帮助企业实现这一目标,并分析其核心概念与优势。通过深入剖析云原生技术的各个方面,我们将揭示其在现代应用开发和部署中的重要性,并提供一些实用的建议和最佳实践。
39 2
|
18天前
|
Cloud Native 物联网 持续交付
云原生架构:构建现代应用的基石
随着数字化转型的深入,企业对软件开发的速度和灵活性提出了更高的要求。云原生架构作为一种新兴的技术范式,以其独特的优势,正在成为现代应用开发的主流选择。本文将探讨云原生架构的核心概念、关键技术以及实践应用,帮助读者理解如何利用云原生技术构建高效、可扩展的现代应用。
48 1
|
27天前
|
运维 Cloud Native 持续交付
云原生技术:构建未来应用的基石
在当今这个数字化时代,云原生技术正迅速成为推动企业创新和数字化转型的关键力量。本文将深入探讨云原生的核心概念、主要特点以及它如何改变我们构建、部署和运行应用程序的方式。通过分析Kubernetes、微服务、容器化等关键技术,本文旨在为读者提供一个关于云原生技术的全面理解,并探讨其在未来软件开发领域的重要性。
29 2
|
9天前
|
运维 监控 Cloud Native
构建行业应用生态:云原生应用市场简化企业软件安装
在移动互联网时代,尽管手机应用市场为用户带来了极大的便利,但企业级软件的安装和管理仍面临诸多挑战,包括安装复杂、交付效率低、应用兼容性差等问题。为此,基于云原生技术的企业级应用市场Rainstore应运而生,旨在简化企业软件的安装和管理,提升交付效率,增强应用兼容性,支持远程管理和个性化定制,构建开放的行业应用生态,助力企业数字化转型。
构建行业应用生态:云原生应用市场简化企业软件安装
|
8天前
|
运维 Cloud Native 持续交付
云原生技术:构建现代应用的基石
【10月更文挑战第9天】在数字化转型的浪潮中,云原生技术如同一股清流,引领着企业走向更加灵活、高效的未来。本文将深入探讨云原生的核心概念,揭示其在现代应用开发与部署中的重要作用,并通过实际案例分析,展现云原生技术如何助力企业实现敏捷开发和自动化运维,最终提升业务竞争力。
26 3
|
8天前
|
运维 Kubernetes Cloud Native
云原生技术:构建现代应用的新范式
【10月更文挑战第9天】 云原生是一种通过云计算环境优化的软件开发和运行方法论,旨在最大化利用云平台的灵活性、可扩展性和弹性。本文将深入探讨云原生技术的基本原理、核心组件以及其在实际项目中的应用。我们将从Kubernetes的容器编排机制入手,逐步探讨如何通过自动化工具实现持续集成与持续部署(CI/CD),最终展示如何构建一个高效、可靠的云原生应用。
25 2
|
13天前
|
Cloud Native Devops 持续交付
云原生技术:构建现代应用的新范式
【10月更文挑战第4天】 在当今数字化时代,云原生技术正迅速成为构建现代应用的主流方法。它不仅改变了开发和部署的方式,还为企业带来了前所未有的灵活性和效率。本文将深入探讨云原生的核心概念、关键技术以及其在实际应用中的优势,揭示这一技术变革背后的本质与内涵。
39 6
|
13天前
|
运维 Kubernetes Cloud Native
探索云原生架构:构建现代应用的新范式
【10月更文挑战第4天】 在当今数字化时代,企业面临着前所未有的挑战与机遇。随着云计算技术的不断成熟,一种新的计算范式——云原生,正逐渐崭露头角,并成为构建现代应用的首选方式。本文将深入探讨云原生的概念、核心原则以及它如何改变我们设计、部署和运行应用程序的方式。我们将从实际案例出发,分析云原生技术如何帮助企业实现更高的敏捷性、弹性和可扩展性,同时降低运维成本,提升开发效率。通过阅读本文,您将获得关于云原生架构的全面理解,以及如何利用这一新范式推动业务创新和增长的实用见解。
52 4
|
12天前
|
运维 Kubernetes Cloud Native
探索云原生架构:构建弹性、高效和可扩展的现代应用
【10月更文挑战第5天】 在当今数字化时代,企业必须不断适应快速变化的技术环境。传统的单体应用程序已经无法满足现代业务需求,而云原生架构以其独特的优势,正在成为企业数字化转型的基石。本文将深入探讨云原生架构的核心概念、关键技术和应用实践,旨在帮助读者理解如何利用云原生技术构建弹性、高效和可扩展的现代应用。
58 1
|
13天前
|
Kubernetes Cloud Native 云计算
云原生之旅:构建你的第一个容器化应用
【8月更文挑战第75天】在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键动力。本篇文章将引导你开启云原生之旅,通过一个简易的步骤指南,帮助你构建并部署第一个容器化应用。我们将一起探索Docker容器的魅力,以及如何利用Kubernetes进行集群管理,实现服务的自动化部署、扩展和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供实践操作的启示和深入思考的契机。