【译】Introducing YARP Preview 1
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。
好啦,先介绍到这里。
原文链接
【译】Introducing YARP Preview 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 ...
- [译]Introducing ASP.NET 5
原文:http://weblogs.asp.net/scottgu/introducing-asp-net-5 ASP.NET 5预览版发布了, 可以在这下载最新的Visual Studio 2015 ...
- 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 ...
- 【译】Introducing “Web Live Preview”
如果你开发的应用有 UI,你可能经历开发->编译->测试->修改->编译->测试的循环.根据所使用的框架或技术,有些可以改善这一流程,比如 edit-and-contin ...
- 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...
- 【译】.NET Core 2.2 Preview 2 发布
原文出自.Net Blog Announcing .NET Core 2.2 Preview 2 今天,我们宣布推出.NET Core 2.2 Preview 2.我们有很多重要改进要和你分享,而且我 ...
- 【译】宣告推出.NET Core 3.0 Preview 7(英雄的黎明)
今天,我们宣布推出.NET Core 3.0 Preview 7.我们已经从创建新特性阶段过渡到了完善版本阶段.对于其余的预览版,我们将把重点放在质量(改进)上. 在Windows,macOS和Lin ...
- 【译】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 ...
- 【译】ASP.NET Core updates in .NET 5 Preview 8
.NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...
随机推荐
- DPDK Timer Library原理(学习笔记)
0 前置知识学习跳表(SkipList) 跳表应具有以下特征: 1)一个跳表应该有多个层(level)组成,通常是10-20层. 2)跳表的第0层包含所有的元素. 3)每一层都是一个有序的链表.层数越 ...
- 异步http接口调用库:httpx
谈到http接口调用,Requests大家并不陌生,例如,robotframework-requests.HttpRunner等HTTP接口测试库/框架都是基于它开发.这里将介绍另一款http接口测试 ...
- PG primary 和 slave 互换
http://blog.sina.com.cn/s/blog_544a710b0101a122.html http://blog.51cto.com/heyiyi/1898506 https://bl ...
- Java——DOS命令窗口用命令编译文件夹下所有.java文件
1.进入指定目录 cd 进入用户主目录 cd ~ 进入用户主目录 cd - 返回进入此目录之前所在的目录 cd .. 返回上级目录 cd\ 直接退回到当前盘根目录2. ...
- eclipse——Error exists in required project Proceed with launch?
运行java文件时报错: Error exists in required project Proceed with launch? 报错截图: 问题参生原因:开始Buildpath了一个jar ...
- get_client_ip()
get_client_ip()获取ip地址,在开启IPv6协议的主机上会全部返回0.0.0.0原因是他会把ipv6地址认为是非法地址而转换成0.0.0.0,而ipv4地址在ipv6主机上用get_cl ...
- 透过面试题掌握Redis【持续更新中】
本文已收录到1.1K Star的Github开源项目<面试指北>,想要了解更多内容,大家可以看一看这个项目,希望大家帮忙给一个star,谢谢了! <面试指北>项目地址:http ...
- 如何下载xshell家庭版
xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议,加上友好炫酷的操作界面,深受广大码农的喜爱,是后端开发程序猿操 ...
- 4 CSS文本属性
CSStext(文本)属性可定义文本外观,比如文本颜色,对齐文本,装饰文本,文本缩进,行间距等 4.1文本颜色 color属性用于定义文本颜色. div { color: red; } 颜色表示方法: ...
- [ES6系列-01]Class:面向对象的“新仇旧恨”
[原创]CoderPower 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 这是公众号(码路工人有力量)开通后的第二篇,写得还是有待改进吧.这次准备写一个关于ES6基础的短文系列,努力尽快 ...