了解 .NET Aspire 组件
尽管应用中的每个微服务都可能是独一无二的,但它们通常对数据库和缓存等支持服务有类似的要求。 在与这些支持服务进行交互的每个微服务中编写代码可能具有挑战性。 在 .NET Aspire 中,改为添加 .NET Aspire 组件时,该代码会减少。 有一些内置组件,用于满足微服务中可能需要的许多常见支持需求。
假设你就职于一家户外服装和装备公司。 开发团队已开始为新的 eShop Web 应用设计微服务。 每个微服务可能都需要数据库、消息传送服务和缓存等服务。 你希望评估 .NET Aspire 如何帮助与这些服务进行交互。
在本单元中,你将了解 .NET Aspire 中包含的现成组件,以及如何为微服务选择最佳组件。
使用 .NET Aspire 组件
每个 .NET Aspire 组件都是一个 NuGet 包,可以使用 NuGet 包管理器将其添加到项目中。 在 Visual Studio 中,有一个新的“添加 > .NET Aspire 组件”菜单项。 此操作显示包管理器,其中包含应用于仅显示 .NET Aspire 组件的筛选器:
注意
你将在本模块后面的练习中看到如何使用此组件工具。
带有 C# 开发工具包扩展的 Visual Studio Code 还支持添加 .NET Aspire 组件。
或者,.NET CLI 可以添加 .NET 组件。 例如:
dotnet add package Aspire.StackExchange.Redis --prerelease
在 AppHost 项目中,必须注册组件并在调用它的项目中使用它:
var cache = builder.AddRedis("cache");
builder.AddProject<Projects.AspireSample_Web>("webfrontend")
.WithReference(cache);
然后,可以使用依赖项注入将其添加到使用的项目:
build.AddRedisClient("cache");
其他使用代码因所使用的组件而异。
注意
每个 .NET Aspire 组件类型通常具有等效的托管包。 托管包可配置应用所需的资源和依赖项,并在 AppHost 项目(而不是使用的项目)中安装它们。
数据库组件
在云原生应用中,每个微服务负责存储其自己的数据,并且可能需要一个结构化或半结构化数据的数据库来读取和写入数据。 由于每个微服务都是独立开发的,因此你可能会发现整个应用程序的不同部分正在使用多个不同的数据库系统。
.NET Aspire 包括以下关系数据库服务器的组件:
- PostgreSQL:具有结构化查询语言 (SQL) 实现的常用开源数据库服务器。
- MySQL:另一个开源 SQL 数据库服务器。
- SQL 数据库:Microsoft 的 SQL 数据库系统。
注意
.NET Aspire SQL 数据库组件可与 Microsoft SQL Server 或 Azure SQL 数据库配合使用,这是 Azure 云中 SQL Server 的实现。 同样,Azure 包括 PostgreSQL 和 MySQL 的平台即服务 (PaaS) 实现。 运行数据库的位置由每个微服务体系结构团队决定,但 .NET Aspire 组件可以支持许多云位置,并且不强制实施任何特定的托管服务。
如果要处理半结构化数据,.NET Aspire 包括对这些 NoSQL 系统的支持:
- MongoDB:跨平台、面向文档的 NoSQL 数据库服务器。
- Azure Cosmos DB:Microsoft 灵活的 NoSQL 数据库系统,托管在 Azure 中。
存储组件
在 .NET Aspire 中,为需要将文件、数据或消息存储在 Azure 存储帐户中的微服务提供存储组件。 Azure 存储中的三种服务各有一个组件。 根据要使用 Azure 存储执行的操作选择组件:
- Azure Blob 存储:使用此服务来存储和检索 Blob 文件,例如图像和视频。
- Azure 表存储:使用此服务在半结构数据表中存储和检索行。
- Azure 队列存储:使用此服务将消息添加到队列,以便分发到其他订阅微服务。
邮件处理组件
提高云原生应用中微服务之间的通信可靠性和灵活性的一种方法是使用传送解决方案,这些解决方案提供提供队列、主题和订阅,而不是直接通信。 .NET Aspire 包括以下三个消息传送服务的组件。 根据开发人员要使用的消息传送中转站选择组件:
- RabbitMQ:此消息中转站的使用非常广泛,开放源代码,且支持提供的多种消息传送协议、队列、主题和订阅。
- Apache Kafka:此服务处理各种事件流(其中包括消息),并且包括 Kafka Connect API,以便将数据导入其他系统和从其他系统导出数据。
- Azure 服务总线:此消息中转站托管在 Azure 中,提供基于队列和订阅的消息分发。
缓存组件
当微服务收到来自用户或其他微服务的请求时,它可能需要使用来自多个位置或复杂操作的数据构造响应。 此操作可能需要一段时间。 通过缓存这些响应的部分内容,可以在以后出现类似或相同的请求时节省时间。 这样,缓存可优化性能。
一种常用的缓存服务是 Redis。 它具有消息中转站和内存数据库功能,但最常用于在 Web 应用程序和服务中缓存响应。 .NET Aspire 具有三个不同的组件,这些组件适用于 Redis。 根据要在微服务中实现的缓存任务选择组件:
- Redis 组件:如果要将 Redis 用作内存数据库,请使用此组件。
- Redis 输出缓存组件:如果要缓存完整的 HTTP 响应(例如整个网页),请使用此组件。
- Redis 分布式缓存组件:若要在应用中为多个微服务创建单个缓存,请使用此组件。
安全性
在云原生应用程序中,数据安全性通常是业务关键型主题。 由于客户可能会将其个人和敏感数据托付给你,因此必须确保这些数据经过加密并受到保护,防止拦截或篡改。 数字签名和加密要求存储私钥并检索它们进行解密。 Azure Key Vault 是一个位置,可在其中安全地存储密钥和其他机密,例如密码和证书。
.NET Aspire 包含 Azure Key Vault 组件,以便可以轻松地在 Azure Key Vault 中存储和检索机密。