Установка и использование сервера очередей Beanstalkd

Тщательное распределение обязанностей между элементами стека для развертывания приложений имеет множество преимуществ, среди которых стоит выделить быстрое обнаружение и устранение проблем и сбоев, лёгкое масштабирование, а также удобное управление компонентами.

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

В данной статье речь пойдёт о настройке подобного распределения при помощи Beanstalkd.

Краткий обзор Beanstalkd

Сервер очередей Beanstalkd был изначально разработан для популярного веб-приложения Causes на Facebook. На сегодняшний день этот надежный, простой в установке сервис обмена сообщениями доступен и для других приложений.

Как говорилось ранее, сервис Beanstalkd изначально предназначен для управления потоками задач различных компонентов стека развертывания приложения при помощи очередей рабочих процессов и сообщений (как это делает, например, RabbitMQ). Однако Beanstalkd отличается от остальных подобных решений.

В отличие от многих других решений, Beanstalkd изначально разрабатывался как сервис очередей, а не универсальный  инструмент для выполнения других функций. Для достижения этой цели Beanstalkd был собран как легкое и быстрое приложение на основе языка программирования Си. Упрощённая архитектура данного приложения делает его простым в установке и дружественным в использовании.

Функции Beanstalkd

Кроме отслеживания процессов по ID, Beanstalkd предлагает следующие функции:

  • Персистентность: Beanstalkd функционирует «в памяти», но поддерживает и персистентность.
  • Определение приоритетов: в отличие от большинства альтернативных программ, Beanstalkd обладает функцией приоритезации задач, что позволяет в случае срочной необходимости выполнить какую-либо задачу.
  • Распределение: разные экземпляры сервера могут быть распределены согласно работе Memcached.
  • Функция «Burying»: позволяет бесконечно откладывать задачу.
  • Сторонние инструменты: Beanstalkd поставляется с различными сторонними инструментами, включая интерфейс командной строки и веб-консоль управления.
  • Предельные сроки: позволяет устанавливать сроки выполнения  задачи и автоматически переносить её в очередь (TTR – Time To Run).

Варианты использования Banstalkd

Как правило, Banstalkd позволяет:

  • Ускорить ответ веб-сервера на запросы (поскольку веб-серверу не нужно срочно выполнять ресурсоёмкие задачи).
  • Выполнять определённые задачи через определенные промежутки времени (например, сканирование сети).
  • Распределить задачи между несколькими рабочими процессами.
  • Предоставить пользователям offline выборку данных за время их отсутствия в сети (таким образом, эти пользователи не теряют никаких данных).
  • Обеспечить полностью асинхронный режим работы с серверными системами.
  • Упорядочивать задачи и устанавливать их приоритетность.
  • Балансировать нагрузку приложения между несколькими рабочими процессами.
  • Значительно увеличить надёжность и аптайм приложения.
  • Откладывать обработку ресурсоёмких задач (видео, изображений и т.п.).
  • И многое другое.

Компоненты Beanstalkd

Как и большинство приложений, Beanstalkd имеет собственный жаргон для описания компонентов сервиса.

Очередь, или Tube

Tube на языке Beanstalkd – это очередь сообщений, через которую задачи или сообщения передаются рабочим процессам (англ. worker).

Сообщение, или Job

Сообщения, передающиеся по очереди рабочим процессам, называются Jobs.

Отправитель, или Producer

Аналогично определению Advanced Message Queuing Protocol, сервис Beanstalkd называет отправителя сообщения (приложение, создавшее и отправившее job рабочему процессу) словом Producer.

Получатель, или Consumer

Получатели – это приложения стека, которые получают из очереди (tube)  сообщения (job) для обработки, созданные отправителями (producer).

Установка Beanstalkd на Ubuntu 13

Beanstalkd очень просто установить при помощи менеджера aptitude. Кроме того, можно скомпилировать программу из исходного кода.

Примечание: Все действия данного раздела выполнены на свежем предварительно настроенном сервере Ubuntu, поскольку данный сервис может повлиять на работу настроенных ранее клиентов.

Установка Beanstalkd с помощью aptitude

Запустите следующую команду, чтобы загрузить и установить Beanstalkd.

aptitude install -y beanstalkd

Отредактируйте стандартный конфигурационный файл при помощи nano, чтобы настроить автоматический запуск сервиса при загрузке системы:

nano /etc/default/beanstalkd

Пролистайте файл, найдите строку #START=yes и раскомментируйте её:

START=yes

Нажмите CTRL+X, чтобы закрыть и сохранить файл, и Y для подтверждения.

Чтобы запустить приложение, перейдите к следующему разделу и следуйте его инструкциям.

Установка Beanstalkd из исходного кода

Для установки программы из исходного кода нужно предварительно установить Git. Для этого используйте:

aptitude install -y git

Загрузите инструменты разработки:

aptitude install -y build-essential

При помощи Git клонируйте официальный репозиторий:

git clone https://github.com/kr/beanstalkd

Откройте каталог с загруженным пакетом:

cd beanstalkd

А затем соберите исходный код приложения:

make

Чтобы установить приложение, используйте:

make install

Использование Beanstalkd

После установки ознакомьтесь с работой сервера Beanstalkd. Ниже приведён список опций для запуска демона:

-b DIR   wal directory
-f MS    fsync at most once every MS milliseconds (use -f0 for "always fsync")
-F       never fsync (default)
-l ADDR  listen on address (default is 0.0.0.0)
-p PORT  listen on port (default is 11300)
-u USER  become user and group
-z BYTES set the maximum job size in bytes (default is 65535)
-s BYTES set the size of each wal file (default is 10485760)
(will be rounded up to a multiple of 512 bytes)
-c       compact the binlog (default)
-n       do not compact the binlog
-v       show version information
-V       increase verbosity
-h       show this help

Пример использования:

# beanstalkd -l [ip address] -p [port #] # For local only access:
beanstalkd -l 127.0.0.1 -p 11301 &

Управление сервисом Beanstalkd

Если демон Beanstalkd был установлен при помощи менеджера пакетов (например, aptitude), у вас есть возможность управлять им как сервисом.

# Запустить сервис:
service beanstalkd start
# Остановить сервис:
service beanstalkd stop
# Перезапустить сервис:
service beanstalkd restart
# Проверить статус:
service beanstalkd status

Клиентские библиотеки Beanstalkd

Beanstalkd поставляется с довольно длинным списком клиентских библиотек, предназначенных развертывания приложений. Среди них следующие языки и фреймворки:

  • Python
  • Django
  • Go
  • Java
  • js
  • Perl
  • PHP
  • Ruby
  • И многое другое.

Полный список библиотек и инструкции по их установке можно найти на странице проекта на Github.

Работа с Beanstalkd

Данный раздел рассматривает основы работы с Beanstalkd. В примерах, описанных здесь, используется язык Python и beanstalkc (привязка Beanstalkd для Python).

Примечание: чтобы установить beanstalkc, запустите:

pip install pyyaml
pip install beanstalkc

Базовые операции

Импортируйте beanstalkc во все файлы Python, которые будет использовать Beanstalkd:

import beanstalkc
# Connection
beanstalk = beanstalkc.Connection(host='localhost', port=11301)

Чтобы поставить сообщение в очередь, введите:

beanstalk.put('job_one')

Чтобы получить сообщение, добавьте:

job = beanstalk.reserve()
# job.body == 'job_one'

Чтобы удалить сообщение после его обработки, внесите в файл:

job.delete()

Чтобы использовать определённую очередь:

beanstalk.use('tube_a')

Просмотреть список доступных очередей можно при помощи:

beanstalk.tubes()
# ['default', 'tube_a']

К примеру, в результате файл btc_ex.py имеет такой вид:

import beanstalkc
# Connect
beanstalk = beanstalkc.Connection(host='localhost', port=11301)
# See all tubes:
beanstalk.tubes()
# Switch to the default (tube):
beanstalk.use('default')
# To enqueue a job:
beanstalk.put('job_one')
# To receive a job:
job = beanstalk.reserve()
# Work with the job:
print job.body
# Delete the job:
job.delete()

Нажмите CTRL+X, чтоб сохранить и закрыть файл, и Y для подтверждения.

После запуска вышеприведённый скрипт выведет на экран тело сообщения:

python btc_ex.py
# job_one

Более подробную информацию о beanstalkd и beanstalkc можно найти на этом сайте.

Tags: , , ,

Добавить комментарий