Как стать автором
Обновить

Комментарии 21

зачем было это переводить? статья абсолютно пустая.
конфигов нет, многопоточных тестов нет, зато зачем-то bbr включили.

Настраивать мы, разумеется, ничего не будем (с)

Спасибо, что не тест СУБД, а то как-то в похожей ситуации автор все комментарии слюной забрызгал, рассказывая, что «база должна оптимально настраиваться сама во время инсталляции!!1».

никак не спорю с вами, но замечу, если база может оптимально настроиться сама — за это ей жирный плюс.

Можете привезти список таких субд, которые сами настраиваются в процессе установки?

ну, например, если сравнивать postgresql и ms sql, то последний с настройками по умолчанию использует всю доступную память сервера. и если приложения требуют — отдаёт её обратно. уже «из коробки» имеет разумные значения MAXDOP (количество потоков, на которые может быть распределён запрос). и т. д., и т. п.

Не знал. Спасибо.
а как Windows + Kestrel включить?

В смысле — включить?

ну тоесть как то где то меняли все эти режимы, есть код? или инструкция? или ссылка на репозиторий?

Ну вот после компиляции с целевой платформой windows получается exe-файл. Если не воротить ничего нестандартного, то его запуск запустит Kestrel.


А если каталог с программой зарегистрировать в IIS как веб-приложение, то Kestrel запускаться не будет (это определяется на основе переменных окружения, которые передаёт ASP.NET Core-модуль в IIS).

Думаю, не ошибусь, если скажу что с практической точки зрения наиболее интересен вариант nginx + kestrel

И сразу вопрос к знающим. А можно ли обойтись там без kestrel в принципе? Вроде бы, есть какой-то OWIN, можно ли его использовать каким-то простым способом, или надо для этого много кодить? Обычный publish создаёт вариант под kestrel же? Я как-то даже особо не задумывался, часто делаю разные API, просто шаблонный проект из студии беру, пилю нужные контроллеры, потом publish в папочку под Linux, ну и на сервак. Всё работает, все счастливы. Но в высоконагруженном проекте, если можно обойтись без kestrel, то как это сделать? И даст ли это существенный прирост? Насколько я понимаю - kestrel при наличии nginx (без которого никуда) - просто лишняя сущность, которую если выпилить, станет только лучше.

Или не?

из офф сайта
«Сокеты UNIX для повышения производительности при работе за Nginx»
А можно ли обойтись там без kestrel в принципе? Вроде бы, есть какой-то OWIN, можно ли его использовать каким-то простым способом, или надо для этого много кодить?

OWIN — это (устаревший) стандарт конфигурации веб-сервера, к нему должен прилагаться поддерживающий его веб-сервер. Вы не можете использовать OWIN вместо Kestrel.


И нет, Kestrel — совершенно не лишняя сущность. Попробуйте в "классической" связке nginx + php-fpm избавиться от php-fpm — c Kestrel та же история.

OWIN умер вместе с .net framework. Если честно, то я не знаю, были ли другие реализации OWIN кроме katana для iis. Теоритически можно было бы создать реализацию для nginx, но .net core пошёл другой дорогой и на данный момент на linux нельзя запустить приложение без kestrel

Вроде же owin не привязан к IIS.

Точно помню, как мы его использовали без IIS

Вы путаете понятия. OWIN это спецификация. Единственное что я наверное неправ был - katana имеет в себе реализацию self-contained сервера, по сути тот же самый kestrel. И скорее всего именно эту фичу вы использовали.

В принципе, в ASP.NET Core есть ещё один, не упомянутый в статье, вариант реализации веб-сервера, конфигурируемый вызовом метода расширения UseHttpSys для IWebHostBuilder. В Windows он реализован через использованиее системного драйвера протокола HTTP http.sys (который, кстати, используется и в IIS). Для Linux поддержки этого варианта долго не было (по понятным причинам), но потом в какой-то момент MS добавила его поддержку и в не-Windows платформы (напрямую через socket API, который есть везде) — похоже (хотя точные мотивы MS мне неизвестны), исходя из принципа «чтобы было».
Жалко, что в этой статье нет тестов этой реализации, особенно — на платформе Windows: там она имеет неплохой потенциал, вполне сравнимый с IIS InProcess, и интересно было бы посмотреть, как она этот потенциал использует.
На других же платформах ее вряд ли стоит использовать при сколь-нибудь заметной нагрузке — сомнительно, чтобы эта, в общем-то, самопальная, реализация смогла бы превзойти спецально оптимизированный веб-сервер.
Что понимается под Linux + Nginx? За самим Nginx-ом ведь всё равно находится всё тот же Kestrel?

Да, но больше интересно, какая связь nginx и kestrel использовалась в тестах: по HTTP или по unix sockets

Наверное, вы хотели спросить "по TCP или по unix sockets". Так-то HTTP используется в обоих вариантах.

А вот неожиданностью для меня стало то, что производительность Windows-серверов c Kestrel оказалась выше производительности аналогичных Linux-серверов. Это меня удивило.


Для меня тоже было полной неожиданностью, что многонитиевое (multi threading) приложение под Linux показало худшие результаты, чем то же самое приложение под Windows. После детального анализа и самого приложения и чтения форумов, выяснилось, что это особенность нынешней реализации .Net Core. Обещали исправить к релизу .Net Core 6.0 — посмотрим, исправят ли. В нашем случае производительность примерно на 40-50% хуже под Linux, чем под Windows.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий