微软YARP初体验
本文讨论了微软的反向代理——YARP。YARP是一个可以创建高性能、高度可定制的反向代理服务器的类库。那么什么是反向代理呢?反向代理是位于用户与目标服务器之间的中间连接点。它接收初始的HTTP连接请求,并根据配置获取实际的服务器资源。反向代理充当了应用程序和用户之间的网关。
YARP是在使用ASP.NET和.NET(.NET Core 3.1和.NET 5.0)的基础架构构建的。YARP的主要优势在于,它可以通过.net代码轻松地进行定制和调整,以满足每个部署场景的特定需求。
YARP可以支持从appsettings.json或代码中进行配置。在这篇文章中,将探索如何在一个空的ASP.NET Core Web应用程序中使用YARP。该应用程序将包括两个ASP.NET Core MVC应用程序。首先,创建一个空的web应用程序。接下来你需要添加YARP包。可以用下面的命令来做到这一点:
-dotnet add package Microsoft.ReverseProxy -version 1.0.0-preview.9.21116.1
添加包之后,可以配置Startup 类来读取配置并启用反向代理。你可以这样做:
public class Startup{
public IConfiguration Configuration { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapReverseProxy();
});
}
}
在ConfigureServices方法中,添加了反向代理中间件,并从appsettings.json中读取配置。在Configure方法,添加映射反向代理配置的路由。接下来需要修改配置,可以通过编辑appsettings.json来完成。下面是反向代理配置:
"ReverseProxy": {
"Routes": [
{
"RouteId": "route1",
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
}
}
],
"Clusters": {
"cluster1": {
"Destinations": {
"cluster1/destination1": {
"Address": "https://localhost:11000"
},
"cluster1/destination2": {
"Address": "https://localhost:12000"
}
}
}
}
}
这个配置主要有两个元素——Routes和Clusters。你可以在Routes中配置终结点路由和url。Match元素为所有路由配置代理。RouteId是路由的唯一名称,ClusterId用于标识后端应用服务器或url。在Clusters中,配置了两个应用程序url。这是同一个应用程序运行在不同的端口上。现在可以运行代理应用程序和其他web应用程序了。其他的web应用程序,你可以在不同的端口运行以下命令:
-dotnet run --url="https://localhost:xxxxx"
现在,尝试浏览https://localhost:5001,将能够看到Web应用程序的索引页。如果你不断刷新,有时你还能看到第二个应用程序。默认情况下,YARP将使用PowerOfTwoChoices算法进行负载均衡,除此之外还有其他内置的策略,比如。
- First-选择第一个目标,不考虑负载。这对于双目标故障转移系统非常有用。
- Random-随机选择一个目标。
- PowerOfTwoChoices(默认)-选择两个随机的目标,然后从中选择一个更少请求的目标。这避免了LeastRequests的开销,也避免了Random选择繁忙目的地的最坏情况。
- RoundRobin -通过顺序循环选择一个目标。
- LeastRequests—所有目标中选择分配请求最少的目标。这需要检查所有目标。
要配置任何其他负载均衡策略,可以这样修改配置,这里使用的是RoundRobin算法:
"Clusters": {
"cluster1": {
"LoadBalancingPolicy": "RoundRobin",
"Destinations": {
"cluster1/destination1": {
"Address": "https://localhost:11000"
},
"cluster1/destination2": {
"Address": "https://localhost:12000"
}
}
}
}
YARP还通过检查目标应用程序的运行状况并基于路由请求来支持流量路由。如果你正在使用ASP.NET Core应用程序,可以启用ASP.NET Core运行状况检查选项。YARP带来了很多新特性和改进。
查看文档和主页(https://microsoft.github.io/reverse-proxy/?WT.mc_id=AZ-MVP-5002040),了解现有特性和如何使用它的更多细节。
原文链接:https://dotnetthoughts.net/getting-started-with-microsoft-yarp/

微软YARP初体验的更多相关文章
- 微软最新设计Fluent Design System初体验
微软最新设计Fluent Design System初体验 本文图片不全!建议移步知乎专栏查看!!! https://zhuanlan.zhihu.com/p/30582886 原创 2017-11- ...
- Microsoft IoT Starter Kit 开发初体验
1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...
- VSTO学习笔记(十五)Office 2013 初体验
原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...
- Linux之初体验
预备作业03--我的Linux初体验 学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 一开始以为这个项目很简单,以往也在自己的笔记本上看教程安装过软件, ...
- C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名
转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...
- Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储
在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...
- .net core安装及初体验
.net core安装及初体验 .net core 作为微软的新一代技术,在开发跨平台.微服务等方面有很大的优势,也更贴近现代的编码习惯.在2.0版发布很久以后,近期终于决定进行学习和体验. 安装 作 ...
- MEF 插件式开发之 DotNetCore 初体验
背景叙述 在传统的基于 .Net Framework 框架下进行的 MEF 开发,大多是使用 MEF 1,对应的命名空间是 System.ComponentModel.Composition.在 Do ...
- 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)
数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...
随机推荐
- 深入理解Java虚拟机读书笔记 -- Java内存区域
Graal VM: Run Programs Faster Anywhere. 跨语言全栈虚拟机,可以作为"任何语言"的运行平台使用. Java内存结构 程序计数器:线程私有,较小 ...
- Codeforces Round #626 (Div. 2) B. Count Subrectangles
题目连接:https://codeforces.com/contest/1323/problem/B 题意:给一个大小为n的a数组,一个大小为m的b数组,c数组是二维数组c[i][j]=a[i]*b[ ...
- hdu 01 Matrix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- Java 窗口 绘制图形 #3
写在前面: 高数下学到第二章,突发奇想要写一个程序画二元函数图像 思路分了三层: ①抽象层: 因变量z,自变量x.y,坐标原点x0.y0.z0 ②投影实现层: 屏幕投影坐标px.py,x轴与屏幕水平方 ...
- 母函数 <普通母函数(HDU - 1028 ) && 指数型母函数(hdu1521)>
给出我初学时看的文章:母函数(对于初学者的最容易理解的) 普通母函数--------->HDU - 1028 例题:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? ...
- Codeforces Round #668 (Div. 2) B. Array Cancellation (思维,贪心)
题意:有一个长度为\(n\)并且所有元素和为\(0\)的序列,你可以使\(a_{i}-1\)并且\(a_{j}+1\),如果\(i<j\),那么这步操作就是免费的,否则需要花费一次操作,问最少操 ...
- Educational Codeforces Round 91 (Rated for Div. 2) C. Create The Teams (模拟)
题意:有\(n\)个队员,每个队友都有一个能力值,构造队伍,要求队伍人数*队伍中最低能力值不小于\(x\),求能构造的最大队伍数. 题解:大水题,排个序,倒着模拟就行了. 代码: int t; int ...
- 记一次基于springboot+aop实现日志记录实战
1. 为什么要记录日志 好处: a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的. b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志.有了日志 ...
- 部署开源IP管理工具phpIPAM
一.安装环境程序: yum install httpd mariadb-server php php-cli php-gd php-common php-ldap php-pdo php-pear p ...
- Vue2.0 多种组件传值方法-不过如此的 Vuex
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14404397.html 在vue项目中了解组件间通讯很重要,也是最基础的面试题,可以 ...