深度扩展AntSK,让.NET Aspire助力您的AI项目

xuzeyu
xuzeyu
发布于 2024-08-26 / 210 阅读
1

深度扩展AntSK,让.NET Aspire助力您的AI项目

引言

        在现今飞速发展的技术世界中,引用最新的工具和框架来提升项目的性能和可管理性至关重要。作为一名开发者,我最近在自己的AI知识库项目AntSK中集成了.NET Aspire,这为我的项目注入了新的活力。如果你还不清楚什么是.NET Aspire,那你将通过这篇文章充分了解它,并且学会如何将其集成到你的项目中,大大提高项目的分布式能力和可观察性。

什么是.NET Aspire?

        简单来说,.NET Aspire 是一种具有高度主见性和云原生的技术堆栈,专门为打造可观察的、生产就绪的分布式应用程序而设计。它通过一系列NuGet包提供支持,这些包解决了特定的云原生问题。

        云原生应用程序通常由小型、互连的微服务组成,而不是一个单一的代码库。这类应用程序充分利用了云基础架构的优势,如可扩展性、弹性和管理性。分布式应用程序需要在多个节点之间通信,以便为最终用户提供快速响应,而.NET Aspire正是为此类应用而生。

为什么选择.NET Aspire?

        选择.NET Aspire的原因很多,主要包括以下几点:

  1. 云原生特性:.NET Aspire特别适用于云原生应用,其设计理念就是为分布式系统提供可靠、可扩展和高性能的解决方案。

  2. 强大的观察能力:启用.NET Aspire后,可以通过仪表盘实时监控系统运行状态,方便进行性能调优和故障排查。

  3. 便捷的开发体验:通过NuGet包和相关工具的支持,使得集成和开发过程变得简单易行。

如何集成.NET Aspire?

        以下是我在AntSK项目中集成.NET Aspire的具体步骤。

安装.NET Aspire

        开始前,我们需要先安装.NET Aspire。可以通过以下命令确认当前已安装的项并进行安装:


dotnet workload list
dotnet workload install aspire
dotnet workload update

创建并配置项目

  1. 在项目中创建两个文件夹:

    • AntSK.AppHost

    • AntSK.ServiceDefaults

  2. 进入AntSK.AppHost目录,执行以下命令:

dotnet new aspire-apphost

    类似地,进入AntSK.ServiceDefaults目录,执行:

dotnet new aspire-servicedefaults

  1. 将这两个项目添加到解决方案中,并使用Host项目引用AntSK(这是我们的Blazor Web应用,也可以是API)。

注册服务

        在AntSK中,我们需要登记服务。使用以下代码:

builder.AddServiceDefaults();

        此操作将成功引入Aspire。

配置日志

        为了更好地监控和管理日志,可以使用Serilog。需要引入以下包:

<PackageReference Include="Serilog" Version="4.0.0-dev-02195" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.1.0-dev-00943" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.1-dev-00972" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.1-dev-10391" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.1-dev-00583" />
<PackageReference Include="Serilog.Sinks.Seq" Version="8.0.0-dev-00302" />
<PackageReference Include="Serilog.Sinks.OpenTelemetry" Version="3.0.0-dev-00298" />

        通过配置文件来初始化Serilog:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .CreateLogger();
var loggerFactory = LoggerFactory.Create(builder => {
    builder.ClearProviders();
    builder.AddSerilog();
});

        在appsettings.json中添加配置:


"Serilog": {
   "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Seq", "Serilog.Sinks.File" ],
   "MinimumLevel": "Debug",
   "WriteTo": [
     { "Name": "Console" },
     {
       "Name": "OpenTelemetry",
       "Args": {
         "Endpoint": "http://localhost:18889"
       }
     },
     {
       "Name": "File",
       "Args": {
         "path": "D:\\git\\AntBlazor\\model\\logs\\log-.txt",
         "rollingInterval": "Day",
         "fileSizeLimitBytes": 10485760
       }
     }
   ],
   "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
}

        还需要在Host项目的Properties/launchSettings.json进行修改:

{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:18888",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "DOTNET_ENVIRONMENT": "Development",
        "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:18889",
        "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20229",
        "ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
      }
    }
  }
}

        注意,ASPIRE_ALLOW_UNSECURED_TRANSPORT需要设置为true以便在本地调试时不使用https。

启动Aspire仪表盘

        完成上述步骤后,可以直接启动Host项目来启动Aspire仪表盘。

        然后运行 localhost:18888就可以打开仪表盘了。

Docker化应用

        为了在Docker中使用Aspire,我们的Dockerfile不需要修改,但需要在docker-compose文件中进行以下配置:

version: '3.8'
services:
  aspire-dashboard:
    container_name: aspire-dashboard
    image: mcr.microsoft.com/dotnet/aspire-dashboard:8.0
    networks:
      - antsk
    environment:
      - DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS=true
      - ASPIRE_ALLOW_UNSECURED_TRANSPORT=true
      - DASHBOARD__OTLP__AUTHMODE=ApiKey
      - DASHBOARD__OTLP__PRIMARYAPIKEY=antsk
      - DASHBOARD__TELEMETRYLIMITS__MAXLOGCOUNT=1000
      - DASHBOARD__TELEMETRYLIMITS__MAXTRACECOUNT=1000
      - DASHBOARD__TELEMETRYLIMITS__MAXMETRICSCOUNT=1000
      - DASHBOARD__APPLICATIONNAME=AntSKDashBoard
    ports:
      - 18888:18888
      - 18889:18889
    restart: unless-stopped
  antsk:
    container_name: antsk
    image: registry.cn-hangzhou.aliyuncs.com/xuzeyu91/antsk:p0.3.8
    ports:
      - 5000:5000
    networks:
      - antsk
    depends_on:
      - antskpg
    restart: always
    environment:
      - ASPNETCORE_URLS=http://*:5000
      - ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
      - OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES=true
      - OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES=true
      - OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY=in_memory
      - OTEL_SERVICE_NAME=antsk
      - OTEL_EXPORTER_OTLP_ENDPOINT=http://aspire-dashboard:18889
    volumes:
      - ./appsettings.json:/app/appsettings.json 
      - /AntSK/model:/app/model
      - /AntSK/model:/root/.cache/modelscope/hub/AI-ModelScope
networks:
  antsk:
    external: true

效果展示

        完成以上配置和部署后,您将能享受到.NET Aspire带来的强大功能,能够实时监控并分析你的应用性能。借助Aspire仪表盘,你不仅能查看详细的日志信息,还能通过各种性能指标来优化你的AI项目。

        我们可以通过aspire仪表盘看到我们的log日志

        以及项目的链路追踪

        包括还有各种各样的指标数据,这是非常不错的

总结

        通过这篇文章的介绍和指导,大家应该已经了解到.NET Aspire的强大之处以及如何将其无缝集成到你的AI项目中。.NET Aspire不仅可以提供优秀的分布式能力和监控功能,还能帮助开发者高效地进行开发和调试,是一个值得信赖的技术工具。希望大家能够通过实践,发挥Aspire的最大价值,让你的项目更上一层楼。

也欢迎大家关注我的开源项目,AntSK:

https://github.com/AIDotNet/AntSK