应用迁移与现代化:从传统 IT 到云端的全面指南(上)
在当今数字化时代,将应用程序迁移到云端并进行现代化改造已成为企业提升竞争力的关键举措。本文将深入探讨应用迁移与现代化的相关概念、策略和最佳实践,帮助您更好地理解和实施这一重要过程。
1. 云迁移与现代化概述
将应用程序迁移到云端的开发工作通常被描述为迁移和现代化。迁移是将应用程序移动到云端,而现代化则是对现有应用程序进行修改,使其在云端运行得更好。在深入探讨迁移模式之前,我们先回顾一些有助于理解的背景信息。
2. 云计算服务模型
传统 IT 应用程序和云应用程序的主要区别在于其托管方式。云计算有三种主要的服务模型:
-
基础设施即服务(IaaS)
:提供具有计算、存储和网络容量的物理和虚拟服务器。
-
平台即服务(PaaS)
:提供编排好的应用程序运行时环境。
-
软件即服务(SaaS)
:提供完整的应用程序软件。
| 服务模型 | 管理内容 |
|---|---|
| IaaS | 计算服务器、存储、网络及其虚拟化 |
| PaaS | 在 IaaS 基础上,管理运行时、中间件和操作系统 |
| SaaS | 管理所有服务,提供应用程序及其数据作为软件服务 |
随着服务模型层次的提升,标准化程度增加,开发解决方案的时间减少,但定制环境的机会也相应减少,应用程序必须适应环境。
3. 现代化与技术债务
在开发云端应用程序时,需要考虑是将现有的传统 IT 应用程序迁移到云端,还是专门为云端开发新的应用程序。这一决策取决于现有应用程序是否符合当前用户需求以及其中包含的技术债务。
- 新颖的用户需求 :如果用户需求足够新颖,例如支持企业开展新业务或采用创新方式服务现有客户群,那么开发新应用程序是一个不错的选择。
- 既定的用户需求 :如果用户需求是企业已经熟知的,企业可能已经有至少一个能够满足这些需求的应用程序。此时,决策取决于技术债务的程度:
- 轻微技术债务 :如果现有应用程序易于维护,将其迁移到云端可能相对容易,是迁移的良好候选对象。
- 重大技术债务 :如果现有应用程序难以维护,且与当前用户需求不太匹配,需要进行大量更改才能满足需求,那么可能需要考虑从头开始开发新应用程序或进行大规模的现代化改造。
即使应用程序存在大量技术债务,也有一些技术可以在进行相对较少更改的情况下将其迁移到云端,但这并不能解决技术债务问题,要真正利用云端的优势,可能仍需要对应用程序进行大量重写。
4. 应用程序基础要素
一个应用程序可以在以下三个方面有所不同:
-
平台
:应用程序的托管位置可以是传统 IT 或云端。
-
架构
:应用程序可以采用“大泥球”架构、模块化单体架构或分布式架构。
-
打包
:每个进程可以在裸金属服务器、虚拟服务器或容器中运行。
这些方面相互独立,可以进行任意组合。此外,还可以添加两个可选方面:
-
客户端/服务器
:将用户界面与应用程序的其他部分分离,使用户界面可以在用户的浏览器或移动设备上运行,而应用程序的其他部分则托管在远程服务器或云端。
-
云原生
:为了使应用程序在云端运行良好,必须采用云原生架构,这种架构也能使应用程序在传统 IT 环境中运行得更好。
下面是应用程序架构的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(应用程序架构):::process --> B(大泥球架构):::process
A --> C(模块化单体架构):::process
A --> D(分布式架构):::process
5. 平台选择
应用程序的托管方式有两种基本选择:
-
传统 IT
:这是指将应用程序安装在计算机上的传统方式。每个企业管理自己的设备,应用程序开发者确切知道应用程序将部署在何种基础设施上,如果基础设施发生重大变化,应用程序也需要相应修改。
-
云
:云计算通过虚拟化计算机设备,将运维团队管理的基础设施与开发团队创建的应用程序分离。云计算促进了云基础设施提供商与为应用程序分配容量的客户之间的供应商/客户关系。
6. 架构类型
应用程序有三种基本架构:
-
大泥球架构
:一种没有明显结构的单体应用程序,任何代码都可以访问其他所有代码和变量。
-
模块化单体架构
:由松散耦合、封装良好的代码模块组成的单体应用程序。
-
分布式架构
:由可以在不同计算机上运行的代码模块组成的应用程序。
前两种架构是单体架构,应用程序作为单个工作负载在单个可执行进程中运行;而分布式架构中,每个模块作为单独的工作负载在单独的进程中运行。这些架构独立于平台,任何架构都可以托管在传统 IT 基础设施或云基础设施上。
7. 应用程序迁移与现代化
应用程序可以通过迁移改变其平台,通过现代化改变其架构。迁移是将应用程序从一个平台迁移到另一个平台,而不改变其架构;现代化是将应用程序从一种架构转换为另一种架构,而不改变其平台。
应用程序的迁移和现代化可以单独进行,也可以同时进行。例如,可以将传统 IT 应用程序迁移到云端,同时保持其架构不变;也可以对传统 IT 或云端的应用程序进行现代化改造,使其架构更加复杂。
8. 应用程序打包
除了改进应用程序的架构,另一种现代化方式是对应用程序进行打包,以更好地封装它,简化部署。应用程序的每个组件可以通过以下三种方式进行打包部署:
-
裸金属服务器
:不进行打包,直接将组件及其运行时安装到计算机的操作系统上。
-
虚拟服务器
:将组件及其运行时和操作系统安装到可以在虚拟机管理程序中运行的虚拟服务器映像中。
-
容器
:将组件及其运行时和操作系统库安装到符合开放容器倡议(OCI)标准的容器映像中,该映像可以在容器引擎中运行。
应用程序的打包方式不会改变其架构,但会决定其运行时的托管方式。以下是应用程序打包的迁移策略:
1.
Lift and Shift
:仅改变应用程序的托管方式,不进行打包现代化。
2.
虚拟化应用程序
:对应用程序进行打包现代化,使其可以在虚拟机管理程序中运行。
3.
容器化应用程序
:对应用程序进行打包现代化,使其可以在容器引擎中运行。
虚拟化应用程序和容器化应用程序是可选的替代方案,它们可以与 Lift and Shift 策略结合使用,以实现应用程序的打包现代化并将其迁移到云端。
下面是应用程序打包现代化的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(应用程序打包):::process --> B(裸金属服务器):::process
A --> C(虚拟服务器):::process
A --> D(容器):::process
B --> E(Lift and Shift):::process
C --> F(虚拟化应用程序):::process
D --> G(容器化应用程序):::process
9. 客户端/服务器架构
如果应用程序集中托管以便于管理和共享,其用户界面需要托管在用户的计算机上。应用程序架构从在单台计算机上运行的单体架构演变为客户端/服务器架构,其中客户端应用程序在用户的计算机上运行,服务器应用程序在远程的集中共享计算机上运行。云架构是客户端/服务器架构的一种特殊形式,其中服务器是云端。
为了使应用程序的架构适应云端,需要将应用程序分为客户端和云端两部分:
-
客户端应用程序
:在用户计算机上运行的用户界面。
-
云应用程序
:在云端运行的共享多用户功能。
这种架构使用户可以通过网络连接(如互联网)远程访问云应用程序,从而使各种类型的用户界面(如网页浏览器、智能手机应用等)都可以访问云应用程序。
10. 云原生架构
应用程序架构从客户端/服务器架构(服务器可能是云端)进一步演变为云原生架构,这种架构使应用程序能够在云端良好运行。云原生架构可以选择性地添加到任何结构架构中,分布式架构通常更容易演变为云原生架构。
为了使应用程序的架构适应云端,需要将其转换为云原生架构,这种架构将两部分的客户端/服务器应用程序分为三部分:
-
客户端应用程序
:在用户设备上运行的部分(与客户端/服务器架构相同)。
-
云应用程序
:在云端运行的针对特定用户功能定制开发的部分。
-
后端服务
:由第三方供应商开发的可被多个应用程序重用的平台服务。
这种架构使开发人员能够专注于开发企业特定领域的功能,使应用程序具有独特性,同时重用平台服务来执行常见任务。分布式架构与云原生架构相结合形成微服务架构,其中每个云原生分布式架构模块都是一个微服务。
应用迁移与现代化:从传统 IT 到云端的全面指南(下)
11. 云迁移策略
开发者常提及云迁移的“Rs”策略,这些策略有助于更好地进行迁移和现代化工作。常见的云迁移 6 种策略如下:
|策略名称|策略描述|
| ---- | ---- |
|Rehosting(重新托管)|也称为“Lift and Shift”,此策略尽可能少地更改应用程序,将其从传统 IT 迁移到云端。这是迁移到云端最快、最简单的方法,虽不能改进应用程序,但在云端托管可能更高效、成本更低,且迁移后可能更便于为应用程序重新架构。|
|Replatforming(重新平台化)|也叫“Lift - tinker - and - shift”,将应用程序原样迁移到云端,并尽可能将部分应用程序重新托管在云平台的托管服务中。例如,将本地裸金属服务器或 VMware VM 上的组件迁移到云的虚拟服务器平台,如 AWS 的 EC2;将本地 Oracle 数据库中的关系数据重新托管到云的关系数据库服务,如 Azure Database for PostgreSQL。应用程序保持当前代码和架构,但可利用云平台的操作和软件许可。|
|Repurchasing(重新购买)|用云端托管的商业软件替换现有应用程序。例如,用 Salesforce、NetSuite 或 Workday 等云端应用程序替换本地的客户关系管理(CRM)、企业资源规划(ERP)或人力资源(HR)自定义应用程序。|
|Refactoring / Re - architecting(重构/重新架构)|修改现有应用程序以使其更具云原生特性。这是使现有应用程序充分利用云端优势最有效的策略,但也是最困难的。若应用程序因特定硬件定制或技术债务过多而难以重构,可能需要从头重建。|
|Retire(退役)|若应用程序虽在运行但无人使用,可直接关闭,无需迁移到云端。|
|Retain(保留)|若应用程序难以迁移到云端,但仍有用且能正常工作,则继续在原地运行。可能是因为应用程序与本地环境绑定过深、多租户公共云存在安全风险、在其他国家的数据中心托管不被允许或技术债务过多难以重构等原因。|
其中,Rehost、Replatform 和 Refactor 三种策略主要聚焦于在云端迁移和现代化应用程序。
12. 云端应用迁移与现代化的考虑因素及模式
在开发云端运行的应用程序时,需要考虑以下方面:
-
应用程序的托管方式
:如何在云端托管应用程序。
-
选择现代化现有应用程序还是开发新应用程序
:需要评估现有应用程序是否符合当前需求、其中的技术债务程度,以及迁移现有应用程序到云端与从头开发新应用程序的工作量对比。
基于此,有以下几种迁移和现代化应用程序的模式:
-
现有应用程序
-
Lift and Shift
:在不进行现代化改造的情况下重新托管应用程序,还可将部分组件重新托管在云的托管服务中。任何架构和打包方式的传统 IT 应用程序都可原样迁移到云端,这是开启云端之旅的好方法,但通常后续也会对应用程序进行现代化改造。
-
Virtualize the Application
:将应用程序及其组件在虚拟机管理程序中重新平台化。部署在裸金属服务器上的任何架构的应用程序,可通过打包使其在一组虚拟服务器(即虚拟机)中运行来实现现代化。在云端,此方法使用 IaaS 服务模型,常与 Lift and Shift 策略结合,将传统 IT 上的裸金属服务器应用程序迁移到云端类似的虚拟服务器上。
-
Containerize the Application
:将应用程序及其组件在容器引擎中重新平台化。部署在裸金属服务器或虚拟服务器上的任何架构的应用程序,可通过打包使其在一组符合 OCI 标准的容器中运行来实现现代化,这使应用程序可在传统 IT 或云端的容器编排器中托管。在云端,此方法使用 PaaS 服务模型。
-
Refactor the Monolith
:将传统 IT 或云端上具有单体架构的应用程序重构为更模块化的架构。“大泥球”架构可重构为模块,成为模块化单体架构;模块化单体架构中的模块可进一步重构为分布式架构,每个模块单独运行。
-
新的云应用程序
:对应用程序进行全面重构的最终方式是完全重建应用程序。无论是从头开始开发还是重建现有应用程序,都必须从一开始就设计为能在云端良好运行。对于技术债务过多的现有应用程序,重建是合适的策略。新应用程序可设计为任何平台、架构和打包方式,但分布式架构具有最大的灵活性,将模块打包为容器并在云端的容器编排器中部署将最易于部署,且云端对其管理能力最强。
这些模式按对云端的友好程度从低到高排列,从对现有应用程序更改最少到从头编写新应用程序更改最多。在没有技术债务的情况下从头开发应用程序时,开发者通常应选择最先进的方法,即分布式架构的容器化模块部署在云端。重构后的云应用程序和新的云应用程序效果相当,都适合云端,区别在于起始方式不同。
下面是应用迁移与现代化模式的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(应用迁移与现代化):::process --> B(现有应用程序):::process
A --> C(新的云应用程序):::process
B --> D(Lift and Shift):::process
B --> E(Virtualize the Application):::process
B --> F(Containerize the Application):::process
B --> G(Refactor the Monolith):::process
13. 最佳实践
为了顺利执行这些迁移和现代化策略,可遵循以下最佳实践:
-
Start Small
:逐步进行工作,不要一次性完成,而是分成可管理的小块。例如,可以先选择一个小型的、相对独立的应用程序或应用程序的一部分进行迁移和现代化尝试,积累经验后再逐步扩大范围。
-
Pave the Road
:不要让每个团队和开发者自行发明实践方法,而是为开发者构建一套工具、环境和政策的基础,让他们遵循。例如,企业可以建立统一的开发框架、配置管理工具和代码审查流程等。
遵循这些实践,应用程序的迁移和现代化工作将更加顺利。
综上所述,应用程序的迁移和现代化是一个复杂但有价值的过程。通过了解云计算服务模型、评估技术债务、掌握应用程序的基础要素、选择合适的迁移策略和遵循最佳实践,企业可以成功地将应用程序迁移到云端并进行现代化改造,从而提升竞争力,更好地适应数字化时代的发展需求。
超级会员免费看
437

被折叠的 条评论
为什么被折叠?



