.NET 9 针对云原生开发进行了显著优化,重点改进了分布式追踪、HTTP/3 支持和容器镜像优化等方面。

这些特性极大地提升了 .NET 在现代云原生应用中的适配性与开发效率。

1. 设计原理

1.1 分布式追踪支持

背景:在云原生架构中,应用程序通常由多个微服务组成。分布式追踪能够帮助开发者监控和诊断跨服务的调用链路,快速定位性能瓶颈和故障点。

实现:.NET 9 内置了对 OpenTelemetry 的支持,提供标准化的接口,方便开发者将追踪数据输出到不同的追踪系统,如 Jaeger、Zipkin 或 Azure Monitor。

目标:简化分布式追踪的集成过程,提高应用程序的可观测性,增强故障诊断和性能调优的能力。

1.2 HTTP/3 改进

背景:HTTP/3 基于 QUIC 协议,具有低延迟和高传输效率的特点,特别适用于高并发和实时性要求高的应用场景。

实现:.NET 9 的 HttpClient 和 Kestrel(内置的 Web 服务器)原生支持 HTTP/3,开发者可以直接利用这一特性,无需额外配置。

目标:提升网络通信的性能和可靠性,为现代 Web 应用和微服务架构提供更高效的传输协议支持。

1.3 容器镜像优化

背景:在云原生环境中,应用程序通常以容器形式部署。容器镜像的大小和启动速度直接影响部署效率和资源利用率。

实现:.NET 9 提供了更小的基础镜像,采用精简的操作系统层,减少不必要的组件。此外,通过改进发布流程,支持 ReadyToRun(R2R)和 AOT(Ahead-Of-Time)编译,缩短应用启动时间。

目标:降低容器镜像的体积,加快启动速度,提高部署效率,减少资源消耗。

2. 示例代码

分布式追踪示例

using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace; var builder = WebApplication.CreateBuilder(args); // 配置 OpenTelemetry 追踪
builder.Services.AddOpenTelemetryTracing(tracingBuilder =>
{
tracingBuilder
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddConsoleExporter(); // 将追踪数据输出到控制台
}); var app = builder.Build(); app.MapGet("/", async context =>
{
using var activity = new ActivitySource("MyApp").StartActivity("ProcessingRequest");
activity?.SetTag("http.method", "GET");
activity?.SetTag("http.url", context.Request.Path); await context.Response.WriteAsync("Hello, World!");
}); app.Run();

HTTP/3 示例

var builder = WebApplication.CreateBuilder(args);

// 启用 HTTP/3
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5000, listenOptions =>
{
listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1AndHttp2AndHttp3;
});
}); var app = builder.Build(); app.MapGet("/", () => "Hello, HTTP/3!"); app.Run();

容器优化示例

Dockerfile

# 使用 .NET 9 精简版基础镜像
FROM mcr.microsoft.com/dotnet/runtime-deps:9.0 AS base
WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app --self-contained true /p:PublishTrimmed=true /p:PublishAot=true FROM base AS final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["./MyApp"]

3. 应用场景

  1. 微服务架构:利用分布式追踪监控服务间的调用链路,快速定位问题;通过 HTTP/3 提升服务间通信效率;使用优化后的容器镜像实现快速部署和扩展。

  2. 实时通信应用:如在线游戏、视频会议等,对低延迟要求高的应用,HTTP/3 的改进能够显著提升用户体验。

  3. 资源受限环境:在边缘计算或物联网设备上,精简的容器镜像和快速启动能力能够有效降低资源占用,提高运行效率。

  4. 高并发 Web 应用:通过 HTTP/3 的多路复用特性,提升网页加载速度和响应能力,改善用户体验。

4. 高阶应用

  1. 自定义分布式追踪集成:结合 OpenTelemetry,开发者可以自定义追踪策略,将数据输出到特定的监控系统,满足不同的运维需求。

  2. 结合 gRPC 和 HTTP/3:利用 HTTP/3 的优势,提升 gRPC 的传输效率,构建高性能的服务间通信机制。

  3. 无服务器架构:通过 AOT 编译和精简的容器镜像,将应用部署在无服务器平台上,实现快速启动和高效运行。

  4. 性能监控与优化:使用分布式追踪数据,结合性能分析工具,深入了解应用的运行状况,进行针对性的优化,提高整体性能。

通过这些优化,.NET 9 为云原生应用开发提供了更强大的支持,帮助开发者构建高性能、高可用的现代应用程序。

周国庆

2024/12/31

.NET 9 new features-分布式追踪支持、HTTP/3 改进以及更好的容器镜像支持的更多相关文章

  1. 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程

    我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...

  2. 让你的Nginx支持分布式追踪

    Background NGINX 是一个通用且流行的应用程序.也是最流行的 Web 服务器,它可用于提供静态文件内容,但也通常与其他服务一起用作分布式系统中的组件,在其中它用作反向代理.负载均衡 或 ...

  3. Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

    在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的.小的模块或者重用已经有的模块来构建复杂的系统.随着模块的不断增多,一次请求可能会涉及到十几 ...

  4. ASP.NET Core使用Jaeger实现分布式追踪

    前言 最近我们公司的部分.NET Core的项目接入了Jaeger,也算是稍微完善了一下.NET团队的技术栈. 至于为什么选择Jaeger而不是Skywalking,这个问题我只能回答,大佬们说了算. ...

  5. OpenTracing:开放式分布式追踪规范

    前言 想实现一个简单的追踪系统似乎是容易的,需要必要的调用链id,时间戳等:想实现一款易用不侵入代码的追踪系统就很麻烦了,需要接触CLR和IL相关知识:即使你费劲心力做出了那些,如果性能不够好,也没有 ...

  6. SkyWalking 分布式追踪系统

    随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个 ...

  7. 开源分布式追踪系统 — Jaeger介绍

    目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...

  8. Centos7搭建SkyWalking分布式追踪,以mysql为存储

    Skywalking专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计.它通过探针自动收集所需的指标,并进行分布式追踪.通过 ...

  9. 微服务统计,分析,图表,监控, 分布式追踪一体化的 HttpReports 在 .Net Core 的应用

    前言介绍 HttpReports 是针对.Net Core 开发的轻量级APM系统,基于MIT开源协议, 使用HttpReports可以快速搭建.Net Core环境下统计,分析,图表,监控,分布式追 ...

  10. [业界方案] 用SOFATracer学习分布式追踪系统Opentracing

    [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...

随机推荐

  1. Spring中的事务提交事件

    如果想在spring操作事务结束后执行一些代码,应该怎么办? 为什么要这样?比如我们在事务中给其他系统发了消息,期望事务提交后过一会收到这个系统的回应,然后操作刚刚提交的数据.但是如果回应来的太快就像 ...

  2. ROS入门21讲(7)

    十二.launch启动文件的使用方法 1.launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) 2.Launch文件语法: <launch> <n ...

  3. react hooks + ts 封装组件

    react hooks+ts组件封装 简介 在react使用ts封装组件,需要注意类型, 使用 forwardRef 方法包起来 子组件 import * as React from "re ...

  4. RK3568,字符设备框架:管理同主设备号、不同次设备号设备

    字符设备框架:管理同主设备号.不同次设备号设备 以下代码针对迅为开发板RK3568,开发板系统是ubuntu20.04, 正文 以下是我写的字符设备框架,实现了管理同主设备号.不同次设备号的功能. 代 ...

  5. 【Azure App Service】在App Service for Windows上验证能占用的内存最大值

    问题描述 在创建App Service服务的时候,根据定价层不同,内存使用的最大值也有不同.但在实际测试中,发现内存最大只能占用2GB左右, 而定价层中内存分配明明是大于2GB(比如B3定价层的内存为 ...

  6. 利用AI运动识别插件,可以实现那些应用场景?

    「Ai运动识别」小程序插件已经推出一年有余,迭代了近十几个版本,收获了各类应用场景的众多用户,今天我们就带您深度解析一下插件的各类可应用场景,帮助已集成开发者进行一步拓宽应用场景,帮助有需求的开发者快 ...

  7. 异步编程在ArkTS中具体怎么实现?

    大家好,我是 V 哥,很好奇,在ArkTS中实现异步编程是怎样的,今天的内容来聊聊这个问题,总结了一些学习笔记,分享给大家,在 ArkTS中实现异步编程主要可以通过以下几种方式: 1. 使用async ...

  8. 黑盒视角下的RESTful API安全测试

    目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...

  9. Redis究竟为什么这么快?

    Redis为什么这么快? 完全基于内存,数据存在内存中,绝大部分请求是纯粹的内存操作,非常快速,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销. 数据结构简单,对数据操作也简单 ...

  10. etcd错误:Failed to defragment etcd member[127.0.0.1:2379] (context deadline exceeded)

    etcd 版本 # etcdctl version etcdctl version: 3.5.1 API version: 3.5 问题 在 执行 etcdctl --endpoints=http:/ ...