随着 .NET 8 的发布,.NET Aspire 也随之发布[1],这是一个全家桶框架旨在加快基于云的应用程序的构建。.NET Aspire 从一开始就集成了关键组件,例如遥测和运行状况检查。它还承诺提供无缝的本地开发人员体验,该体验可以有效扩展以满足云应用程序开发的需求。Microsoft 鼓励对 .NET Aspire 预览版(目前在 GitHub 上提供[2])提供反馈。
.NET Aspire提供了如下3个方面的能力,来帮助我们使用.NET开发分层、云就绪的可观测、本地与生产环境一致的分布式云原生应用程序:
- 微服务的编排能力:在开发和线上环境自动处理多个微服务之间的连接和依赖,也即内置了服务发现等基础能力。
- 基础服务的访问能力:通过提供一系列Nuget包,把对一些基础服务的访问进行统一封装(比如,缓存、数据库、消息队列等),方便微服务直接使用。
- 工具链的相应配合:在VS和VSCode等工具中添加对以上编排能力的支持,并提供一系列开箱即用的模板,来方便开发人员进行开发、调试和部署云原生应用。
Aspire 包含了 2020 年首次发布的名为 Project Tye 的早期实验中首次使用的元素,尽管 Project Tye 是为 Kubernetes 设计的,而 Aspire 没有做出这种假设,Aspire 也是。Project Tye 在首次发布时受到欢迎,但在最近的一年几乎没有活动。毫无疑问的是社区开发人员都很想知道Microsoft是否会兑现承诺, 随着.NET 8的发布,Aspire继承了Tye 的最新状态。根据 .NET 团队的首席项目经理 Glenn Condron 的说法,它将在 2024 年春季全面上市,距离现在只有六个月的时间,昨天发布的是第一个预览版。
Aspire 将成为 .NET 8 的一部分,第一个版本是v8.0.0-preview.1.23557.2[3]。完整的工具支持位于最新的 Visual Studio 预览版 17.9 预览版 1 中,这意味着必须使用 Windows 进行开发,尽管 Linux 和 Mac 用户可以在没有某些开发人员工具的情况下使用它。
当前的Aspire预览版面向Visual Studio和Azure,很多人的第一感觉就是面向Azure搞的一个东西,不过他其实也包含了Dapr的支持,因此Aspire 可以支持Dapr 的所有平台,而不是局限于Azure 这样的微软平台。
初学者 Aspire 应用程序示例包括 Blazor Web 应用程序、后端 API 和 Redis 缓存。解决方案中添加了两个 Aspire 项目,一个名为 AppHost,它作为分布式应用程序的一部分运行任何 .NET 项目,另一个名为 ServiceDefaults,它提供包括服务发现、遥测和运行状况检查终结点在内的功能。包括一个开发人员仪表板,其中列出了服务、收集和显示日志,并显示了应用程序各部分的指标和跟踪。
遥测基于用于创建和管理遥测数据的 Open Telemetry [4]项目,然后可以将这些数据传递给各种工具。Open Telemetry 得到了大约 40 家供应商的支持,包括 Grafana、Splunk、New Relic、Datadog 和 Dynatrace 等熟悉的名字,以及 Jaeger 和 Prometheus 等开源项目。
Aspire 应用程序的部署旨在基于容器。Aspire 可以生成一个清单来定义应用程序中不同服务之间的关系,然后工具可以使用该清单进行部署。Microsoft 提供与 Azure 容器应用程序的集成,“在一个步骤中立即配置和部署 Azure 资源。
现有应用程序可以添加 Aspire 支持,前提是它们已升级到 .NET 8。然后,在 Visual Studio 中,开发人员可以添加 Aspire Orchestration Support,这会将 AppHost 和 ServiceDefaults 项目添加到解决方案中。
Aspire 支持组件,其中每个组件都必须默认提供弹性、运行状况检查和遥测,并与依赖项注入集成,这是一种向应用程序添加服务的技术,通常用于 .NET 应用程序。Condron 以 Redis 组件为例,该组件通过一次调用 AddRedis 来添加 Redis 缓存,从而创建可以根据需要覆盖的默认配置。
初始组件集包括 PostgreSQL、RabbitMQ、Redis、SQL Server、Azure Blob 存储、Azure Cosmos DB、Azure Key Vault、Azure 服务总线和 Azure 存储队列。数据库组件附带Entity Framework和普通客户端版本,其中Entity Framework是标准的 .NET ORM(对象关系映射)库。
它为云原生应用程序提供仪表板,可用于查看日志和指标、分布式跟踪、依赖项等。
通过仪表板,您可以列出已分发的服务并显示日志。 它显示一个红色圆圈表示有问题的服务,使人们更容易了解云原生分布式应用程序的状态。
此外,“跟踪”功能允许对一组服务如何处理用户操作进行分布式跟踪。