重构为现代的 .NET,并迁移到 Linux 上 - AWS 规范指引

重构为现代的 .NET,并迁移到 Linux 上

概览

实现旧版 .NET Framework 应用程序的现代化,能够帮助您提升安全性、性能和可扩展性。实现 .NET Framework 应用程序现代化的有效方法是将其迁移到现代的 .NET 版本(6+)。以下是将这些应用程序迁移到开源 .NET 所带来的部分主要优势:

  • 通过在 Linux 操作系统上运行它们来降低 Windows 许可成本

  • 充分利用现代语言的可用性

  • 获得经过优化可在 Linux 上运行的性能

许多组织仍在运行较旧版本的 .NET Framework。这可能会带来安全风险,因为 Microsoft 不再解决旧版本中的漏洞。Microsoft 已停止对 .NET Framework 4.5.2、4.6 和 4.6.1 这些新版本的支持。评估继续运行该框架旧版本所带来的风险与收益非常重要。为了降低风险并减少成本,值得投入时间和精力重构为现代的 .NET 版本。

成本影响

考虑通用型 EC2 实例类型(m5),它能提供计算、内存和网络资源的均衡。这些实例适用于各种应用程序,例如 Web 服务器、中型数据库和源代码存储库。

例如,在美国东部(弗吉尼亚州北部)的 Windows Server(含许可)上使用具有 4 个 vCPU 和 16GB 内存的按需型 m5.xlarge 实例每月的费用为 274.48 美元。在 Linux 服务器上使用同样的资源,每月费用为 140.16 美元。在此示例中,如果将您的应用程序从 .NET Framework 迁移到现代版本的 .NET 并在 Linux 服务器上运行应用程序,成本将降低 49%。您的成本可能会因您在选择 EC2 实例时所选的选项(例如实例类型、操作系统、存储等)的不同而有所差异。您可以使用节省计划预留实例进一步优化成本。有关更多详细信息,请使用 AWS 定价计算器 进行成本估算。对于包含 Windows 的实例,无论定价模式如何,许可费用均为每小时每个 vCPU 0.046 美元

将这些基于 .NET Framework 应用程序移植到现代 .NET 需要开发人员付出努力。您必须评测您的应用程序及其依赖关系,以确定它们是否与目标平台版本兼容。AWSPorting Assistant for .NET 是一款辅助工具,它能够扫描 .NET Framework 应用程序,并生成 .NET 兼容性评测报告,以帮助您更快地移植应用程序以与 Linux 兼容。Porting Assistant for .NET 能够识别与 .NET 的不兼容之处,找出已知的替换方案,并生成详细的兼容性评测报告。在移植您的解决方案之后,您必须手动更改代码,以便您的项目能够使用依赖关系成功编译。这减少了将您的应用程序现代化迁移至 Linux 所需的人工工作量。如果您的应用程序支持 ARM 处理器,迁移到 Linux 便能解锁使用 Graviton 实例的能力。这将有助于您再节省 20% 的成本。有关更多信息,请参阅 AWS 计算博客中的使用 AWS Graviton2 为 .NET 5 提供支持:基准

还有一些其他工具,例如适用于 .NET 重构的 AWS Toolkit.NET 升级助手,它们能够帮助您将遗留的 .NET Framework 应用程序移植到现代的 .NET。

成本优化建议

要迁移 .NET Framework 应用程序,请执行以下操作:

  1. 先决条件 – 要使用 Porting Assistant for .NET,您必须在计划分析应用程序源代码的计算机上安装 .NET 5+ 版本。该计算机上的资源必须具备最少 1.8GHz 的处理速度、4GB 的内存以及 5GB 的存储空间。有关更多信息,请参阅 Porting Assistant for .NET 文档中的先决条件

  2. 评测 – 下载 Porting Assistant for .NET 作为可执行(下载)文件。您可以下载并将该工具安装到您的计算机上,以开始对您的应用程序进行评测。该评测页面包含了那些与现代 .NET 不兼容的已移植项目、包和 API。因此,在评测完成后,您在解决方案中会遇到构建错误。您可以查看评测调查发现或将其下载到 CSV 文件中。有关更多信息,请参阅 Porting Assistant for .NET 文档中的移植解决方案

  3. 重构 – 评测应用程序后,您可以将项目移植到目标框架版本。移植解决方案时,您的项目文件以及部分代码将会由 Porting Assistant 进行修改。您可以检查日志,以查看对您源代码所做的更改。在大多数情况下,要完成代码迁移和测试工作以使其达到可投入生产状态,还需要付出额外的努力。根据应用程序的不同,这些更改可能包括实体框架、身份和身份验证等。有关更多信息,请参阅 Porting Assistant for .NET 文档中的移植解决方案

这是将您的应用程序现代化到容器的第一步。将您的 .NET Framework 应用程序现代化到 Linux 容器,可能有多种商业和技术方面的推动因素。其中一个重要的推动因素是通过从 Windows 操作系统转向 Linux 系统来降低总拥有成本。这在将您的应用程序迁移到跨平台的 .NET 版本以及迁移到容器中以优化资源利用时,能够降低许可费用。

将您的应用程序移植到 Linux 后,您可以使用 AWS App2Container 对应用程序进行容器化。App2Container 使用 Amazon ECS 或 Amazon EKS 作为您可以直接部署到的端点服务。App2Container 提供了所有必要的基础设施即代码(IaC)部署构件,以帮助您反复将应用程序容器化。

其他注意事项和资源