什么是 .NET Aspire?
Microsoft Azure 和 Amazon Web Services (AWS) 等云生态系统已深入 IT 行业,是 Web 应用程序和 Web 服务的常用托管解决方案。 云托管系统可能是应用程序的默认选择,因此需要确保创建的应用程序能够充分利用它们。
云原生应用程序是专门设计在云中运行的应用程序。 应用程序通常表现出某些体系结构模式,以便性能、可伸缩性和可靠性都是最佳的。
假设你就职于一家户外服装和装备公司。 董事会要求你为公司面向客户的主网站开发新的 eShop Web 应用。 你的团队熟悉微服务模型,你想知道使用 .NET Aspire 是否会使项目更加轻松。
在本单元中,你将了解有关云原生体系结构的详细信息,并了解构建它们时可能面临的挑战。 你还将了解 .NET Aspire 如何应对这些挑战。
什么是云原生应用程序?
构建云原生应用程序是为了充分利用云基础结构来提供最佳性能、可用性和复原能力。 云原生软件体系结构有六大支柱:
- 云基础结构。 云原生应用程序部署到云托管解决方案,而不是部署到本地服务器场。
- 微服务。 云原生应用程序作为一组微服务实现,每个微服务实现一小部分业务功能。
- 容器。 微服务以及应用程序的其他部分在容器中开发和部署,以确保一致的执行环境。
- 支持服务。 辅助资源(如数据库和缓存服务)可用于为微服务提供通用功能。
- 现代化设计。 云原生应用程序符合十二因素应用程序方法,其中包括持续集成/持续部署 (CI/CD)、可处置性、端口绑定等原则。
- 自动化。 云原生应用程序使用基础结构即代码 (IaC) 自动执行平台配置和部署。
为了提供敏捷性,云原生应用程序由一组微服务组成。 每个微服务:
- 实现完整功能的一部分。
- 在各自的进程中执行,相互隔离,并且经常是在专用容器中执行。
- 由单独的团队构建。
- 与其他微服务通信,但松散耦合。
每个团队可以选择他们喜欢的语言和技术来实现微服务。 每个微服务都独立于其他微服务进行部署和缩放。
以下关系图说明了传统整体式 Web 应用程序与由微服务组成的 Web 应用程序之间的差异。
云原生应用可以为企业实现许多优势。 例如:
- 通过在云中托管应用,你无需自行构建和维护基础结构,例如托管服务器、操作系统和支持服务。
- 由于每个微服务都是独立开发的,因此可以持续部署新功能,而无需等待其他团队或主要版本里程碑。
- 由于每个微服务都在一个或多个容器中运行,因此你知道所有测试、暂存和生产环境都是相同的。
- 可以使用容器业务流程系统(如 Kubernetes)快速部署额外的实例,以响应更多需求。
云原生应用程序带来的挑战
云原生应用程序由多个微服务组成,并且具有许多功能,因此可能会变得复杂,并带来整体式应用所没有的挑战。 例如:
- 应用定义。 除非仔细记录,否则开发人员很难了解哪些组件构成了完整的云原生应用。
- 通信。 每个微服务可能需要与其他微服务交换消息或数据,以便构建对用户请求的响应。 虽然必须启用此类通信,但所采用的方式不能将一个微服务紧密耦合到另一个微服务。 在高需求或服务故障期间,还需要通信以保持可靠性。
- 复原能力。 任何托管服务都不可能 100% 可用。 必须确保在微服务不可用的极少数情况下,应用会可靠地处理故障,并保留请求,直到服务返回。
- 分布式数据。 每个微服务都实现了自己的数据存储层,可能不会使用与其他微服务相同的数据库服务器。 必须考虑如何查询来自多个微服务的数据,以及如何实现事务。
- 机密。 如果应用要处理任何类型的敏感数据,则每个微服务都必须在返回响应之前对收到的每个请求进行身份验证。 非对称和对称加密密钥等机密经常用于保护数据,并积极识别调用用户和微服务。 必须考虑如何在云原生应用中存储和交换这些机密。
- 开发人员加入。 新开发人员必须能够理解应用的体系结构,以及如何快速使用它。 必须确保新开发人员能够在没有大量跨域知识或本地设置的情况下快速上手。
最近,云原生应用程序设计逐渐普及,但本部分中的挑战会阻止一些团队采用这种模式。 例如,.NET 具有解决这些问题所需的所有功能,但解决方案可能需要对培训和自定义代码进行大量投资。
什么是 .NET Aspire?
.NET Aspire 是为 .NET 构建的新云就绪堆栈,旨在使开发人员能够快速轻松地创建云原生应用程序。 让我们看看 .NET Aspire 的功能,这些功能可解决我们所遇到的挑战。
资源协调
微服务及其松散耦合的性质提高了所部署应用的灵活性,但会使配置变得更加困难。 构成应用的服务列表可能变得不清楚,提供微服务的终结点可能难以识别。 .NET Aspire 提供业务流程功能,以便:
- 可以为所有团队明确指定构成应用程序的 .NET 项目、容器、可执行文件和云资源。
- 微服务可以自动发现所有应用程序的组件的终结点。 .NET Aspire 通过管理连接字符串并将其注入微服务(如果需要)来执行此服务发现。
创建 .NET Aspire 解决方案时,你会在该解决方案中看到一个名为 <SolutionName>.AppHost 的新项目。 此项目为应用实现业务流程,应确保它是解决方案的启动项目。
组件
微服务通常对支撑其功能的复杂支持服务具有功能要求。 例如:
- 数据存储。 为了保留数据以支持产品目录、购物车、标识存储及其他功能,微服务必须将数据存储在结构化或半结构化存储中。
- 缓存。 为了最大限度地提高性能,微服务可以在缓存中存储部分或完整的响应,以便更快地满足后续的类似请求。
- 消息。 松散耦合的微服务必须相互通信,即使在流量较高或网络条件非常困难的情况下,也必须确保此通信的可靠性。 将来自发件人的消息排队并分发给收件人的服务是一项常见要求。
在 .NET Aspire 中,可以轻松地在每个微服务中实现这些支持服务,因为堆栈包含 .NET Aspire 组件。 每个组件都是一个 NuGet 包,可以添加到解决方案中,并将标准接口实现到支持服务。 此标准接口可确保微服务一致且无缝地连接到其支持服务。
现成的 .NET Aspire 组件包括:
- 数据存储组件,例如适用于 PostgreSQL、SQL 数据库、Azure Cosmos DB 和 MongoDB 的组件。
- 缓存组件,例如适用于 Redis 的组件。
- 消息传送组件,例如适用于 RabbitMQ 和 Azure 服务总线的组件。
重要
.NET Aspire 包括许多可与 Azure 服务(如 Azure 存储和 Azure 服务总线)配合使用的组件,但 .NET Aspire 项目不需要 Azure,它们可以同样出色地与 Azure 外部的支持服务(例如 RabbitMQ 和 MongoDB)配合使用。
工具
.NET Aspire 还会添加到 Visual Studio 中面向开发人员的工具。 例如:
- 通过新的项目模板,只需在向导中执行几个步骤即可创建 .NET Aspire 解决方案。
- .NET Aspire 仪表板是在从 Visual Studio 启动解决方案时出现的 Web 界面。 此仪表板显示应用的所有微服务和支持服务,你可以调用它们进行测试。 它还显示性能和监视工具。
- 将显示额外的菜单项,可用于添加 .NET Aspire 组件、注册项目获取 .NET Aspire 业务流程协调程序支持或完成其他任务。
注意
本模块稍后会详细介绍 NET Aspire 工具。