Unicorn (веб-сервер)
Unicorn | |
---|---|
Тип | свободное и открытое программное обеспечение, Сервер приложений и веб-сервер |
Написана на | Ruby |
Языки интерфейса | английский |
Первый выпуск | 11 марта 2009[2] |
Последняя версия |
|
Репозиторий | yhbt.net/unicorn.git |
Лицензия | GNU GPL 2+[вд][3] |
Сайт | yhbt.net/unicorn/ (англ.) |
Unicorn — свободный веб-сервер, написанный на языке Ruby и предназначенный для запуска Rack-приложений, в том числе написанных на фреймворках Ruby on Rails или Sinatra.
Unicorn может запускаться только под UNIX-подобными ОС (в том числе — Linux, FreeBSD, Mac OS), так как использует fork для создания воркеров. Поддерживает Ruby версии 1.8 и выше, но из-за более дружественного сборщика мусора рекомендуется использовать версии начиная с 2.0. Поддержка jRuby и других альтернативных реализаций Ruby не предусмотрена, в разработке — совместимость с Rubinius.
Принцип работы
[править | править код]При запуске Unicorn создает множество клонов родительского процесса, каждый из которых используется в качестве однопоточного воркера. Каждый воркер в каждый момент времени обслуживает только одно соединение. После обработки и передачи данных клиенту воркер высвобождается и готов обслуживать следующего. Все воркеры подключаются к одному общему сокету (shared socket) или порту. Таким образом, максимальное количество одновременных обрабатываемых запросов равно числу воркеров.
Особенности
[править | править код]Главными достоинствами Unicorn являются:
- многопоточность без требования потокобезопасности к коду
- возможность перезапуска с нулевым временем простоя (без остановки обслуживания)
- возможность перезапуска отдельных воркеров
- высокая производительность
К недостаткам можно отнести следствия из принципа одно соединение — один воркер:
- повышенное потребление памяти по сравнению с другими веб-серверами на Руби при аналогичном количестве соединений
- воркеры остаются занятыми пока не отдадут ответ клиенту (что может занимать существенное время при медленном соединении со стороны клиента)
- слабая поддержка веб-сокетов
В реальных конфигурациях серверов с Unicorn распространено использование обратного прокси, чаще всего — nginx. В таких конфигурациях прокси решает проблему занятости воркеров при медленных клиентах, а также настраивается для раздачи статических файлов — изображений, видео, файлов CSS и JavaScript.
Альтернативы
[править | править код]Существует альтернативная реализация — Rainbows[4], поддерживающая различные модели многопоточности воркеров.
Ввиду совместимости с Rack, Unicorn взаимозаменяем (при условии соблюдений требований к коду и совместимости с версиями Ruby и ОС) с другими реализациями веб-сервера на Руби: WEBrick, Thin, Puma, Rainbows и так далее.
Пользователи Unicorn
[править | править код]Примечания
[править | править код]- ↑ Rack HTTP server for Unix and fast clients
- ↑ https://bogomips.org/unicorn/NEWS.html
- ↑ https://yhbt.net/unicorn.git/tree/README?h=v5.5.3#n59
- ↑ Rainbows! - Rack app server for sleepy apps and slow clients (англ.). yhbt.net. Дата обращения: 13 февраля 2020. Архивировано 13 февраля 2020 года.
- ↑ Unicorn! (англ.). github.blog. Дата обращения: 13 февраля 2020. Архивировано 13 февраля 2020 года.
На эту статью не ссылаются другие статьи Википедии. |