本文讨论了微软的反向代理——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. Kwp2000协议的应用(程序原理篇)

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 总述     接上篇文章Kwp2000协议的应用(硬件原理使用篇),本篇针对kwp2000协议标准的服务ID详细介绍,以及针对程序实现 ...

  2. Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析

    目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 ...

  3. Hive之insert和insert overwrite

    1. hive 表及数据准备 建表,并插入初始数据.向表中插入 hive> use test; hive> create table kwang_test (id int, name st ...

  4. MyBatis逆向工程生成dao层增删改查方法解释使用(转载)

    int countByExample(BUserExample example); //根据条件查询数量 /** * 示例 * public int countByExample() { * BUse ...

  5. [USACO12FEB]Symmetry

    传送门: https://www.luogu.com.cn/problem/P3046 https://ac.nowcoder.com/acm/contest/6306/G 题意 给定n个不同的点,求 ...

  6. AtCoder Beginner Contest 176

    比赛链接:https://atcoder.jp/contests/abc176 A - Takoyaki #include <bits/stdc++.h> using namespace ...

  7. Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)

    题目链接:https://codeforces.com/problemset/problem/1365/E 题意 有 $n$ 个元素,定义大小为 $k$ 的集合值为 $\sum2^i$,其中,若集合内 ...

  8. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  9. F - To Add Which?

    Description There is an integer sequence with N integers. You can use 1 unit of cost to increase any ...

  10. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛. A.Easy Equation (前缀和/差分)

    题意:RT,给你四个数\(a,b,c,d\),求\(x+y+z=k\)的方案数. 题解:我们可以先枚举\(x\)的值,然后\(x+y\)能取到的范围一定是\([x,x+b]\),也就是说这个区间内每个 ...