Microsoft использовала его для замены Nginx и его производительность выросла на 80%! Это слишком здорово, правда?
Microsoft использовала его для замены Nginx и его производительность выросла на 80%! Это слишком здорово, правда?

Всем привет, я гастарбайтер!

Упомянутое программное обеспечение обратного прокси,Каждый, должно быть, подумал об этом в первую очередь:Nginx,Это верно,Nginx действительно является отличным программным обеспечением для обратного прокси.,Многие крупные производители используют его.,Например: Майкрософт.

Однако в настоящее время Microsoft использует его для замены Nginx, что увеличивает пропускную способность на 80%!

В 2021 году Microsoft преобразует внешнюю очередь службы приложений в Kestrel + YARP. В настоящее время это приложение обрабатывает более 160 миллиардов HTTP-запросов в день и представляет собой приложение собственной разработки Microsoft, построенное на .NET с использованием инфраструктуры .NET.

Итак, сегодня давайте узнаем о YARP.

Введение в YARP

Yarp (Еще один обратный прокси) — это набор инструментов обратного прокси-сервера для использования инфраструктуры ASP.NET и .NET и создания быстрых прокси-серверов в .NET. Yarp — это легкий обратный прокси-сервер .NET, который поддерживает протоколы HTTP и HTTPS и может пересылать запросы на другие серверы.

Yarp основан на архитектуре .Net, поэтому его можно применять в Windows и Linux. Самая большая особенность Yarp заключается в том, что его можно настраивать, а индивидуальные прокси-каналы можно разрабатывать в соответствии с конкретными сценариями. Вы можете настроить его в соответствии с конкретными потребностями вашего приложения, использовать правила для пересылки запросов, а также добавлять или изменять заголовки HTTP при пересылке запросов.

  • Адрес Github: https://github.com/microsoft/reverse-proxy

Особенности ЯРП

YARP имеет множество ключевых функций, в том числе:

  • Высокая модульность: YARP спроектирован таким образом, чтобы быть модульным.,Внутренние компоненты могут быть заменены или расширены по мере необходимости.,нравитьсяHTTPмаршрутизация запроса、балансировка нагрузки, проверка здоровья и т. д.
  • Высокая производительность: YARP оптимизирован для высокой производительности.,Использование модели асинхронного программирования .NET и эффективных операций ввода-вывода.,для обработки большого количества одновременных соединений.
  • Драйвер конфигурации: поведением YARP можно управлять с помощью функции «Конфигурация», которая динамически загружает конфигурацию из файла, базы данных или другого источника.
  • Настраиваемость. Самая большая особенность YARP заключается в том, что его можно настраивать, а индивидуальные прокси-каналы можно разрабатывать в соответствии с конкретными сценариями.
  • Стабильность и надежность: YARP обеспечивает активные и пассивные проверки работоспособности, а также предоставляет различные механизмы диагностики проблем.
  • Приступайте к работе быстро: YARP дает разработчикам полный контроль, используя проверенный набор функций ASP.NET Core и .NET, а также производительность C# (или других языков .NET).

также,YARP также имеет некоторые особенности,нравитьсяобратный прокси、балансировка нагрузки、Ограничение тока(толькосуществоватьиспользовать.NET Доступно в версии 7.0 или выше), аутентификация и авторизация, сжатие, кэширование, проверка работоспособности, распределенная трассировка и т. д.

Сценарии использования YARP

  • балансировка нагрузки:Распределяйте запросы на несколько серверовиндивидуальныйсервер,Повысьте масштабируемость и надежность системы.
  • Изоляция внутренней сети:спрятаться внутрисерверизIPадрес,Внешнее может получить доступ внутрь только через YARP.,Тем самым защищая безопасность внутренней сети.
  • Кэширование и ускорение:Кэширование запросов и ответов,Уменьшите количество запросов к внутреннему серверу,Ускорьте доставку контента.
  • Аутентификация и авторизация:Интегрируяиз Аутентификация и авторизациямеханизм,Контролируйте доступ к внутреннему серверу,Убедитесь, что только авторизованные пользователи имеют доступ к определенным ресурсам.
  • Управление потоком и дросселирование:YARPМожет быть ограничено извнеиз Запросить ставку,Предотвратите потенциальные DDoS-атаки или другой вредоносный трафик.,Защитите сервер от атак.
  • Ведение журнала и мониторинг:Логирование запросов и ответовиз Подробный журнал,и обеспечиваем мониторинг и анализ трафика,Помогает отслеживать проблемы, анализировать узкие места производительности и контролировать состояние системы.
  • API-шлюз:существовать В микросервисной архитектуре,YARP можно использовать как API-шлюз,Направляйте запросы от клиентов к правильному экземпляру микросервиса.,и выполняет проверки безопасности, ограничение скорости и многое другое.

Развертывание и использование

YARP 2.0.0 поддерживает ASP.NET Core 6.0 и выше. Пакет SDK для .NET можно загрузить по адресу https://dotnet.microsoft.com/download/dotnet/.

Поэтому среда установки требует предварительного развертывания среды .Net, что можно проверить с помощью следующей команды:

Язык кода:javascript
копировать
dotnet --version

Затем используйте командную строку, чтобы создать пустой проект ASP.NET Core.

Язык кода:javascript
копировать
dotnet new web -n MyProxy -f net6.0

Затем используйте инструмент управления nuget, чтобы вручную добавить пакет Yarp.ReverseProxy, или вы можете добавить его, используя командный режим.

Язык кода:javascript
копировать
Install-Package Yarp.ReverseProxy

Зарегистрируйте Yarp в файле Program.cs.

Язык кода:javascript
копировать
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();

Настройте appsettings.json

Язык кода:javascript
копировать
{
 "Logging": {
   "LogLevel": {
     "Default": "Information",
     "Microsoft": "Warning",
     "Microsoft.Hosting.Lifetime": "Information"
   }
 },
 "AllowedHosts": "*",
 "ReverseProxy": {
   "Routes": {
     "route1" : {
       "ClusterId": "cluster1",
       "Match": {
         "Path": "{**catch-all}"
       }
     }
   },
   "Clusters": {
     "cluster1": {
       "Destinations": { 
       "microsoft": { 
       "Address": "https://docs.microsoft.com/zh-cn/" },
       "github":{ 
       "Address": "https://github.com/" 
       } 
      } 
    } 
  } 
}   

После завершения настройки просто запустите проект. Доступ к сайту произведет случайный обратный прокси-сервер на официальный сайт Microsoft и github, что приведет к следующему эффекту:

Дополнительные сведения об операциях и процессах настройки см. по адресу: https://microsoft.github.io/reverse-proxy/articles/getting-started.html.

YARP и Nginx

Оба имеют одинаковые функции и определенно взаимозаменяемы в связанных конфигурациях. Эта часть конфигурации будет продемонстрирована далее.

сопоставление маршрутов

YARP обеспечивает функциональность объединения маршрутов, аналогичную Nginx.

Язык кода:javascript
копировать
#Nginx 
/webapp
Язык кода:javascript
копировать
#YRAP
     "route1" : {
       "ClusterId": "cluster1",
       "Match": {
         "Path": "/webapp/{**catch-all}"
       }
балансировка нагрузки

YARP Имеет встроенную балансировку нагрузки Функция,доступен по запросуизсвойство(нравитьсяURLпуть、Заголовок запроса、IP-адрес клиента и т. д.) пересылают его на многосерверный сервер.

Язык кода:javascript
копировать
#Nginx Конфигурациябалансировка нагрузки

upstream backend {
 server localhost:9002;
 server localhost:9003;
}
server {
 listen 8080;
 server_name localhost;
 
 location / {
  # backend Это название группы серверов
  proxy_pass http://backend/;
 }
}
Язык кода:javascript
копировать
#YARPКонфигурациябалансировка нагрузки
"Destinations": { 
       "APP1": { 
       "Address": "https://10.0.0.1:9999" 
       },
       "APP2":{ 
       "Address": "https://10.0.0.1:8888" 
       }
}

Официальные примеры:

Перезапись адреса

Nginx середина Перезапись адрес Использовать напрямую rewrite

Язык кода:javascript
копировать
server {
    location / {
        limit_conn myip 10;
        limit_conn myServerName 100;
        rewrite / http://www.mingongge.com permanent;
    }

Yarp добавляет конфигурацию в маршрут

Язык кода:javascript
копировать
"Transforms": [
          { "PathRemovePrefix": "/OMS" }
        ]
Конфигурация пересылки и тайм-аута
Прямая конфигурация
Язык кода:javascript
копировать
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

По умолчанию YARP имеет значение X-Forwarded-For, которое необходимо настроить как X-Forwarded-Host, которое можно изменить в Transforms.

Конфигурация тайм-аута

Конфигурация таймаута Nginx

Язык кода:javascript
копировать
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout  300;

Конфигурация тайм-аута Yarp

Язык кода:javascript
копировать
"HttpRequest": {
    "ActivityTimeout": "<timespan>",#Формат"ActivityTimeout": "00:00:30"
    "Version": "<string>",
    "VersionPolicy": ["RequestVersionOrLower", "RequestVersionOrHigher", "RequestVersionExact"],
    "AllowResponseBuffering": "<bool>"
}

Подвести итог

YARP вносит огромные улучшения в службы приложений Microsoft Azure:

  • Пропускная способность выросла почти на 80%.
  • Azure Прикладная производительность увеличилась, снизилась CPU Использование и использование памяти.
  • Поддерживает современные протоколы, такие как HTTP/3.
  • Поддержка новых сценариев работы с клиентами, например. gRPC приложение、Набор шифров хоста Конфигурация、Пользовательские страницы ошибок и т. д.

Инновационная технология Kestrel + YARP, разработанная основной командой Microsoft .NET, по-прежнему очень ценна, и ее стоит попробовать внедрить в свои собственные проекты разработки.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose