庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
可观测可视化 Grafana 版,10个用户账号 1个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。

.NET9 Aspire & Dapr 构建高效云原生应用的最佳实践

引言

2024年11月13日,对于开发者社区来说是一个值得庆祝的日子。这一天,.NET 9 正式版发布,同时 Dapr 也正式从 CNCF 毕业。这两个重要的里程碑标志着云原生技术和开发工具的进一步成熟和完善。本文将详细介绍如何使用 .NET 9 Aspire、Dapr、Kubernetes/Containerd、Ubuntu Server 24.04 LTS 和 Podman 构建高效、可靠的云原生应用。

技术栈版本信息

  • .NET 9 Aspire:版本 9.0.0
  • Dapr:版本 1.14.0
  • Ubuntu Server:版本 24.04 LTS
  • Kubernetes:版本 1.31.0
  • Containerd:版本 1.7.14
  • Podman:版本 5.3.0-rc3

.NET 9 正式版发布

.NET 9 于 2024 年 11 月 12 日正式发布,这是 .NET 生态系统的一个重要更新。.NET 9 带来了许多新特性和性能优化,特别是在云原生和 AI 开发方面。以下是 .NET 9 的一些主要亮点:

新特性

  1. 改进的异步流支持:.NET 9IAsyncEnumerable 进行了优化,提高了异步流的性能和可靠性。
  2. 增强的 LINQ 支持:新的 LINQ 方法和优化使得数据查询更加高效和灵活。
  3. 改进的 JSON 处理:引入了新的 JSON 序列化器,支持更复杂的 JSON 结构和更高的性能。
  4. 更好的 AI 集成:.NET 9 提供了更多的 AI 和机器学习库支持,简化了 AI 应用的开发过程。
  5. 新的 HTTP 客户端:引入了 HttpClientFactory 的改进版本,提供了更好的性能和资源管理。
  6. 改进的 DI 依赖注入:增强了依赖注入框架,支持更多的高级功能和更好的性能。

性能优化

  1. 启动时间优化:通过减少初始化开销,.NET 9 的应用启动速度显著提升。
  2. 内存管理改进:优化了垃圾回收机制,减少了内存碎片和 GC 暂停时间。
  3. 并发性能提升:改进了线程池和同步原语,提高了多线程应用的性能。

更多详细信息请查看 dotnet 官方文档:

  • https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-9/overview

Dapr 从 CNCF 毕业

Dapr 是一个可移植的分布式应用运行时,提供集成 API,帮助开发者构建可靠和安全的分布式应用,提升生产力 20-40%

Dapr2019 年由微软发布,并于 202111 月正式加入 CNCF。截至 20241113 日,Dapr 已正式从 CNCF 毕业。它支持多种云原生技术,广泛应用于 Grafana、FICO、HDFC 银行 等企业。

  • 相关文章:https://developer.aliyun.com/article/1636736

新特性

  1. 增强的状态管理:支持更多的状态存储后端,包括 Redis、MongoDB、Cosmos DB 等。
  2. 改进的发布/订阅模型:支持更复杂的事件路由和过滤规则。
  3. 新的绑定组件:增加了对更多外部系统的支持,如 AWS S3、Azure Blob Storage 等。
  4. 安全性增强:引入了更强大的身份验证和授权机制,支持 OAuth 2.0OpenID Connect
  5. 改进的可观测性:提供了更详细的指标和日志,便于监控和调试。

主要功能

  1. 服务调用:提供一致的服务调用接口,支持多种协议和传输方式。
  2. 状态管理:支持分布式状态存储,确保数据的一致性和可靠性。
  3. 发布/订阅:实现消息队列和事件驱动架构,支持多种消息中间件。
  4. 绑定:连接外部系统和服务,简化集成工作。
  5. 安全:提供身份验证和授权机制,保护应用的安全性。

更多详细信息请查看 Dapr 官方文档:

  • https://dapr.io/
  • https://cn.dapr.io/

高性能云原生应用开发最佳实践

技术栈组合:.NET 9 Aspire + Dapr + Podman + Kubernetes/Containerd + Ubuntu Server

环境准备

  1. 操作系统:选择 Ubuntu Server 24.04 LTS 作为基础操作系统。
  2. Kubernetes:安装最新版本的 Kubernetes 1.31.0 集群。
  3. Containerd:安装 Containerd 1.7.14 作为容器运行时。
  4. Podman:安装 Podman 5.3.0-rc3 以支持容器化应用。
  5. .NET SDK:安装 .NET 9 SDK 9.0.0

安装 Podman

Ubuntu 24.04 LTS 上安装 Podman 5.3.0-rc3

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:projectatomic/ppa
sudo apt update
sudo apt install podman

安装 Containerd

Ubuntu 24.04 LTS 上安装 Containerd 1.7.14

1、安装依赖项:

sudo apt update
sudo apt install -y curl gnupg2 software-properties-common

2、添加 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/containerd-archive-keyring.gpg

3、添加仓库:

echo "deb [signed-by=/usr/share/keyrings/containerd-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/containerd.list > /dev/null

4、安装 Containerd:

sudo apt update
sudo apt install -y containerd.io

5、配置 Containerd:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

安装 Kubernetes

Ubuntu 24.04 LTS 上安装 Kubernetes 1.31.0

1、安装 kubeadm、kubelet 和 kubectl:

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet=1.31.0-00 kubeadm=1.31.0-00 kubectl=1.31.0-00
sudo apt-mark hold kubelet kubeadm kubectl

2、初始化 Kubernetes 集群:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///var/run/containerd/containerd.sock

3、配置 kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4、安装网络插件(例如 Flannel):

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Kubernetes(K8s) 环境中,CNI(Container Network Interface) 插件是用于管理容器网络的关键组件。以下是一些常见的 CNI 插件:

  • Flannel:这是最常用的 K8s 网络插件之一,使用虚拟网络技术实现容器间通信,支持多种网络后端,适用于基础的网络通信需求。
  • Calico:基于 BGP 的网络插件,提供高级网络策略和安全性,适用于需要复杂网络路由或跨集群通信的场景。
  • Canal:结合了 FlannelCalico 的特点,既提供简单易用的通信功能,又具备网络策略和安全性功能。
  • Weave Net:轻量级网络插件,使用虚拟网络技术为容器提供 IP 地址,支持多种网络后端,适用于动态环境或快速部署。
  • Cilium:基于 eBPF 技术的网络插件,提供高度定制化和高性能网络功能,适用于需要深入控制网络流量和安全策略的场景。
  • Contiv:基于 SDN 技术的网络插件,提供全面且强大的网络功能,适用于构建复杂网络架构。
  • Antrea:基于 OVS 技术的网络插件,支持容器间通信、网络策略和安全性,适用于高性能和可扩展性的网络环境。
  • SR-IOV CNI 插件:允许 Kubernetes 容器直接访问网络硬件,提高性能,适用于需要高性能网络功能的场景。
  • Multus CNI 插件:允许 Kubernetes Pod 具有多个网络接口,并支持与其他 CNI 插件(如 Flannel、Calico 等)一起使用。
  • Amazon VPC CNI 插件:这是 Amazon EKS 集群唯一支持的 CNI 插件,用于管理分配给 Pods 的网络接口。

这些插件各有特点和适用场景,选择合适的 CNI 插件时应考虑网络需求、易用性、兼容性、社区支持和成本等因素。

应用开发

关于 .NET Aspire

.NET Aspire

关于 .NET Aspire 推荐学习资料:

  1. .NET Aspire 概述,https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview
  2. 使用 .NET Aspire 构建分布式应用,https://learn.microsoft.com/zh-cn/training/paths/dotnet-aspire/

1、创建 .NET 9 Aspire 项目

  • 1.1 安装 .NET 9 SDK

首先,确保已经安装了 .NET 9 SDK。可以在 Ubuntu 24.04 LTS 上使用以下命令安装:

sudo apt update
sudo apt install -y wget
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
sudo bash ./dotnet-install.sh --channel 9.0

这里介绍个 .net cli 命令工具 => dotnet workload

# 安装 aspire
dotnet workload install aspire

dotnet workload 命令是用于管理 .NET SDK 工作负载的工具。工作负载(Workload)是指 .NET SDK 支持开发的各种应用类型,例如 .NET MAUI、Blazor WebAssembly 等。这些工作负载可以通过命令行工具进行安装、卸载、更新和修复。

以下是 dotnet workload 命令的详细解释:

  • dotnet workload search:搜索可用的工作负载。此命令可以帮助用户找到当前可用的工作负载列表。
  • dotnet workload install:安装指定的工作负载。例如,可以使用 dotnet workload install maui 来安装 .NET MAUI 工作负载。
  • dotnet workload uninstall:卸载指定的工作负载。例如,使用 dotnet workload uninstall maui 可以卸载已安装的 .NET MAUI 工作负载。
  • dotnet workload update:更新已安装的工作负载到最新版本。此命令会从 NuGet 下载最新的工作负载清单,并更新所有已安装的工作负载。
  • dotnet workload list:列出已安装的工作负载。此命令会显示当前系统中已安装的所有工作负载及其版本信息。
  • dotnet workload repair:重新安装所有已安装的工作负载以修复损坏的安装。此命令可以用于修复因网络连接或其他原因导致的安装问题。
  • dotnet workload restore:还原项目所需的工作负载。此命令会根据项目文件(如 .csproj)中的要求,从互联网或本地缓存中下载并安装缺失的工作负载组件。
  • dotnet workload clean:清理可能由多个 .NET SDKVisual Studio 更新留下的孤立工作负载包。此命令有两种模式:一种是清理孤立包,另一种是更积极地清理所有非 Visual Studio 的工作负载包。

通过这些命令,开发者可以方便地管理工作负载,确保开发环境的完整性和一致性。

.NET9 SDK 下载地址:

  • https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0
  • 1.2 创建 .NET 9 Aspire 项目

使用 .NET 9 Aspire 创建一个新的项目。Aspire.NET 8 中的一个新特性,在 .NET9 进一步增强,旨在简化云原生应用的开发和部署。

# 1. 创建项目目录:
mkdir MyCloudNativeApp
cd MyCloudNativeApp

# 2. 初始化 Aspire 示例项目:
dotnet new aspire-starter -n MyCloudNativeApp
cd MyCloudNativeApp

# 3. 查看项目结构:
MyCloudNativeApp/
│
├─MyCloudNativeApp.sln
│  
├─MyCloudNativeApp.ApiService
│  │  appsettings.Development.json
│  │  appsettings.json
│  │  MyCloudNativeApp.ApiService.csproj
│  │  MyCloudNativeApp.ApiService.csproj.user
│  │  Program.cs
│  │  
│  └─Properties
│          launchSettings.json
│          
├─MyCloudNativeApp.AppHost
│  │  appsettings.Development.json
│  │  appsettings.json
│  │  MyCloudNativeApp.AppHost.csproj
│  │  Program.cs
│  │  
│  └─Properties
│          launchSettings.json
│          
├─MyCloudNativeApp.ServiceDefaults
│  │  Extensions.cs
│  │  MyCloudNativeApp.ServiceDefaults.csproj
│  
└─MyCloudNativeApp.Web
    │  appsettings.Development.json
    │  appsettings.json
    │  MyCloudNativeApp.Web.csproj
    │  MyCloudNativeApp.Web.csproj.user
    │  Program.cs
    │  WeatherApiClient.cs
    │  
    ├─Components
    │  │  App.razor
    │  │  Routes.razor
    │  │  _Imports.razor
    │  │  
    │  ├─Layout
    │  │      MainLayout.razor
    │  │      MainLayout.razor.css
    │  │      NavMenu.razor
    │  │      NavMenu.razor.css
    │  │      
    │  └─Pages
    │          Counter.razor
    │          Error.razor
    │          Home.razor
    │          Weather.razor
    │          
    ├─Properties
    │      launchSettings.json
    │      
    └─wwwroot
        │  app.css
        │  favicon.png
        │  
        └─bootstrap
                bootstrap.min.css
                bootstrap.min.css.map

运行项目:

dotnet run --project MyCloudNativeApp.AppHost

输出信息:

dotnet run

  • 查看 .net aspire 页面:

.net aspire

  • 查看日志

asp.net core9 miniapi
blazor

  • backend for asp.net core9 miniapi

backend for asp.net core9 miniapi

  • frontend for .net9 blazor

frontend for .net9 blazor

  • 1.3 编写应用逻辑

1.3.1 、MyCloudNativeApp.ApiService 项目

MyCloudNativeApp.ApiService/Program.cs 中编写应用逻辑。以下是一个使用 MiniAPI 实现简单的 Web API 示例:

var builder = WebApplication.CreateBuilder(args);

// Add service defaults & Aspire components.
builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddProblemDetails();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseExceptionHandler();

var summaries = new[]
{
   
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapGet("/weatherforecast", () =>
{
   
    var forecast = Enumerable.Range(1, 5).Select(index =>
        new WeatherForecast
        (
            DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            Random.Shared.Next(-20, 55),
            summaries[Random.Shared.Next(summaries.Length)]
        )).ToArray();
    return forecast;
});

app.MapDefaultEndpoints();

app.Run();

record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
   
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

.NET9 剔除 Swagger 支持 (Swashbuckle)相关文章:

  • https://blog.csdn.net/ChaITSimpleLove/article/details/143276685

appsettings.json 文件配置信息:

{
   
  "Logging": {
   
    "LogLevel": {
   
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

1.3.2 、MyCloudNativeApp.AppHost 项目

MyCloudNativeApp.AppHost/Program.cs 中代码如下:

var builder = DistributedApplication.CreateBuilder(args);

var apiService = builder.AddProject<Projects.MyCloudNativeApp_ApiService>("apiservice");

builder.AddProject<Projects.MyCloudNativeApp_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService);

builder.Build().Run();

appsettings.json 文件配置信息:

{
   
  "Logging": {
   
    "LogLevel": {
   
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Aspire.Hosting.Dcp": "Warning"
    }
  }
}

1.3.3 、MyCloudNativeApp.ServiceDefaults 项目

MyCloudNativeApp.ServiceDefaults/Extensions.cs 的代码如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

namespace Microsoft.Extensions.Hosting;

// Adds common .NET Aspire services: service discovery, resilience, health checks, and OpenTelemetry.
// This project should be referenced by each service project in your solution.
// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults
public static class Extensions
{
   
    public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder)
    {
   
        builder.ConfigureOpenTelemetry();

        builder.AddDefaultHealthChecks();

        builder.Services.AddServiceDiscovery();

        builder.Services.ConfigureHttpClientDefaults(http =>
        {
   
            // Turn on resilience by default
            http.AddStandardResilienceHandler();

            // Turn on service discovery by default
            http.AddServiceDiscovery();
        });

        return builder;
    }

    public static IHostApplicationBuilder ConfigureOpenTelemetry(this IHostApplicationBuilder builder)
    {
   
        builder.Logging.AddOpenTelemetry(logging =>
        {
   
            logging.IncludeFormattedMessage = true;
            logging.IncludeScopes = true;
        });

        builder.Services.AddOpenTelemetry()
            .WithMetrics(metrics =>
            {
   
                metrics.AddAspNetCoreInstrumentation()
                    .AddHttpClientInstrumentation()
                    .AddRuntimeInstrumentation();
            })
            .WithTracing(tracing =>
            {
   
                tracing.AddAspNetCoreInstrumentation()
                    // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package)
                    //.AddGrpcClientInstrumentation()
                    .AddHttpClientInstrumentation();
            });

        builder.AddOpenTelemetryExporters();

        return builder;
    }

    private static IHostApplicationBuilder AddOpenTelemetryExporters(this IHostApplicationBuilder builder)
    {
   
        var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);

        if (useOtlpExporter)
        {
   
            builder.Services.AddOpenTelemetry().UseOtlpExporter();
        }

        // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package)
        //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
        //{
   
        //    builder.Services.AddOpenTelemetry()
        //       .UseAzureMonitor();
        //}

        return builder;
    }

    public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)
    {
   
        builder.Services.AddHealthChecks()
            // Add a default liveness check to ensure app is responsive
            .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);

        return builder;
    }

    public static WebApplication MapDefaultEndpoints(this WebApplication app)
    {
   
        // Adding health checks endpoints to applications in non-development environments has security implications.
        // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments.
        if (app.Environment.IsDevelopment())
        {
   
            // All health checks must pass for app to be considered ready to accept traffic after starting
            app.MapHealthChecks("/health");

            // Only health checks tagged with the "live" tag must pass for app to be considered alive
            app.MapHealthChecks("/alive", new HealthCheckOptions
            {
   
                Predicate = r => r.Tags.Contains("live")
            });
        }

        return app;
    }
}

1.3.4 、MyCloudNativeApp.Web 项目

这是一个使用 .net9 blazor webapp 构建的 web 前端项目,结构如下:

在这里插入图片描述

以上就是基于 .net 9 aspire-starter 模板示例的完整项目结构说明。

2、集成 Dapr

在项目中集成 Dapr:

dapr init
dapr run --app-id myapp --app-port 5000 dotnet run

3、使用 Podman 构建和运行容器

创建 Dockerfile 文件:

FROM mcr.microsoft.com/dotnet/aspnet:9.0-alpine
WORKDIR /app
COPY bin/Release/net9.0/publish .
ENTRYPOINT ["dotnet", "MyCloudNativeApp.dll"]

构建并运行容器:

podman build -t myapp:latest ./
podman run -d -p 5000:5000 myapp:latest

4、配置 Kubernetes

创建 Kubernetes 部署文件 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myregistry/myapp:latest
        ports:
        - containerPort: 5000
        env:
        - name: DAPR_HTTP_PORT
          value: "3500"
        - name: DAPR_GRPC_PORT
          value: "50001"

创建 Kubernetes 服务文件 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
  type: LoadBalancer

5、部署应用

将应用部署到 Kubernetes 集群:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

性能优化

  1. 水平扩展:利用 Kubernetes 的自动缩放功能,根据负载动态调整副本数量。
  2. 资源限制:为每个容器设置合理的资源限制,避免资源争用。
  3. 缓存优化:使用 Dapr 的状态管理功能,缓存常用数据,减少数据库访问次数。
  4. 网络优化:配置 Kubernetes 的网络策略,优化网络通信性能。

安全措施

  1. 身份验证:使用 Dapr 的身份验证和授权机制,保护应用的安全性。
  2. 加密传输:启用 HTTPS,确保数据传输的安全性。
  3. 安全扫描:定期进行安全扫描,发现并修复潜在的安全漏洞。

结论

.NET 9 正式版的发布和 DaprCNCF 毕业,标志着云原生技术的进一步成熟。通过结合 .NET 9 Aspire、Dapr、Kubernetes 1.31.0、Ubuntu Server 24.04 LTS、Containerd 1.7.14 和 Podman 5.3.0-rc3,开发者可以构建高效、可靠、安全的云原生应用。希望本文的介绍和最佳实践能够帮助读者更好地理解和应用这些先进技术。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
125 10
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
157 3
|
21天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
43 5
|
21天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
1月前
|
人工智能 Cloud Native 安全
从云原生到 AI 原生,网关的发展趋势和最佳实践
本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三)在云栖大会的精彩分享。讲师深入浅出的分享了软件架构演进过程中,网关所扮演的各类角色,AI 应用的流量新特征对软件架构和网关所提出的新诉求,以及基于阿里自身实践所带来的开源贡献和商业能力。
152 11
|
1月前
|
存储 运维 监控
云原生应用的可观察性:理解、实现与最佳实践
【10月更文挑战第10天】随着云原生技术的发展,可观察性成为确保应用性能和稳定性的重要因素。本文探讨了云原生应用可观察性的概念、实现方法及最佳实践,包括监控、日志记录和分布式追踪的核心组件,以及如何通过选择合适的工具和策略来提升应用的可观察性。
|
2月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
399 17
|
1月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
3月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
161 0
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7