Сервис для
сео - оптимизаторов

Найди ошибки на сайте
Ошибки мешают продвижению сайта
Исправь ошибки на сайте
Сайт без ошибок продвигать легче
Получи новых клиентов
Новые клиенты принесут больше прибыль

Новый сервер приложений Ruby: модуль NGINX

Описание: NGINX Inc. только что выпустила поддержку Ruby для своего нового многоязычного сервера приложений, NGINX Unit. Что это значит для веб-приложений на Ruby? Стоит ли обращать внимание на NGINX Unit? (2057 слов / 10 минут)

В блоке для Rubyists есть новый сервер приложений - NGINX Unit. Как можно догадаться по названию, это проект NGINX Inc. , коммерческая компания с открытым исходным кодом, владеющая веб-сервером NGINX. Осенью 2017 года они объявили Блок NGINX проект. По сути, это сервер приложений, предназначенный для замены всех серверов приложений, используемых в NGINX. В случае Ruby это Puma, Unicorn и Passenger.1 (для более глубокого сравнения этих серверов приложений, читайте моя статья о настройке Puma, Passenger и Unicorn ) 1 Для более глубокого сравнения этих серверов приложений, прочитайте моя статья о настройке Puma, Passenger и Unicorn Модуль NGINX также поддерживает Python, Go, PHP и Perl.

Общая идея заключается в том, чтобы сделать администрирование микросервисов намного проще. Один процесс модуля NGINX может запускать любое количество приложений, работающих на любом количестве языков - например, один сервер модуля NGINX может управлять полдюжиной различных приложений Ruby, каждое из которых запускает свою версию среды выполнения Ruby. Или вы можете запустить приложение Ruby и приложение Python параллельно. Комбинации ограничены только вашими системными ресурсами.

Комбинации ограничены только вашими системными ресурсами

К сожалению, «микросервисное» пространство довольно склонно к маркетинговым страницам, наполненным модными словечками2. (Мне действительно не нравится, когда программные проекты рекламируют себя как «современные». и сказать, что они все старые и разоренные, и это новый способ делать вещи. Почему это лучше, чем «старые разоренные пути», никогда не указывается явно. Этот вид маркетинга основывается на страхе разработчика программного обеспечения устареть в своем наборе навыков Вместо того, чтобы делать какие-либо существенные замечания.) 2 Мне действительно не нравится, когда программные проекты рекламируют себя как «современные». Это похоже на «субтитирование» всех уже существующих программных проектов в этом проблемном пространстве и утверждение, что они все старые и испорченные, и это новый способ делать вещи. Почему это лучше, чем «старые разрушенные пути», никогда не указывается явно. Этот вид маркетинга основывается на страхе разработчика программного обеспечения устареть в своем наборе навыков, а не на какой-либо существенной точке зрения. Такие слова, как «динамический», «модульный», «легкий», смешиваются с «сервисной сеткой», «бесшовным» и «изящным». В этой статье мы расскажем о маркетинге и о том, что значит модуль NGINX для тех из нас, кто работает с производственными приложениями Ruby.

Прежде чем перейти к более подробным сведениям об архитектуре модуля NGINX и о том, что делает его уникальным, давайте убедимся, что мы все понимаем разницу между сервером приложений и веб-сервером. Веб-сервер подключается к клиентам по протоколу HTTP и обычно обслуживает статические файлы или прокси-серверы для других серверов с поддержкой HTTP и выступает в качестве посредника. Сервер приложений - это то, что фактически запускает и запускает языковую среду выполнения. В Ruby эти функции иногда комбинируются. Например, все основные серверы приложений Ruby также являются веб-серверами. Однако многие веб-серверы, такие как Nginx и Apache, также не являются серверами приложений. Nginx UNIT - это веб-сервер и сервер приложений.


Модуль NGINX выполняет четыре различных типа процессов: основной, маршрутизатор, контроллер и приложение. Процессы приложения не требуют пояснений - это будет просто среда исполнения Ruby, на которой работает приложение Rails. Процессы маршрутизатора и контроллера и то, как они взаимодействуют друг с другом и процессами приложения, определяют то, как работает модуль NGINX.

Основной процесс создает процессы маршрутизатора и приложения. Это действительно все, что он делает. Однако процессы приложений в модуле NGINX являются динамическими - количество запущенных процессов может быть изменено в любое время, версии Ruby могут быть изменены или даже целые новые приложения могут быть добавлены во время работы сервера. Основным процессом, который сообщает процессам приложения, является процесс контроллера.

Процесс контроллера (как и основной процесс, только один) имеет две задачи: предоставить API конфигурации JSON через HTTP и настроить маршрутизатор и основные процессы. Это, пожалуй, самая новая и интересная часть NGINX Unit для Rubyists. Вместо того, чтобы работать с файлами конфигурации, вы отправляете объекты JSON в процесс контроллера, чтобы сообщить ему, что делать. Например, с этим файлом JSON:

{"listeners": {"*: 3000": {"application": "rails"}}, "Applications": {"rails": {"type": "ruby", "process": 5, "script" : "/www/railsapp/config.ru"}}}

… Мы можем поместить его в процесс контроллера модуля NGINX следующим образом (при условии, что наш сервер модуля NGINX прослушивает порт 8443):

curl -d "myappconfig.json" -X PUT '127.0.0.1:8443'

… И создайте новое приложение Ruby.

Конфигурационный объект JSON модуля NGINX разделен на слушателей и приложения . Приложения - это те приложения, которые вы хотите запустить. Слушатели - это те места, где эти приложения открыты для всего мира (то есть, на каком они порту).

Изменения в приложении и конфигурации прослушивателя должны быть плавными. Например, «горячее развертывание» новой версии вашего приложения будет выполнено путем добавления нового приложения в конфигурацию:

{"rails-new": {"type": "ruby", "процессов": 5, "script": "/www/rails-new-app/config.ru"}} curl -d "mynewappconfig.json" -X PUT

и затем переключаем слушателя на новое приложение:

curl -X PUT -d '"rails-new"' '127.0.0.1:8443/listeners / *: 3000 / application`

Этот переход (предположительно) плавный, и клиенты не заметят. Это похоже на «поэтапный перезапуск» Puma. При поэтапном перезапуске в Puma каждый рабочий процесс перезапускается по одному, что означает, что другие рабочие процессы работают и доступны для приема запросов. Puma выполняет это, используя управляющий сервер (управляемый утилитой pumactl). Однако, в отличие от Puma, при «горячем перезапуске» модуля NGINX не будет двух версий приложения, принимающих запросы одновременно.

В Поэтапный перезапуск Puma Скажем, в вашем приложении шесть работников. На полпути после поэтапного перезапуска 3 работы будут выполнять старый код, а половина - новый код. Это может вызвать некоторые проблемы с изменениями схемы базы данных, например. Перезапуск модуля NGINX происходит «все сразу», поэтому, хотя две версии кода будут работать одновременно, только одна версия будет принимать запросы в любой момент времени.

Эта функциональность кажется весьма полезной для тех, кто запускает свои собственные приложения на Ruby в такой службе, как AWS, где вам приходится управлять своим собственным развертыванием. Тем не менее, пользователи Heroku не найдут ничего полезного, так как вы уже использовали эту функцию «горячего развертывания», используя Система предварительной загрузки Heroku , Однако эти две функции не делают одно и то же. Heroku создает совершенно новый виртуальный сервер и выполняет горячую замену всего, тогда как NGINX Unit просто меняет процессы на одной машине, но они совершенно одинаковы с точки зрения клиента.


Процесс роутера во многом похож на то, как он звучит - вещь, которая превращает HTTP-соединения от клиентов в запросы к процессам веб-приложений. NGINX утверждает, что один маршрутизатор Unit может обрабатывать тысячи одновременных подключений. Маршрутизатор работает так же, как веб-сервер NGINX, и имеет несколько рабочих потоков для приема, буферизации и анализа входящих соединений.

Для меня это одна из самых захватывающих частей NGINX Unit для Rubyists. Для серверов приложений Ruby очень трудно иметь дело с HTTP-соединениями без какого-либо обратного прокси-сервера перед сервером приложений. Например, Unicorn рекомендуется использовать только за обратным прокси-сервером, поскольку он не может буферизовать запросы. То есть, если клиент отправляет один байт своего запроса и затем останавливается (из-за сетевых условий, возможно, из-за плохого соединения с мобильным телефоном), процесс Unicorn просто останавливает всю работу и не может продолжить, пока этот запрос не завершит буферизацию. Например, использование NGINX перед Unicorn позволяет NGINX буферизовать этот запрос до того, как он достигнет Unicorn. Поскольку NGINX написан на высокооптимизированном C и не ограничен GVL Ruby, он может буферизировать сотни соединений для Unicorn. Passenger решает эту проблему, просто являясь надстройкой для NGINX или Apache3 (теперь вы знаете, почему он называется Passenger !) 3 Теперь вы знаете, почему он называется Passenger ! (mod_ruby!) и разгрузка всей связанной с соединением работы на веб-сервер. Таким образом, модуль NGINX больше похож на Passenger, чем на Unicorn.

Конфигурация приложения имеет ключ процессов. Этот ключ может иметь минимальное количество и максимальное количество процессов:

{"rails-new": {"type": "ruby", "процессов": {"запасной": 5 "макс": 10}, "script": "/www/rails-new-app/config.ru "}}

По какой-то причине «минимальное» количество процессов называется «запасным». Приведенная выше конфигурация сразу запустит 5 процессов и будет масштабироваться до 10, если нагрузка этого требует.

Пока нет слов о каких-либо настройках, таких как preload_app от Puma! и аналогичные настройки в Passenger и Unicorn доступны, так что вы сможете запускать процессы до того, как они понадобятся, и использовать преимущества памяти копирования при записи.

Это оставляет процессы приложения. Интересно и новенько здесь то, что маршрутизатор не связывается с процессами приложения через HTTP - он использует сокеты Unix и разделяемую память. Это похоже на оптимизацию, нацеленную на микросервисные архитектуры, так как обмен данными между службами на одном компьютере будет значительно быстрее без промежуточного HTTP. Однако я пока не видел примеров кода на Ruby, как это могло бы работать.

В долгосрочной перспективе мне неясно, предназначен ли он для запуска NGINX перед модулем NGINX, или если модуль NGINX может работать самостоятельно, без чего-либо перед ним. На данный момент (Q1 2018) вы, вероятно, должны запускать NGINX перед модулем NGINX в качестве обратного прокси-сервера, поскольку в модуле NGINX отсутствует статическое обслуживание файлов, HTTPS (TLS) и HTTP / 2. Очевидно, что интеграция довольно легко ,

Модуль NGINX приближается к стабильной версии 1.0. Вы действительно не можете запустить его в производство прямо сейчас для приложений на Ruby: когда я пишу это предложение, модулю Ruby буквально 5 дней. Он все еще находится в стадии активной разработки - второстепенные версии выпускаются каждые несколько недель. Функции, связанные с TLS и HTTP, кажутся следующими «большими возможностями», которые должны появиться на конвейере, а статические файлы будут на следующем месте. Существует некоторая дискуссия о поддержке Java, которая, вероятно, может быть превращена в поддержку JRuby и TruffleRuby.

Поддержка Windows отсутствует, и я не думаю, что смогу затаить дыхание в будущем. Модуль NGINX поддерживает только Ruby 2.0 и выше.

Я не буду тестировать NGINX Unit в этом посте. Это модуль Ruby, чрезвычайно новый и, вероятно, не готовый к каким-либо тестам. Однако настоящая причина, по которой я не буду сравнивать NGINX Unit с Puma, Unicorn или Passenger, заключается в том, что выбор сервера приложений в Ruby зависит не от скорости (технически, с задержкой), а от производительности. Серверы приложений, как правило, различаются по количеству запросов, которые они могут обслуживать параллельно, а не по тому, как быстро они это делают . Серверы приложений накладывают очень малую задержку на приложения, которые они обслуживают, вероятно, порядка нескольких миллисекунд.

Самым важным параметром сервера приложений Ruby, который влияет на пропускную способность, является многопоточность . Причина в том, что это единственный параметр сервера приложений, который может увеличить количество запросов, обслуживаемых одновременно . Многопоточный сервер приложений Ruby может более эффективно и эффективно использовать доступные ресурсы ЦП и памяти и обслуживать больше запросов в минуту, чем однопоточный процесс приложения Ruby.

В настоящее время единственным бесплатным сервером приложений, который запускает веб-приложения Ruby в нескольких потоках, является Puma. Passenger Enterprise сделает это, но вы должны заплатить за лицензию.

Модуль NGINX планирует поддержку нескольких потоков в приложениях Python, поэтому не исключено, что он будет поддерживать приложения Ruby в нескольких потоках в будущем.

Итак, как NGINX Unit в настоящее время «встряхивается» по сравнению с Unicorn, Passenger и Puma? Я думаю, что традиционная установка приложения Rails: одно монолитное приложение, работающее на провайдере Plaform-as-a-Service, таком как Heroku, вероятно, не получит никакой выгоды от текущих функций NGINX Unit и планируемой дорожной карты. Puma уже очень хорошо обслуживает этих пользователей.

Модуль NGINX может быть интересен для пользователей Unicorn, которые хотят прекратить использование обратного прокси. Как только функции HTTP модуля NGINX будут реализованы, он может заменить установку Unicorn / NGINX всего одним сервером NGINX Unit.

Модуль NGINX, вероятно, наиболее сопоставим с Phusion Passenger, который также недавно вошел в сферу «микросервиса», поддерживая Javascript и Python, а также приложения Ruby. NGINX Unit в настоящее время поддерживает больше языков и, вероятно, будет поддерживать еще больше в будущем, поэтому те, кому требуется более широкая языковая поддержка, вероятно, переключатся. Тем не менее, Phusion - это компания, основанная на Ruby, поэтому я ожидаю, что Passenger всегда будет «поддерживать» Ruby лучше, более полно, чем NGINX Unit. И, как уже упоминалось выше, Phusion Passenger Enterprise сегодня поддерживает многопоточное выполнение.

Итак, что же является идеальным приложением NGINX Unit? Если вы работаете в собственном облаке (то есть не в службе, которая управляет маршрутизацией для вас, например в Heroku), и у вас есть много приложений Ruby, работающих в разных версиях Ruby, или много служб на разных языках, и эти службы / приложения нуждаются чтобы быстро общаться друг с другом, похоже, что устройство NGINX было разработано специально для вас. Если вам не подходит этот профиль, тем не менее, вероятно, лучше придерживаться трех основных вариантов (Puma, Passenger и Unicorn).

ДОЛЯ:

Похожие

10 способов, которыми новый iPad может помочь профессиональным кинематографистам
10 способов, которыми iPad может помочь видео профессионалам Нет сомнений в том, что iPad является прекрасным устройством для потребления медиа. Хотя он еще не может быть способен снимать или редактировать профессиональные видеоматериалы, он все же может стать бесценным инструментом для набора инструментов любого режиссера или видеографа. Вот десять способов использования iPad от начала и до конца производственного цикла. 1. Сценарий
Будете ли вы запускать сервер с процессором Intel Atom?
... ервер Intel Atom? В Мир ПК В статье Intel рассказывает, что хочет подтолкнуть Atom ко всему, кроме рынка серверов, рынка, который служит денежной коровой производителя микросхем, позволяя компании продавать свои самые новые, самые быстрые и (и, следовательно) самые дорогие процессоры с максимальной прибылью. , Возьмем семейство серверных процессоров Xeon, которые доступны всего за 200 долларов, но стоят
Sony анонсировала не одну, а две обновленные системы PS4, которые должны быть выпущены в этом году; PS4 Pro ...
Sony анонсировала не одну, а две обновленные системы PS4, которые должны быть выпущены в этом году; PS4 Pro более мощное обновление среднего поколения, ранее носившее кодовое название PS4 Neo, и компактная версия существующего оборудования PS4 - или PS4 Slim
Поиск картинок Google: факты об изображениях Google
Поиск картинок Google Логотип Google images Поиск картинок в Google ( изображения Google ) является крупнейшим фото поисковая система Мир. Она полностью изменила поиск изображений. Если двадцать лет
15 лучших почтовых приложений
С появлением смартфонов и планшетов, которые стали неотъемлемой частью вашей жизни, мобильные почтовые приложения развивались, и каждый из них предлагал свой подход к управлению почтовыми ящиками. Но не все почтовые помощники созданы равными. От замены приложений электронной почты общего назначения до тех, которые предлагают варианты настройки, и интеллектуальной помощи AI - вот 15 приложений электронной почты, которые вы можете попробовать. Microsoft Outlook (Android, iOS: бесплатно)
iPhone 6 против Samsung Galaxy S6: вот в чем разница
Джош Миллер / CNET Флагманские телефоны Apple и Samsung, Айфон 6 а также Galaxy S6 , несомненно, доминировать в мире смартфонов в этом году. Оба телефона удивительно похожи по дизайну, функциям и стоимости, но есть некоторые явные различия. Если вы
16 лучших приложений Bluetooth для Android
Ветераны мобильных устройств были пригодны только для общения, но за последние несколько десятилетий для такого огромного скачка в разработке устройств было достаточно, чтобы обмен текстовыми документами, графикой, видео и медиа между смартфонами вообще не казался чем-то фантастическим. , Немаловажную роль в этом играет радиомодуль Bluetooth, которым оснащены практически все смартфоны, ноутбуки, ПК и другие электронные устройства. Также проверьте:

Комментарии

Будете ли вы запускать сервер с использованием Intel Atom?
Будете ли вы запускать сервер с использованием Intel Atom?
Новый контроллер PS4 - чем отличается обновленный DualShock 4?
Новый контроллер PS4 - чем отличается обновленный DualShock 4? Похож на Xbox One S Тонкая консоль Sony представит слегка обновленный контроллер с несколькими различными функциями, наряду с другими переработанными периферийными устройствами , Большим дополнением является полоса

Что это значит для веб-приложений на Ruby?
Стоит ли обращать внимание на NGINX Unit?
Итак, как NGINX Unit в настоящее время «встряхивается» по сравнению с Unicorn, Passenger и Puma?
Итак, что же является идеальным приложением NGINX Unit?
?ервер Intel Atom?
Будете ли вы запускать сервер с использованием Intel Atom?
Новый контроллер PS4 - чем отличается обновленный DualShock 4?
Новый контроллер PS4 - чем отличается обновленный DualShock 4?