SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
https://mvc.tw
歡迎參加我們的每週四固定聚會
1
YARP - Yet Another Reverse Proxy
Dino Wang
https://mvc.tw
Who am I
Dino Wang
▪ Microsoft – Cloud Solution Architect
▪ twMVC – Co-funder
2
https://mvc.tw
Agenda
▪ Reverse Proxy overview
▪ What is YARP
▪ Why YARP?
▪ How to use YARP
▪ Use Cases
3
https://mvc.tw
歡迎參加我們的每週四固定聚會
4
Reverse Proxy overview
https://mvc.tw
A Reverse Proxy
5
反向代理 - 維基百科,自由的百科全書 (wikipedia.org)
https://mvc.tw
A Reverse Proxy
▪ 對客戶端隱藏伺服器(叢集)的 IP 位址
▪ 安全:作為應用層防火牆 (Web Application Firewall),為網站提供對基於 Web 的攻擊行
爲(例如 DoS/DDoS)的防護,更容易排查惡意軟體等
▪ 為後端伺服器(叢集)統一提供加密和 SSL 加速(如 SSL 終端代理)
▪ 負載均衡,若伺服器叢集中有負荷較高者,反向代理通過 URL 重寫,根據連線請求從負荷較
低者獲取與所需相同的資源或備援
▪ 對於靜態內容及短時間內有大量存取請求的動態內容提供快取服務
▪ 對一些內容進行壓縮,以節約頻寬或為網路頻寬不佳的網路提供服務
6
反向代理 - 維基百科,自由的百科全書 (wikipedia.org)
https://mvc.tw
Reverse Proxy and (Forward) Proxy
7
https://mvc.tw
Reverse Proxy – Load Balancing
8
https://mvc.tw
Reverse Proxy – Layers
9
https://mvc.tw
Reverse Proxy – Path Routing
10
https://mvc.tw
Reverse Proxy – Path Routing
11
https://mvc.tw
Featured Proxy
▪ Proxy Based Web Application Firewall
▪ API Gateway pattern
12
https://mvc.tw
歡迎參加我們的每週四固定聚會
13
Why YARP
https://mvc.tw
So.. 什麼是 YARP 對我來說有什麼意義
▪ Yet Another Reverse Proxy
▪ YARP 是一個反向代理工具包,運用 .NET (.NET Core) 建置高
效能反向代理
▪ YARP 提供了兩個主要使用和自訂的方向,
▪ 全功能代理
▪ 高度自定義的環境,用戶可以直接呼叫 YARP 請求轉送程式,繞過路由和負
載平衡等模組。開發者甚至可以在同一個程序中混合兩種方式,根據路由切
換。
14
https://mvc.tw
Why YARP?
▪ 也認識一下 Reverse Proxy 的強者們
▪ NGINX
▪ Envoy
15
https://mvc.tw
Reverse Proxy market share
16
Reverse proxies market share, websites and contacts - Wappalyzer
https://mvc.tw
Reverse Proxy market share
17
Envoy vs. Nginx feature and pricing comparison - Wappalyzer
https://mvc.tw
Web Server market share
18
Web Server technologies Web Usage Distribution (builtwith.com)
https://mvc.tw
19
20
網路迷因,僅供參考
21
Bill …
22
網路迷因,僅供參考
https://mvc.tw
Reverse Proxy 的強者們
NGINX
▪ Reverse Proxy
▪ Web Server
▪ 客製化
▪ NGINX + Lua
▪ NGINX + JavaScript
Envoy
▪ Reverse Proxy
▪ 客製化
▪ Lua and HTTP filter
23
24
https://mvc.tw
YARP
▪ Web Server (Kestrel) and Reverse Proxy
▪ Fully customizable in C#
25
https://mvc.tw
How to use YARP
1. dotnet new web –n {your-project-name}
2. dotnet add package Yarp.ReverseProxy
26
https://mvc.tw
How to use YARP in .NET Core / .NET 5
27
Startup.cs appsetting.json
https://mvc.tw
How to use YARP in .NET 6
28
Startup.cs appsetting.json
https://mvc.tw
歡迎參加我們的每週四固定聚會
29
High Availability
https://mvc.tw
Use YARP for Load Balancing
Policies
▪ FirstAlphabetical
▪ Random
▪ PowerOfTwoChoices (default)
▪ RoundRobin
▪ LeastRequests
▪ Customized
ILoadBalancingPolicy
30
https://mvc.tw
Load Balancing
▪ Session Affinity
▪ Load Balance Policy
▪ Destinations Health Checks
31
https://mvc.tw
SPOF: Single Point of Failure
32
單點故障 - 維基百科,自由的百科全書 (wikipedia.org)
https://mvc.tw
歡迎參加我們的每週四固定聚會
33
Use Cases
Classic ASP 轉圈圈
https://mvc.tw
處理問題
▪ ASP/COM+ 舊系統,用戶數量龐大
▪ 使用者回報,有若干頁面操作會有長時間的後端查詢
▪ 因為使用了 session,這一頁查詢發起後,該用戶隨後的所有系統
操作都只會轉圈圈,而且永遠都不會出結果
▪ 能不能避免轉圈,讓用戶空等
34
https://mvc.tw
Startup.cs
ConfigureServices
35
https://mvc.tw
Startup.cs
Configure
36
https://mvc.tw
appsettings.json
37
https://mvc.tw
AvoidReentryMiddleware
38
https://mvc.tw
歡迎參加我們的每週四固定聚會
39
Use Cases
Realtime Visit Counter
Millisecond-level Scaling
https://mvc.tw
處理問題
▪ 解決電子商務微秒級
▪ 線上使用人數統計(特定部位)
▪ Cloud Scaling
40
https://mvc.tw
Architecture
41
https://mvc.tw
t1 t2 t3 t4 t5 t6 t7 t8
🐵 🐵
🐵
🐵
🐷
🐷
🐷 🐷
😈
😈
🐰
🐰
🐰
😈
🐷
😈
🐯
🐯
🐯
👺
👺
time
https://mvc.tw
Configuration
▪ 計算 20 秒內結帳的人數
▪ 計算 5 秒內首頁的訪問人數
▪ …
43
https://mvc.tw
一定要使用 Reverse Proxy 嗎?
▪ 評估功能切入點,Middleware or Proxy
Java Spring、PHP Laravel、Python Flash、ASP.NET 都有
middleware 的設計
44
https://mvc.tw
一定要使用 Reverse Proxy 嗎?
45
▪ Approach 1: Middleware ▪ Approach 2: Proxy
https://mvc.tw
Resources
▪ YARP Documentation (microsoft.github.io)
▪ microsoft/reverse-proxy (github.com)
▪ YARP: The .NET Reverse proxy - YouTube
46
Blog 是記錄知識的最佳平台
47
https://dotblogs.com.tw
48
SkillTree 為了確保內容與實務不會脫節,我們都是聘請企業顧問等級
並且目前依然在職場的業界講師,我們不把時間浪費在述說歷史與沿革,
我們並不是教您考取證照,而是教您如何上場殺敵,拳拳到肉的內容才
是您花錢想要聽到的,而這也剛好是我們擅長的。
https://skilltree.my
49
天瓏資訊圖書

Mais conteúdo relacionado

Mais procurados

Converter 5.5を使ったP2V V2V
Converter 5.5を使ったP2V V2VConverter 5.5を使ったP2V V2V
Converter 5.5を使ったP2V V2V
z2015026
 
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまでLINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE Corporation
 

Mais procurados (20)

Spring Boot Actuator
Spring Boot ActuatorSpring Boot Actuator
Spring Boot Actuator
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
 
周辺知識から理解するMySQL の GIS機能 ~ClubMySQL #4
周辺知識から理解するMySQL の GIS機能 ~ClubMySQL #4周辺知識から理解するMySQL の GIS機能 ~ClubMySQL #4
周辺知識から理解するMySQL の GIS機能 ~ClubMySQL #4
 
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
NGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEANGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEA
 
Structured Streaming - The Internal -
Structured Streaming - The Internal -Structured Streaming - The Internal -
Structured Streaming - The Internal -
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
 
Converter 5.5を使ったP2V V2V
Converter 5.5を使ったP2V V2VConverter 5.5を使ったP2V V2V
Converter 5.5を使ったP2V V2V
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
次世代Webコンテナ Undertowについて
次世代Webコンテナ Undertowについて次世代Webコンテナ Undertowについて
次世代Webコンテナ Undertowについて
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
Introduction to SignalR
Introduction to SignalRIntroduction to SignalR
Introduction to SignalR
 
MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々
 
高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方
 
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまでLINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
LINE LIVE のチャットが
30,000+/min のコメント投稿を捌くようになるまで
 
Metaspace
MetaspaceMetaspace
Metaspace
 
監視 Overview
監視 Overview監視 Overview
監視 Overview
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 

Semelhante a twMVC#43 YARP

从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 

Semelhante a twMVC#43 YARP (20)

从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢
 
Hello openstack 2014
Hello openstack 2014Hello openstack 2014
Hello openstack 2014
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
 
雪球服务化实践历程.Print
雪球服务化实践历程.Print雪球服务化实践历程.Print
雪球服务化实践历程.Print
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generator
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart Factory
 
应用虚拟存储 缔造关键业务之路
应用虚拟存储 缔造关键业务之路应用虚拟存储 缔造关键业务之路
应用虚拟存储 缔造关键业务之路
 
Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2Bruce-輕鬆上手Asp.net web api 2.1.2
Bruce-輕鬆上手Asp.net web api 2.1.2
 
輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2輕鬆上手ASP.NET Web API 2.1.2
輕鬆上手ASP.NET Web API 2.1.2
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 

Mais de twMVC

Mais de twMVC (18)

twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
 
twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇twMVC#46 一探 C# 11 與 .NET 7 的神奇
twMVC#46 一探 C# 11 與 .NET 7 的神奇
 
twMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwrighttwMVC#44 如何測試與保護你的 web application with playwright
twMVC#44 如何測試與保護你的 web application with playwright
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
 
twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁twMVC#36C#的美麗與哀愁
twMVC#36C#的美麗與哀愁
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
 
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
 
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIStwMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
twMVC#32應用 ASP.NET WebAPI2 Odata 建置高互動性 APIS
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvctwMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvc
 
twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩twMVC#30 | Bootstrap 搶先玩
twMVC#30 | Bootstrap 搶先玩
 
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
twMvc#30 | 技術人員與業務團隊的無礙的溝通法則
 
twMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS LambdatwMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS Lambda
 
twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習twMVC#29 | 從電影推薦預測開始學機器學習
twMVC#29 | 從電影推薦預測開始學機器學習
 
twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹twMVC#28 | visual studio 2017 新功能介紹
twMVC#28 | visual studio 2017 新功能介紹
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 

twMVC#43 YARP