.NET 8 的网络改进有哪些亮点?

摘要:原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 随着新的 .NET 版本的发布,发布有关网络空间中新的有趣变化的博客文章已成为一种传统。今年,我们希望引入 HTTP 空间的变化、新添加
原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 随着新的 .NET 版本的发布,发布有关网络空间中新的有趣变化的博客文章已成为一种传统。今年,我们希望引入 HTTP 空间的变化、新添加的指标、新的 HttpClientFactory API 等。 HTTP协议 指标 .NET 8 使用 .NET 6 中引入的 System.Diagnostics.Metrics API 将内置 HTTP 指标添加到 ASP.NET Core 和 HttpClient。指标 API 和新内置指标的语义都是在与 OpenTelemetry 密切合作,确保新指标符合标准,并与 Prometheus 和 Grafana 等流行工具良好配合。 System.Diagnostics.Metrics API 引入了许多 EventCounters 所缺少的新功能。新的内置指标广泛利用了这些功能,从而通过更简单、更优雅的仪器集实现了更广泛的功能。举几个例子: 直方图使我们能够报告持续时间,例如。请求持续时间 (http.client.request.duration) 或连接持续时间 (http.client.connection.duration)。这些是没有 EventCounter 对应项的新指标。 多维性允许我们将标签(又名属性或标签)附加到测量值上,这意味着我们可以报告诸如 server.address (标识 URI 来源)或 error.type (描述请求失败时的错误原因)之类的信息测量值。多维还可以实现简化:报告打开的 HTTP 连接数 SocketsHttpHandler 使用 3 个 EventCounters:http11-connections-current-total、http20-connections-current-total 和 http30-connections-current-total,而 Metrics 相当于这些counters 是一个单一的工具,http.client.open_connections,其中 HTTP 版本是使用 network.protocol.version 标签报告的。 为了帮助内置标签不足以对传出 HTTP 请求进行分类的用例,http.client.request.duration 指标支持注入用户定义的标签。这称为浓缩。 IMeterFactory 集成可以隔离用于发出 HTTP 指标的 Meter 实例,从而更轻松地编写针对内置测量运行验证的测试,并实现此类测试的并行执行。 虽然这并不是特定于内置网络指标,但值得一提的是 System.Diagnostics.Metrics 中的集合 API 也更高级:它们是强类型的且性能更高,并允许多个同时侦听器和侦听器访问未聚合的测量结果。 这些优势共同带来了更好、更丰富的指标,这些指标可以通过 Prometheus 等第三方工具更有效地收集。得益于 PromQL(Prometheus 查询语言)的灵活性,它允许针对从 .NET 网络堆栈收集的多维指标创建复杂的查询,用户现在可以深入了解 HttpClient 和 SocketsHttpHandler 实例的状态和运行状况,其级别如下:以前是不可能的。 不利的一面是,我们应该提到,.NET 8 中只有 System.Net.Http 和 System.Net.NameResolution 组件使用 System.Diagnostics.Metrics 进行检测,这意味着您仍然需要使用 EventCounters 从较低层提取计数器堆栈的级别,例如 System.Net.Sockets。虽然仍然支持以前版本中存在的所有内置 EventCounters,但 .NET 团队预计不会对 EventCounters 进行大量新投资,并且在未来版本中将使用 System.Diagnostics.Metrics 添加新的内置检测。 有关使用内置 HTTP 指标的更多信息,请阅读我们有关 .NET 中的网络指标的教程。它包括有关使用 Prometheus 和 Grafana 进行收集和报告的示例,还演示了如何丰富和测试内置 HTTP 指标。有关内置工具的完整列表,请参阅 System.Net 指标的文档。如果您对服务器端更感兴趣,请阅读有关 ASP.NET Core 指标的文档。
阅读全文