本文讨论了微软的反向代理——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初体验的更多相关文章

  1. 微软最新设计Fluent Design System初体验

    微软最新设计Fluent Design System初体验 本文图片不全!建议移步知乎专栏查看!!! https://zhuanlan.zhihu.com/p/30582886 原创 2017-11- ...

  2. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  3. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  4. Linux之初体验

    预备作业03--我的Linux初体验 学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 一开始以为这个项目很简单,以往也在自己的笔记本上看教程安装过软件, ...

  5. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

    转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...

  6. Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...

  7. .net core安装及初体验

    .net core安装及初体验 .net core 作为微软的新一代技术,在开发跨平台.微服务等方面有很大的优势,也更贴近现代的编码习惯.在2.0版发布很久以后,近期终于决定进行学习和体验. 安装 作 ...

  8. MEF 插件式开发之 DotNetCore 初体验

    背景叙述 在传统的基于 .Net Framework 框架下进行的 MEF 开发,大多是使用 MEF 1,对应的命名空间是 System.ComponentModel.Composition.在 Do ...

  9. 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)

    数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...

随机推荐

  1. 代码审计学习01-in_array() 函数缺陷

    一.开始代码审计之旅 01 从今天起,学习代码审计了,这篇文章就叫代码审计01吧,题目来自 PHP SECURITY CALENDAR 2017 的第一题,结合 红日安全 写的文章,开始吧. 二.先看 ...

  2. N皇后解法以及位运算优化

    N皇后解法以及位运算优化 观察棋盘,要求皇后之间不能处在同行同列同一条斜线,求使得每行都有一个皇后的放置方法共有多少种. 每尝试放置一个皇后,都可以把该位置所在的行.列标号用一个数组标记,含义表示该行 ...

  3. c语言实现n!算法

    最近一面学习数据结构,一面在做些c语言的题目.这个题目前些天碰到,和同学讨论了下.于是就用c语言实现n!(n=10000) 1 #include<stdio.h> 2 #define MA ...

  4. poj2001 Shortest Prefixes (trie树)

    Description A prefix of a string is a substring starting at the beginning of the given string. The p ...

  5. 2017, X Samara Regional Intercollegiate Programming Contest M. Last Man Standing (贪心,双指针)

    题意:有\(n\)个吃鸡玩家,在某个时间段给你他们每个人的杀敌数,判断数据是否合法,并输出每个人对应的杀敌情况. 题解:刚开始写的是直接暴力枚举,向后去找并且标记,然后存到vector最后输出,结果一 ...

  6. Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)

    题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...

  7. WPF Animation For SizeChanged Of UIElement

    效果图 学到一个新词: Show me the money 背景 这几天查资料,看到 CodeProject 上面的一篇 Post <Advanced Custom TreeView Layou ...

  8. LINUX - 随机数

    #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...

  9. VMware虚拟化与Kubernetes(K8s)类比阐述-适合VMware用户

    概述 容器技术是最近几年非常热门的技术,它似乎就是为云端的应用量身定制的,所以它也被贴上了云原生应用 (Cloud Native Application) 技术的标签.目前最为流行的容器管理调度平台是 ...

  10. 卸载vue2.9.6版本,安装新版本

    1.检查vue安装目录(cmd中输入) where vue 2.删除目录中的关于vue的文件(可以将文件按时间排序,找到vue相关的文件删除) 3.检查vue是否还能找到 4.安装新版本的vue np ...