从 .NET 应用程序到微服务统一现代化的经验教训

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 您继承了一个有 10 多年历史的 .NET 应用程序,任务是重新改进其特性,构建为云原生服务。您从哪里开始?您如何评估源代码以了解工作级别?您如何在最大限度地降低风险的同时进行实验?在本论坛中,探索亚马逊云科技上从整体到微服务的现代化途径。Avionté,一个人员配置和招聘平台,正在将他们的传统单一租户 .NET 框架应用程序集成到亚马逊云科技上的多租户 SaaS 解决方案中。了解他们如何通过解耦大型单体,采用云原生架构,以降低成本、改善服务正常运行时间和加快功能交付。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1300字,阅读时间大约是6分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 在这个充满信息的视频中,演讲者分享了关于如何将传统的.NET单体应用程序过渡到现代微服务架构在亚马逊云科技上的宝贵见解和建议。他们根据在实际帮助客户进行现代化努力过程中的丰富经验,概述了实用的策略和最佳实践,以帮助指导.NET开发人员和架构师完成这一旅程。 演讲者Roni Vashisht(亚马逊云科技的解决方案架构师)在讲座开始时解释了他们将重点关注评估是保留单体架构还是将应用程序拆分为微服务时的重要考虑因素。更具体地说,他们将讨论通过与其寻求现代化其.NET应用程序和基础设施的亚马逊云科技客户合作所学到的五个关键经验教训。 在进入技术架构决策之前,Roni强调首先要明确业务优先事项和试图通过应用程序解决的问题。潜在转向微服务的目标是什么?他提供了一些常见的商业动机示例,包括在高峰时段提高应用程序的可用性和稳定性,增强处理黑色星期五销售等高峰期的可扩展性,增加特征速度和上市时间,添加移动体验,通过从Windows和SQL服务器许可证迁移到云端来降低总体成本,以及从.NET框架现代化到.NET核心或.NET 5同时保留开发者技能。 虽然微服务确实可以帮助实现许多这些目标,但Roni指出,其他现代化方法,如重新托管、重新平台或重构现有的单体应用程序,也可能解决一些或所有挑战。最好的前进道路取决于特定的商业目标和背景。清楚地识别优先事项可以确保您选择最佳的架构和策略。 在过渡到第二课后,罗尼提出了一些在直接将单体应用程序拆分为微服务之前可以考虑的替代过渡方法。其中一种方法是重新托管,即将当前的.NET应用程序提起并转移到多个可用区的负载平衡器上的EC2 Windows实例上。这种方法提供了跨区域的内置容错和高可用性,同时增加了自动缩放功能以提高可扩展性。此外,还可以将SQL Server数据库以多AZ配置在亚马逊云科技上进行重新托管,以实现数据冗余。这样可以在不进行更复杂的架构更改的情况下解决可用性、稳定性和可扩展性挑战。 另一种选择是重新平台化,即以Windows容器的形式将现有的.NET应用程序打包,并在ECS、EKS或Fargate等管理的亚马逊云科技容器服务上运行它们。这种方法相较于重新托管的优势在于可以通过将更多容器打包到实例上来提高密度,并通过使用CI/CD管道和基础设施即代码简化部署自动化来加速启动时间,从而改善可扩展性。重新平台化允许优化自动化、密度和生产力,而无需修改基本应用程序结构。 第三种方法是重构,即将.NET应用程序从.NET框架移植到现代的.NET Core或.NET 5。这使得可以在Linux而不是Windows上运行容器,从而节省大量成本,因为许可证费用减少了。与.NET Core相比,基于.NET 5的应用程序通常具有更好的性能。升级到.NET Core可以让团队在不重新架构的情况下开始实现成本和性能等优势。亚马逊云科技提供了一个.NET应用程序重构工具包,以帮助评估并将应用程序迁移到Visual Studio内的.NET Core。 罗尼强调,尽管这些过渡方法不能完全提供微服务的所有优势,但它们允许在不进行高风险的架构改造的情况下交付价值。团队应考虑首先从最简单的可行方法开始,然后再尝试更复杂的重新架构过程。 在第三课中,作为亚马逊云科技的产品经理,Rasheed Abdul讨论了如何将单体应用逐步迁移到微服务的建议和技巧。他解释了一种高风险方法——"巨响法",试图同时分析和将单体分解成域和微服务。另一种较低风险的进化方法是逐渐在单体边缘构建新的微服务,慢慢扩大其功能。然而,Rasheed提倡采用"绞杀榕"模式的中庸之道。这涉及从遗留单体中一次识别并提取一个领域或业务能力到一个单独的微服务。然后使用反腐蚀层将该微服务重新集成回单体,使两者可以协同工作。团队重复此过程,系统将逐渐将领域提取到微服务中,直到原始代码库减少到仅有一个薄的门面层。这样可以在保持原有系统业务连续性的情况下实现逐步迁移。 为了帮助识别领域边界,亚马逊云科技提供了用于.NET的微服务提取器工具,该工具分析代码依赖关系并提出将相关类分组到微服务上下文的建议。将其提取到一个独立的项目中,并提供像API控制器这样的脚手架,以通过REST API呈现功能。在过渡阶段,单体中的反腐蚀层消费这些API。Rasheed指出,合作伙伴也可以提供有关此类现代化举措的帮助。 在第四课中,Roni强调,尽管人们通常认为微服务与Kubernetes密切相关,但亚马逊云科技的多种计算服务也可以支持.NET微服务,而不仅仅是容器和编排器。例如,亚马逊云科技App Runner是一个完全管理的服务,可以部署容器化的.NET应用程序而无需管理服务器。亚马逊云科技Lambda提供[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算来运行事件驱动的微服务而无需配置基础设施。诸如ECS、EKS和Fargate之类的托管容器服务也是运行Windows或Linux容器的.NET工作负载的选项。关键在于团队应该评估多种计算服务,而不是认为微服务意味着Kubernetes或单一环境。根据个别微服务的需要,适当地混合和匹配服务。 在数据层方面,Roni建议针对不同的微服务选择专门的数据库,而不仅仅依赖SQL服务器单体。例如,可以使用[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail)进行关系数据管理,使用DynamoDB进行高性能的NoSQL操作,以及使用ElastiCache作为内存中的缓存。这样可以充分利用合适的工具,使数据层实现现代化。 最后,Roni强调在采用微服务时,可观察性是一种关键性的伴随实践。由于分布式特性的影响,监控和追踪变得更加复杂。他建议在.NET应用程序中使用诸如OpenTelemetry等开源标准来记录供应商中立的日志、指标和追踪。亚马逊云科技Distro for OpenTelemetry可以将这些信号与亚马逊云科技的观测服务进行集成。 从五个经验教训开始,演讲者Odell Tuttle(Avient公司的首席技术官)分享了他公司在将传统.NET单体迁移到云端并进行微服务拆解的实际案例。Avient公司为众多企业提供人力资源服务和处理工资业务。他们的传统基础设施依赖于.NET单体和专有数据中心,导致了可用性、可扩展性和可靠性方面的问题。 Avient公司与亚马逊云科技及其合作伙伴共同制定了一个分阶段的迁移计划,将应用逐步迁移到EC2和RDS上。这通过跨AZ分布提高了可用性,并实现了自动缩放。他们还把数据复制到另一个区域以实现灾难恢复和合规性。这个过程并非没有挑战,需要团队紧密协调以分阶段规划和顺序安排过渡。 转向亚马逊云科技使得部署周期大大加快,允许每天进行生产发布。展望未来,Avient公司正在利用像亚马逊云科技AppSync、Kafka流和Snowflake等技术创建接近实时数据管道和数据分析。他们的未来计划是使用吞噬者(strangler fig)原则将单体拆分为独立可扩展的微服务。Odell强调,统一的身份识别和API是关键,有助于提取可重用的服务。 在总结中,Roni归纳了这次内容丰富会议的五条关键经验教训:首先要明确业务目标;在微服务化之前要考虑转型策略;采用逐步扩展的方法进行微服务拆分;评估除容器之外的其它计算方案;选择合适的数据库以满足特定需求;以及实施强大的可观察性。他强调,客户无需一次性承受微服务的全部风险和复杂性。相反,亚马逊云科技提供了一系列工具和指南,帮助各组织按照自身节奏逐步现代化其.NET应用程序。 **下面是一些演讲现场的精彩瞬间:** 在re:Invent上,解决方案架构师Roni Vashisht向来自亚马逊云科技的Rasheed Abdul和来自Avian的Odel Turtle介绍了另一位演讲者的内容。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_0.png) 他们采用了一种名为Strangler Fig的方法,该方法将整个领域逐步分解为独立的微服务,结合了大爆炸式方法和演化方法。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_1.png) 为了简化这个过程,亚马逊云科技推出了一款专门针对.NET代码的微服务提取工具。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_2.png) 借助这款工具,开发者可以轻松地从.NET代码中识别和提取出微服务。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_3.png) 亚马逊云科技的DynamoDB具有灵活的扩展能力和容量调配功能,确保了可预测的性能。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_4.png) 为了提高现代应用程序的可观察性,亚马逊云科技建议将Open Telemetry与.NET应用程序相结合。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_5.png) 通过这种方式,开发人员可以在将应用程序现代化为微服务的同时,更好地了解其运行状况。 ![](https://d1trpeugzwbig5.cloudfront.net/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices/images/rebranded/XNT306-Lessons_in_modernizing_monolithic__NET_applications_to_microservices_6.png) ## 总结 1. 在决定是否采用微服务之前,首先应明确业务目标。了解希望解决的问题,如可用性、可扩展性和上市时间。虽然微服务可能对此有帮助,但也需要考虑其他选项,如重新托管、重新平台化或重构至.NET Core。 2. 使用诸如Microservices Extractor之类的工具来识别相关领域并提取代码。采用逐步提取法(strangler fig),即在提取领域的同时维持单一代码块,并通过反腐蚀层连接新旧代码。 3. 利用亚马逊云科技提供的各种计算服务(如ECS、Lambda)和除SQL Server之外的目标构建数据库。同时,实施OpenTelemetry以实现跨设备和云端的可观察性。 总之,将大型应用程序迁移到亚马逊云科技上的微服务具有诸多优势,但需要精心规划。首先明确目标,然后使用工具逐步识别领域并提取代码,充分利用云服务,并实施可观察性。只要采取正确的策略,您就可以成功地将传统的.NET应用程序移植到云环境中。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭