【译】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 ...
随机推荐
- 【chrome 】退出paused in debugger模式 (原创)
下面失效 https://blog.csdn.net/gs6511/article/details/62418422
- vue项目中关闭eslint的方法
非常简单的操作方法!不用再去为了烦人的代码标准报错而苦恼了! 方法一:在项目根目录下增加 vue.config.js 文件 添加以下代码: module.exports = { lintOnSave: ...
- ExtJS动态隐藏Panel中按钮
1.直接隐藏 在bbar的按钮中直接加属性:hidden : true 属性,可隐藏:disabled : true 属性,可禁用 在columns列中直接加属性:hidden : true 属性,可 ...
- 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx
↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...
- 13.Java连接Redis_Jedis_事务
Jedis事务我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询 ...
- 【C++】运算符优先级和结合性
从上表可以大致总结这样一个规律: 优先级 运算符 高 初等运算符 | 单目运算符 | 算术运算符(先乘除,后加减) | 关系运算符 | 逻辑运算符(不包括!) | 条件运算符 ↓ 赋值运算符 低 逗号 ...
- [wordpress使用]002_主题
使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...
- [JavaWeb基础] 003.JAVA访问Mysql数据库
上面两篇讲解了简单的JSP + Servlet的搭建和请求,那么后面我们肯定要用到数据交互,也就是操纵数据库的数据,包括对数字的增加,删除,修改,查询.我们就用简单的MySql来做例子 我们需要引入驱 ...
- AtomicLong AtomicDouble AtomicInteger
Atomic+数字类型 大多都持有一个静态的Unsafe对象,通过unsafe 对属性在类对象的offset cas直接操作物理内存实现对数据的修改 public class AtomicLong e ...
- 【Gradle教程】Gradle 入门
本文为我在学习群内分享时在B站直播分享时的文档,直播间地址 http://live.bilibili.com/22263819 PS:问一下,Linux下有什么好用的会议软件么? 知道的朋友烦请评论告 ...