您当前的位置: 首页 >  ar

寒冰屋

暂无认证

  • 2浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

宣布YARP 1.0发布

寒冰屋 发布时间:2022-05-14 22:46:40 ,浏览量:2

目录

什么是反向代理?

介绍YARP

入门

YARP 1.0中有什么

配置

路由和入站连接

代理和出站连接

诊断

一般的

文档

性能

开源

支持

下一步是什么

什么是反向代理?

反向代理用于侦听传入的HTTP请求并根据请求的内容将请求转发到适当的服务器。与在第4层(TCP/IP)起作用的典型防火墙/路由器不同,反向代理通常在第7层工作,因此它们理解http并基于http字段工作。

当YARP代理请求时,它会处理来自客户端的HTTP连接,然后创建自己到目标服务器的连接,双方都可以从连接池中受益。

使用反向代理有很多优点:

  • 它充当站点或一组服务的公共端点,使暴露的url空间独立于实际实现
  • 将调用转发到后端服务器以执行实际工作,平衡它们之间的负载
  • 可以从后端服务器卸载工作,例如TLS加密、Auth、压缩、缓存
介绍YARP

YARP是一个提供基于.NET的开源反向代理服务器的项目。它始于大约两年前,当时我们注意到微软团队提出的一种问题模式,这些团队要么为他们的服务构建反向代理,要么一直在询问构建一个反向代理的API和技术。我们决定让他们一起研究一个通用的解决方案,这就是YARP。

YARP是一个反向代理工具包,用于使用ASP.NET和.NET的基础结构在.NET中构建快速代理服务器。YARP的关键区别在于它的设计易于定制和调整,以匹配每个部署场景的特定需求。

我们在与创建Microsoft服务的团队交谈时发现,每项服务都略微偏离常规,他们都在构建自己的解决方案,或者尝试自定义第三方代理。虽然他们有HTTP/1.1的解决方案,但他们需要HTTP/2——通常用于gRPC,而HTTP/2使用二进制帧格式,实现起来要复杂得多。YARP使开发人员能够完全控制,同时利用经过验证的ASP.NET Core和.NET功能集,以及C#(或其他.NET语言)的生产力。

YARP插入ASP.NET作为处理传入请求的中间件,YARP提供了两个主要的使用和定制路径:

  • 作为一个全功能的代理——YARP使用配置来定义一组基于URL模式的路由,这些路由映射到目标服务器的集群,集群中的每个目标都应该能够处理集群映射到的路由的请求。目标列表根据会话亲和性和服务器运行状况进行过滤,然后使用负载平衡算法在剩余目标之间进行选择。其中的每个部分都可以通过配置进行自定义,客户可以根据需要添加额外的模块或替换库存模块。配置系统是可扩展的,因此可以从诸如Service Fabric之类的源中提取路由和目标信息。
  • 或者,对于高度自定义的环境,可以直接调用YARP请求转发器,绕过路由、负载平衡模块等。例如,这就是Azure应用服务使用YARP将请求路由到特定实例的方式,实例所在的位置按需旋转。

这些甚至可以在同一个进程中一起使用,根据路由在它们之间切换。

入门

与作为可以扩展的可执行文件提供的其他代理不同,YARP反转了模型。您使用调用YARP的模板创建代理,这样可以更轻松地将您自己的自定义和功能添加到YARP。

以下示例基于.NET 6的新简化模板。示例适用于.NET Core 3.1和.NET 5。

1、如果尚未从https://dotnet.microsoft.com/download安装,请安装.NET 6

2、使用创建一个新的Web项目

dotnet new web --name MyYarpProxy

3、添加对YARP nuget包的引用:

dotnet add package MyYarpProxy Yarp.ReverseProxy 

4、将program.cs中的代码替换为:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.MapReverseProxy();

app.Run();

5、将appsettings.json中的配置文件替换为:

{
    "Urls": "http://localhost:5000;https://localhost:5001",
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*",
    "ReverseProxy": {
        "Routes": {
            "minimumroute": {
                "ClusterId": "minimumcluster",
                "Match": {
                    "Path": "{**catch-all}"
                }
            }
        },

        "Clusters": {
            "minimumcluster": {
                "Destinations": {
                    "httpbin.org": {
                        "Address": "https://httpbin.org/"
                    }
                }
            }
        }
    }
}

这将创建一个代理来监听http://localhost:5000和https://localhost:5001并将任何请求路由到https://httpbin.org(一个用于http调试的有用站点)。通过配置添加。

YARP 1.0中有什么

此YARP 1.0版本包括以下功能:

配置
  • YARP配置定义了路由和目的地。它可以通过以下方式提供:
    • 静态配置文件,具有动态更新的文件更改检测
    • 与其他来源接口的编程配置可扩展性
  • 对于超大规模托管,路由可以是完全动态的,由应用程序代码确定,并由YARP根据每个请求进行处理
路由和入站连接
  • YARP可以基于SNI/Host的多个站点和路由
  • 路由可以基于请求URL和标头值
  • 主动和被动健康检查以确认目的地的可用性,并过滤掉不良条目
  • 如果需要,Session Affinity会将后续请求路由到同一目的地
  • 用于跨目的地负载平衡的多种算法
  • 特定路由的身份验证、授权和CORS
代理和出站连接
  • 传入的请求URL可以在传递到目的地之前进行转换
  • 可以转换请求和响应标头
  • 可以转换Http方法(例如POST到PUT)
  • 到目的地的出站http连接是可配置的
  • 代理添加与请求转发相关的标准标头
  • gRPC和Web套接字流量,包括流式传输
诊断
  • 监控性能的指标
  • 记录以详细跟踪每个请求
一般的
  • 代理具有云规模性能
  • 文档
  • 易于扩展——客户可以添加中间件来自定义代理功能,例如路由、标头操作
  • 支持.NET Core 3.1、.NET 5和.NET 6
文档

YARP文档。

性能

代理的性能将取决于许多因素:

  • 客户端对代理使用的http版本
  • 目标代理使用的http版本
  • 是否使用TLS加密
  • 请求/响应标头和内容有效负载的大小

我们有一组每天针对YARP和其他代理服务器运行的基准。这是在实验室中使用为测量TechEmpower基准而创建的“citrine”硬件定义进行测量的。结果使用PowerBI仪表板呈现,可用于与其他代理进行比较。例如,将YARP和Envoy的(传入传出协议)http-http1.1和https-https1.1与21年10月的结果进行比较,如下所示:

可以在Microsoft Power BI找到仪表板。在那里,页面底部是一个用于选择页面的小部件。代理结果在第16页。

提示:点击文本“1 of 21”将弹出一个页面菜单,其中“代理”可以直接选择。

开源

YARP正在作为一个开源项目进行开发和交付。它托管在https://github.com/microsoft/reverse-proxy的github上。我们欢迎在回购中的贡献、问题和讨论。

支持

YARP支持由产品团队(从事YARP工作的工程师)提供,该团队由ASP.NET和核心库网络团队的成员组成。我们不提供24/7全天候支持或“随叫随到”,但由于我们的团队成员位于布拉格和雷德蒙德,因此我们通常具有良好的时区覆盖率。应使用问题模板在github中报告错误,通常会在24小时内回复。如果您发现安全问题,我们会要求您通过Microsoft安全响应中心(MSRC)进行报告。

我们将针对安全性或其他重大问题提供1.0服务。未来版本将考虑新功能。我们预计将在未来几个月内开始发布下一个版本的预览版本。

下一步是什么

反向代理的工作将继续。我们在列表中为下一个版本工作的项目包括:

  • 支持HTTP/3 –初步测试表明它大部分都可以工作,但我们希望在YARP #1208中有一个可靠的实现
  • 更多性能优化——我们将再次推动性能,并使用YARP将额外的性能特性引入.NET
  • 使用LLHTTP提供对出站连接的更多控制和更有效的标头处理。LLHTTP是一个实验,旨在开发比HttpClient更低级别的HTTP API,以更好地控制HTTP请求的发出和处理方式。
  • 支持Service Fabric – YARP的早期预览版包括一个用于Service Fabric集成的模块。这对于使用Service Fabric的站点典型的大规模站点部署来说是不够的。我们正在与SF团队成员合作,实施更强大和可扩展的解决方案,用于根据SF数据动态配置代理#257
  • @jkotalik为与Kubernetes集成编写了一个原型实现。从事YARP工作的Microsoft团队成员不是k8s部署方面的专家,因此我们正在与社区成员合作以进一步开发此集成。#200

https://devblogs.microsoft.com/dotnet/announcing-yarp-1-0-release/

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0504s