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

news2024/11/26 18:43:13

引言

        在现今飞速发展的技术世界中,引用最新的工具和框架来提升项目的性能和可管理性至关重要。作为一名开发者,我最近在自己的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 listdotnet workload install aspiredotnet workload update

创建并配置项目

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

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

    • AntSK.AppHost

    • AntSK.ServiceDefaults

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[单master节点k8s部署]32.ceph分布式存储(三)

基于ceph rbd生成pv 在集群中认证ceph 用下面代码生成ceph的secret .创建 ceph 的 secret&#xff0c;在 k8s 的控制节点操作&#xff1a; 回到 ceph 管理节点创建 pool 池&#xff1a; [rootmaster1-admin ~]# ceph osd pool create k8stest 56 pool k8stest created [rootm…

BERT论文解读及情感分类实战(论文复现)

BERT论文解读及情感分类实战&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 BERT论文解读及情感分类实战&#xff08;论文复现&#xff09;简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 N…

【web安全】——常见框架漏洞

1.ThinkPHP框架漏洞 thinkphp是一个国内轻量级的开发框架&#xff0c;采用phpapache&#xff0c;在更新迭代中&#xff0c;thinkphp也经常爆出各种漏洞&#xff0c;thinkphp一般有thinkphp2、thinkphp3、thinkphp5、thinkphp6版本&#xff0c;前两个版本已经停止更新&#xff…

【详细教程】如何使用YOLOv11进行图像与视频的目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

m4a怎么转换成mp3?音频转换MP3只需要这6个小工具!

m4a怎么转换成mp3&#xff1f;M4A和MP3是两种常见的音频格式&#xff0c;M4A通常使用AAC&#xff08;高级音频编码&#xff09;进行压缩&#xff0c;提供更高的音质和更小的文件体积&#xff0c;特别适合在Apple设备上使用。而MP3则以其高压缩比和广泛的兼容性著称&#xff0c;…

TM1618数码管控制芯片使用共阳极数码管过程中的问题和解决办法

控制芯片的基本了解 相比于不用控制芯片的电路&#xff1a;这里带2根电源线和3个信号线&#xff0c;共使用了5根线&#xff0c;但可以控制4个8段数码管显示。若是电路直接控制4个8段数码管需要84113个接口&#xff0c;这对于MCU的珍贵引脚简直是浪费。 这里不会出现余晖效应也…

大花蔷薇T2T基因组-60

Multi-omics analyzes of Rosa gigantea illuminate tea scent biosynthesis and release mechanisms 多组学分析揭示了大花蔷薇茶香合成及释放机制 摘要 玫瑰是一种全球广泛栽培的重要观赏作物&#xff0c;用于香水生产。然而&#xff0c;由于缺乏茶玫瑰的参考基因组&#x…

鸿蒙开发(NEXT/API 12)【穿戴设备传感器获取】手机侧应用开发

手机侧应用可以通过Wear Engine获取穿戴设备上的传感器信息&#xff0c;并通过打开、关闭命令控制获取传感器数据。 使用传感器相关接口前&#xff0c;需要向手机侧用户申请获取对应权限的授权 传感器类型申请权限ECG、PPG、HR[HEALTH_SENSOR]人体传感器ACC、GYRO、MAG[MOTIO…

汇编DEBUG程序调用

工具 系统&#xff1a;Windows 11 应用&#xff1a;DOSBox 0.74-3 下载安装教程&#xff1a;本人写的《DOSBox下载安装&#xff08;Windows系统 DOSBox 0.74-3&#xff09;》 https://blog.csdn.net/just_do_it_sq/article/details/142715182?spm1001.2014.3001.5501 相关文…

C++ 算法学习——1.3 深度优先搜索

深度优先搜索&#xff1a;简单讲就是搜到某条路尽头&#xff0c;再掉头回溯搜其他的路。此中重点是尽头的判断&#xff0c;和对走过的路进行标记。 一般采用递归的写法&#xff0c;模板大致如下&#xff1a; DFS(node,visited):if node is in visited:returnadd node to visi…

通用mybatis-plus查询封装(QueryGenerator)

结果如下图所示 java类代码分别如下 1 package com.hdx.contractor.util.mybatis;import com.hdx.contractor.common.user.SecurityUser; import com.hdx.contractor.common.user.UserDetail; import com.hdx.contractor.util.query.oConvertUtils; import lombok.extern.slf…

OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植案例(一)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 轻量带屏解决方案之恒玄芯片移植案例 本文章基于恒玄科技BES2600W…

【AI知识点】交叉验证(Cross-Validation)

交叉验证&#xff08;Cross-Validation&#xff09; 是机器学习中常用的一种模型评估方法&#xff0c;用于评估模型的性能和泛化能力。它通过在不同的训练集和验证集上多次训练和测试模型&#xff0c;从而有效地评估模型在未见数据上的表现&#xff0c;帮助防止模型的过拟合和欠…

【RTD MCAL 篇2】 K312 UART DMA

【RTD MCAL 篇2】 K312 UART DMA 一&#xff0c;文档简介二&#xff0c; 功能实现2.1 K312 MINIEVB硬件配置2.2 EB 配置2.2.1 Mcl module2.2.2 Mcu module2.2.3 Platform module2.2.4 Port module2.2.5 Uart module2.2.6 Rm module 2.3 main code 三&#xff0c;测试结果 一&am…

Clio——麻省理工学院增强机器人场景理解算法

概述 机器人感知长期以来一直受到现实世界环境复杂性的挑战&#xff0c;通常需要固定设置和预定义对象。麻省理工学院的工程师 已经开发了Clio这项突破性的系统可以让机器人直观地理解并优先考虑周围环境中的相关元素&#xff0c;从而提高其高效执行任务的能力。 了解对更智…

【Python】Marmir 使用指南:Python 驱动的电子表格生成器

Marmir 是一个由 Python 驱动的电子表格生成工具&#xff0c;专门用于将 Python 数据结构&#xff08;如字典、列表等&#xff09;转换为电子表格文件&#xff08;如 Excel&#xff09;。Marmir 的设计目标是提供比传统电子表格库&#xff08;如 xlwt&#xff09;更强大和灵活的…

ctf.bugku-备份是个好习惯

访问页面得到字符串 这串字符串是重复的&#xff1b; d41d8cd98f00b204e9800998ecf8427e 从前端、源码上看&#xff0c;除了这段字符串&#xff0c;没有其他信息&#xff1b;尝试解密&#xff0c;长度32位&#xff1b;各种解密方式试试&#xff1b; MD5免费在线解密破解_MD5在…

文件后缀名不见了怎么办?

有一天&#xff0c;突然有需要更改文件的后缀名&#xff0c;可奇怪的是文件只有名称&#xff0c;后缀不见了&#xff0c;这该如何修改呢&#xff1f; 第一步&#xff1a;打开此电脑&#xff0c;最上面一栏选择“查看” 第二步&#xff1a;将“文件扩展名”勾选上 第三步&…

会议时如何实现扫码签到?

如何实现扫码签到&#xff1f; 在现代活动管理中&#xff0c;签到环节是不可或缺的一部分。它不仅关系到活动的顺利进行&#xff0c;还涉及到参与者的体验。传统的签到方式往往耗时且效率不高&#xff0c;而随着技术的发展&#xff0c;扫码签到成为了一种高效且便捷的解决方案。…

用小学生可以理解的语言讲一下什么是大模型

好的&#xff0c;用小学生的语言来说&#xff0c;大模型就像是一个超级聪明的机器人老师&#xff0c;它懂得很多东西&#xff0c;可以帮助我们做很多事情。 1. **懂得很多**&#xff1a;大模型知道很多知识&#xff0c;就像一个巨大的图书馆&#xff0c;里面有很多书&#xff0…