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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.