1 YARP

YARP是一个项目,用于创建反向代理服务器。它开始于我们注意到来自微软内部团队的一系列问题。他们要么为其服务构建反向代理,要么询问 API 和用于构建 API 的技术。因此我们决定让他们聚在一起开发一个通用解决方案,该解决方案形成了YARP。

YARP是一个反向代理工具包,用于使用 ASP.NET 和 .NET 中的基础设施在 .NET 中构建代理服务器。YARP 的主要区别是,它被设计为易于自定义和调整,以满足不同方案的特定需求。YARP 插入ASP.NET管道以处理传入请求,然后它拥有自己的子管道,用于执行将请求代理到后端服务器的步骤。客户可以添加其他module,或根据需要更换常备module。

随着其开发已基本到位,我们制作了 YARP 的第一个正式版本(Preview 1),以便更好地协作并获得反馈。

2 Preview 1 是什么

    • 核心代理的基础结构
    • 基于配置的路由定义
    • 扩展性的管道模型
    • Forwarded标头(硬编码)
    • 目标 .NET Core 3.1 和 .NET Core 5

3 Preview 1 不包括

    • 会话亲和性(又称会话保持)
    • Forwarded标头(可配置)
    • 基于代码的路由定义和预请求路由
    • 指标和日志
    • 性能调整
    • 连接筛选

4 快速开始

Step 01 下载.net framework

YARP 适用于 .NET Core 3.1 或 .NET 5 Preview 4(或更高版本)。

Step 02 创建一个ASP.NET Core项目

Step 03 打开项目,添加引用,确保其包含

<PropertyGroup>
<TargetFramework>netcoreapp5.</TargetFramework>
</PropertyGroup>

  和

<ItemGroup>
<PackageReference Include="Microsoft.ReverseProxy" Version="1.0.0-preview.1.*" />
</ItemGroup>

Step 04 Startup.cs

  YARP 当前使用配置文件来定义代理的路由和终结点。在ConfigureServices方法中加载。

public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

  Configure方法定义ASP.NET的请求处理管道。反向代理插入到ASP.NET的终结点路由,然后具有其自己的代理子管道。在这里,可以添加代理管道模块(如负载均衡)来自定义请求的处理。

/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
public void Configure(IApplicationBuilder app)
{
app.UseHttpsRedirection(); app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapReverseProxy(proxyPipeline =>
{
proxyPipeline.UseProxyLoadBalancing();
});
});
}

Step 05 配置

  YARP 的配置定义在appsettings.json中:

"ReverseProxy": {
"Routes": [
{
"RouteId": "app1",
"BackendId": "backend1",
"Match": {
"Methods": [ "GET", "POST" ],
"Host": "localhost",
"Path": "/app1/"
}
},
{
"RouteId": "route2",
"BackendId": "backend2",
"Match": {
"Host": "localhost"
}
}
],
"Backends": {
"backend1": {
"LoadBalancing": {
"Mode": "Random"
},
"Destinations": {
"backend1_destination1": {
"Address": "https://example.com:10000/"
},
"backend1_destination2": {
"Address": "http://example.com:10001/"
}
}
},
"backend2": {
"Destinations": {
"backend2_destination1": {
"Address": "https://example.com:10002/"
}
}
}
}
}
    • Backends:请求可以路由到的服务器群集。
    • Destinations:是用于指标、日志记录和会话保持的标识符。
    • Address:URL前缀(基地址)
    • Routes:根据请求的各个方面(如主机名、路径、方法、请求标头等)将传入请求映射到后端群集。路由是有序的,因此,需要首先定义 app1 路由,因为 route2 将作为尚未匹配的所有路径的 catchall。

  好啦,先介绍到这里。

原文链接

  https://devblogs.microsoft.com/dotnet/introducing-yarp-preview-1/?utm_source=vs_developer_news&utm_medium=referral

【译】Introducing YARP Preview 1的更多相关文章

  1. [译]Introducing ASP.NET vNext and MVC 6

    原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...

  2. [译]Introducing ASP.NET 5

    原文:http://weblogs.asp.net/scottgu/introducing-asp-net-5 ASP.NET 5预览版发布了, 可以在这下载最新的Visual Studio 2015 ...

  3. Introducing ASP.NET vNext and MVC 6

    [译]Introducing ASP.NET vNext and MVC 6 原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source ...

  4. 【译】Introducing “Web Live Preview”

    如果你开发的应用有 UI,你可能经历开发->编译->测试->修改->编译->测试的循环.根据所使用的框架或技术,有些可以改善这一流程,比如 edit-and-contin ...

  5. 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

      .NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...

  6. 【译】.NET Core 2.2 Preview 2 发布

    原文出自.Net Blog Announcing .NET Core 2.2 Preview 2 今天,我们宣布推出.NET Core 2.2 Preview 2.我们有很多重要改进要和你分享,而且我 ...

  7. 【译】宣告推出.NET Core 3.0 Preview 7(英雄的黎明)

    今天,我们宣布推出.NET Core 3.0 Preview 7.我们已经从创建新特性阶段过渡到了完善版本阶段.对于其余的预览版,我们将把重点放在质量(改进)上. 在Windows,macOS和Lin ...

  8. 【译】Announcing Entity Framework Core 5.0 Preview 5

    今天我们宣布EF Core 5.0发布第五个预览版. 1 先决条件 EF Core 5.0 的预览版要求  .NET Standard 2.1.这意味着: EF Core 5.0 在 .NET Cor ...

  9. 【译】ASP.NET Core updates in .NET 5 Preview 8

    .NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...

随机推荐

  1. ABAP基础1:概念

    包(Package)也称作开发类,是为了将程序等对象根据功能划分,进行区分和管理而导入的概念 每一个开发对象,如程序.类,都要隶属一个包,包一般隶属于某一个模块 每个包拥有一个CTS号,CTS号用于系 ...

  2. Java开发架构篇:领域驱动设计架构基于SpringCloud搭建微服务

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 微服务不是泥球小单体,而是具备更加清晰职责边界的完整一体的业务功能服务.领域驱动 ...

  3. JDK安装与配置环境变量

    1.JDK的安装 (1).为什么安装jdk? JDK是java软件开发包的简称,要想开发java程序就必须安装JDK.没有JDK的话,无法编译Java程序. (2).开始安装jdk 1.官网下载jdk ...

  4. POJ3255

    题目链接:http://poj.org/problem?id=3255 解题思路: 昨晚两点多睡不着翻起来刷<挑战>的题,结果遇到这道求次短路的题,一脸懵逼.想了半小时没什么思路就看他的解 ...

  5. 开箱即用,Knative 给您极致的容器 Serverless 体验

    作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本.结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大 ...

  6. vue中template的三种写法

    第一种(使用模板字符串)早期字符串拼接年代 <div id="app"></div> new Vue({ el: "#app", tem ...

  7. MySQL高可用篇之MHA集群

    1 准备工作 1.1 修改主机名 vim /etc/hosts # 添加对应主机 192.168.28.128 mha1 192.168.28.131 mha2 192.168.28.132 mha3 ...

  8. 获取MP4媒体文件时长

    由于之前上传MP4文件没有保存视频时长,现在有需要,所以只好写代码读取时长.找了几个发现是 c/c++ 实现,或者是借助 FFmpeg 实现. 一个偶然在 GitHub 上面发现一个 c 文件,由于获 ...

  9. 路由器硬改+刷OpenWrt+挂载摄像头+U盘

    标题: 路由器硬改+刷OpenWrt+挂载摄像头+U盘 作者: 梦幻之心星 347369787@QQ.com 标签: [路由器, OpenWrt, 摄像头, 固件] 目录: 路由器 日期: 2019- ...

  10. 01 . 消息队列之(Kafka+ZooKeeper)

    消息队列简介 什么是消息队列? 首先,我们来看看什么是消息队列,维基百科里的解释翻译过来如下: 队列提供了一种异步通信协议,这意味着消息的发送者和接受者不需要同时与消息保持联系,发送者发送的消息会存储 ...