码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Nginx被它打败了?


    Nginx被它打败了?

    我们经常使用Nginx作为我们系统的代理,通常情况下是完全够用的,但是有时候业务的复杂性,我们也需要使用在网关中去代理中做一些业务,这个时候Nginx也可以使用lua脚本扩展,但是并非所有人都会lua,比如我这个.NET开发,这个时候我看到了微软开发的YARP这个SDK,果然还是微软给力,将这么牛逼的东西封装成SDK,供我们使用,下面我们对于Nginx和Yarp进行简单的性能测试。

    部署测试环境

    我们提供nginx环境,proxy_pass代理的是我们的一个Gitea。

    server {
        listen 80;
        server_name localhost;
        location / {
    	    add_header 'Access-Control-Allow-Origin' 'http://localhost:8088';
    	    add_header 'Cache-Control' 'public, max-age=604800';
    	    add_header 'Access-Control-Allow-Credentials' 'true';
    	    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    	    proxy_pass http://token-ai.cn:1001/; 
    	  
        }
    }
    
    

    docker-compose.yml文件,我们使用默认的nginx镜像,然后映射我们的端口,然后执行compose文件

    docker compose up -d
    
    version: "2.1"
    services:
      nginx:
        image: nginx
        restart: always
        ports:
          - 12001:80
        volumes:
          - ./conf.d/:/etc/nginx/conf.d/
    
    

    下面我们构建我们的yarp代码,我们使用.NET 8

    Progarm.cs文件

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddReverseProxy()
        .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
    var app = builder.Build();
    app.MapReverseProxy();
    await app.RunAsync();
    

    appsettings.json

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ReverseProxy": {
        "Routes": {
          "route1" : {
            "ClusterId": "cluster1",
            "Match": {
              "Path": "{**catch-all}"
            }
          }
        },
        "Clusters": {
          "cluster1": {
            "Destinations": {
              "destination1": {
                "Address": "http://token-ai.cn:1001/"
              }
            }
          }
        }
      }
    }
    

    然后我们构建我们的程序,依赖框架构建(服务器需要安装.NET 8)

    然后放置服务器当中,在执行之前给与可执行权限

    chmod +x Yarp
    

    然后执行我们的程序

    ./Yarp Urls="http://*:12002"
    

    压测结果

    nginx和yarp部署在同服务器下

    使用压测工具ApiPost(压测工具是基于GO实现的)

    压测条件: 并发数100,

    按压测时长:10s

    服务器配置

    Nginx压测:

    Yarp压测

    原接口压测:

    性能测试结果,由于nginx使用docker运行对比yarp确实基本上是打平,对于原接口压测性能俩个性能损耗基本忽略不计。

    Kestrel相关资料

    https://github.com/xljiulang/KestrelApp

    https://www.cnblogs.com/kewei/p/16955086.html

    根据大佬的描述Kestrel跟nginx是一样在传输层的。

    来着token的分享

    技术交流群:737776595

  • 相关阅读:
    【AI应用探讨】— Gemma2模型应用场景
    一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill
    基于云原生存储的容器持久化存储方案
    [附源码]java毕业设计基于ssm的电子网上商城
    如何在10亿级别用户中检查用户名是否存在?
    【C++】动态内存管理 ⑤ ( 基础数据类型数组 内存分析 | 类对象 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )
    网络安全副业如何年入数十万 (如何让你的副业超过主页)
    【笔试题】【day29】
    MySQL 啥时候用表锁,啥时候用行锁?
    Redis单线程还是多线程?
  • 原文地址:https://www.cnblogs.com/hejiale010426/p/17988975
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号