категории

Spread the love

Последнее обновление: 09 июля 2018 г.

Содержание

Это не проблема. Puma — это веб-сервер, который конкурирует с Unicorn и позволяет обрабатывать одновременные запросы.

Использование доступных ЦП. Если ваш код является потокобезопасным. В противном случае вы все равно можете использовать Puma, но вы должны масштабировать только рабочие процессы.

Это ориентировочное приложение к Heroku, использующее веб-сервер Puma. Для базовой настройки Rails см. Раздел Начало работы с Rails.

Вы всегда должны иметь возможность завершить свою среду.

Добавление Puma к вашей заявке

Gemfile

Во-первых, добавьте Puma в Gemfile вашего приложения:

PROCFILE

Установите его в Procfile вашего приложения. Вы можете установить большинство значений inline:

Однако мы рекомендуем создать файл конфигурации:

Убедитесь, что Procfile — git.

конфиг

Создайте файл конфигурации для вас по адресу config / puma.rb или по выбранному вами пути. Для простого приложения Rails мы рекомендуем следующую базовую конфигурацию:

Вы также можете убедиться, что ваше приложение Rails имеет достаточно соединений с базой данных. (Это будет рассмотрено позже).

Если ваше приложение небезопасно, вы должны иметь возможность использовать работников. Установите минимальные и максимальные потоки на 1:

Дополнительную информацию см. В разделе ниже для обеспечения безопасности потоков.

Рабочие

Значение переменной среды может быть установлено на значение по умолчанию, основанное на размере dyno. Чтобы вручную настроить это значение, используйте конфигурацию heroku: установите WEB_CONCURRENCY.

Puma запускает несколько процессов ОС для ras для получения нескольких одновременных запросов. В терминологии Puma эти процессы должны соблюдаться. Поэтому на этом уровне ОС это необязательно.

Режим Multi Process не работает, если вы используете JRuby или Windows, потому что JVM и Windows не поддерживают процессы. Опустите эту строку из своей конфигурации, если вы используете JRuby или Windows.

Каждый используемый рабочий процесс потребляет дополнительную память. Это можно сделать в одном дино. С типичным размером памяти Rails вы можете ожидать 2-4 puma или standard-1x dyno. Ваш след. Для настройки пользовательского приложения. Контролируйте журналы приложений для ошибок R14 (превышена квота памяти) через один из наших регистрационных аддонов или журналов героя.

Потоки

Puma может обслуживать каждый запрос из внутреннего пула потоков. Это позволяет предоставить дополнительный параллелизм для вашего веб-приложения. Понятно, что рабочие потребляют больше CPU, и оба обеспечивают более параллелизм.

На магнитно-резонансной томографии имеется глобальная блокировка интерпретатора (GIL), которая гарантирует, что она может быть запущена только в любое время. IO, такие как вызовы базы данных, взаимодействующие с GIL. Большинство приложений Rails можно использовать для полной обработки нескольких потоков. JRuby и Rubinius также получают выгоду от использования Puma. GIL и будет работать во всех направлениях независимо от того, что с ними происходит.

Используется экземпляр Puma. Не требуется загрузка. Его можно использовать как дино. Мы рекомендуем установить min равным max.

Твой выбор.

Предварительное приложение

Это означает, что вы сможете управлять своими рабочими процессами. В приведенной выше конфигурации эти соединения используются.

О загрузке рабочего

Блок on_worker_boot Это не может быть разделен между несколькими процессами. Это похоже на блок after_fork Unicorn. Это необходимо только в том случае, если вы используете многопроцессорный режим (т. Е. Указанные рабочие).

Если вы используете Rails 4.1+, вы можете использовать свою базу данных.

В противном случае вы должны:

Если вы уже используете инициализатор, вы должны как можно скорее переключиться. Использование инициализатора требует дублирования кода при использовании гибридного режима в Puma. Его можно смутить.

В конфигурации по умолчанию мы устанавливаем размер пула базы данных. Для получения дополнительной информации ознакомьтесь с разделами параллелизма и базы данных в Ruby с ActiveRecord. Мы также обеспечиваем создание соединения с базой данных.

Вам необходимо будет подключиться к любому хранилищу данных, например Postgres, Redis или memcache. Как подключить активную запись. Если вы используете Resque, вам нужно будет снова подключиться:

Если вы пытаетесь понять это, вы не сможете его получить.

Rackup

Как запустить приложение для стойки. Это точка вашего приложения config.ru, которая автоматически создается Rails при создании нового проекта.

Эта строка может не понадобиться для новых версий Puma.

Порт, к которому будет привязываться Puma. Когда веб-процесс загрузится, Heroku установит ENV ['PORT']. Локально, по умолчанию это соответствует нормальному 3000s.

Окружающая среда

Установите среду Puma. На Heroku ENV ['RACK_ENV'] будет установлено значение «производство» по умолчанию.

Тайм-аут

В Puma нет механизма тайм-аута запроса. Маршрутизатор Heroku получит все запросы, которые превышают 30 секунд. Нет необходимости в ошибке. Чтобы избежать засорения, пришло время прекратить длительные запросы.

Установите значение тайм-аута через переменную среды

Он будет остановлен на 20 секунд. Если вы можете исправить это, вы можете исправить это.

Примечание. Для этой переменной окружения требуется время ожидания стойки 5.0+.

Образец кода

Вы можете увидеть конфигурационный файл в репо

Безопасность резьбы

Может выполняться через несколько потоков без ошибок. Трудно определить, может ли он выполняться через несколько потоков.

До Rails 4 был установлен режим безопасной потоковой передачи, который можно было переключить. Хотя только потому, что Rails не гарантирует, что ваш код будет. Если вы не запускаете приложение, вам необходимо настроить и настроить RA и RAILS_MAX_THREADS:

Вы можете получить параллелизм, добавив работников. Он может работать через несколько рабочих процессов.

После того, как ваше приложение работает на 2:

Вам нужно отслеживать исключения и искать ошибки, такие как *обнаружен тупик (смертельный), условия гонки и местоположения, в которых вы изменяете глобальные или общие переменные.

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

Как только вы ожидаете, вы можете увеличить количество потоков.

Чтобы оптимизировать количество потоков, мы рекомендуем посмотреть время ожидания запроса. Это будет до определенной степени. Больше не нужно добавлять новые потоки.

Подключение к базе данных

Поскольку вы добавляете больше в свою базу данных. Это хорошая формула для определения RAILS_MAX_THREADS по WEB_CONCURRENCY. Это определит количество подключений, которое будет потреблять каждый дино.

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

Это свидетельствует о том, что ваше соединение Rails слишком мало. Соединения параллелизма и базы данных.

Медленные клиенты

Медленно. Например, он может использоваться для мобильных телефонов, 4G или других быстрых сетей. Например, для некоторых серверов вы можете сделать это так просто.

Он может быть заблокирован клиентом. Из-за этого Puma обрабатывает медленных клиентов изящно. Heroku рекомендует Puma для использования в сценариях, где вы ожидаете медленных клиентов.

отставание

Для Puma можно установить значение «Backlog» для «Puma». Он будет поставлен в очередь в сокет, прежде чем Puma начнет отклонять HTTP-запросы. Значение по умолчанию равно 1024, мы рекомендуем не изменять это значение или его уменьшать. Это может быть немного больше, чем дино. Когда дело доходит до вашего запроса, это ваше решение. Каждое соединение задерживается на 5 секунд, поэтому вы автоматически оштрафованы на 5 секунд за запрос. Вы можете больше узнать о поведении маршрутизации. В случае с dynos это будет отскакивание запросов. Неоднократно повышающие ставки для ваших клиентов.

Произвольно высокое значение отставания запрашивает всплеск запросов. Здесь вы можете получить свое приложение. Heroku рекомендует НЕ задавая значение отставания и используя значение по умолчанию.

Ссылка на основную публикацию
close-link