Я настроил Gearman в своей среде Centos, и клиент, и работники работают на одной машине. Работает нормально.

Я пытаюсь использовать gearman с постоянным хранилищем memcached. Я собрал и установил gearman с libmemcached. Итак, я просто запускаю сервис memcached, а затем запускаю

gearmand 
PARAMS="-q
libmemcached
--libmemcached-servers=127.0.0.1:11211"

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

Теперь я пытаюсь проверить работу, используя telnetting в memcached, и я не могу ничего найти. Затем я остановил службу memcached, а затем запустить

gearmand 
PARAMS="-q
libmemcached
--libmemcached-servers=127.0.0.1:11211"

Он по-прежнему работает нормально, без каких-либо ошибок в журналах. У меня все еще могут быть работающие клиенты и работники. Я не понимаю, использует ли gearman memcached вообще.

У нас много работы по кодированию видео. Моя конечная цель - создать memcached на AWS, а затем сохранить мою очередь там. Это хорошая идея? И правильно ли я подхожу к этому?

РЕДАКТИРОВАТЬ

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

Я построил gearman с libmysql.

 * CPP Flags:                  -fvisibility=hidden
   * LIBS:
   * LDFLAGS Flags:
   * Assertions enabled:        no
   * Debug enabled:             no
   * Warnings as failure:       no
   * Building with libsqlite3   no
   * Building with libdrizzle   yes
   * Building with libmemcached yes
   * Building with libpq        no
   * Building with tokyocabinet no
   * Building with libmysql     yes

Внутри моего файла gearmand.conf я добавил следующее, ссылаясь на другую документацию:

PARAMS="--queue-type=mysql \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-db=deliver \
--mysql-table=gearman"

Я могу подключиться к моему локальному mysql с помощью root, и есть база данных под названием "доставить". Когда я запускаю сервер gearmand и добавляю новые задания и рабочих, я не вижу созданной таблицы "gearman".

Процессы, кажется, работают очень хорошо. Я пробовал подробный режим регистрации и проверки файла gearmand.log, но ничего не связано с mysql. Где я должен смотреть?

1 ответ1

1

Есть несколько вещей, которые следует отметить о постоянных очередях в gearman. Во-первых, постоянные очереди используются только для фоновых заданий. Это означает, что если к заданию подключен клиент (т.е. он блокируется), постоянная очередь вообще не будет использоваться (поэтому, если вы тестировали это на типичном примере hello-world/reverse-string напрямую, вы ничего не увидите в очереди).

Из руководства по коробкам передач (см. Выше).

Постоянная очередь включена только для фоновых заданий, потому что приоритетные задания имеют подключенного клиента. Если сервер заданий отключается, клиент может обнаружить это и перезапустить задание переднего плана где-нибудь еще (или сообщить об ошибке исходному вызывающему абоненту). Фоновые задания, с другой стороны, не имеют подключенного клиента и, как ожидается, будут запущены при отправке.

Во-вторых, gearman изначально поддерживает очередь в памяти, но обратные вызовы используются для переадресации / удаления заданий из постоянной очереди по мере необходимости (в случае отказа сервера заданий), поэтому существует вероятность, что задание было завершено, прежде чем вы могли получить что-либо с сервера memcached?

Вы можете проверить это более конкретно, запустив тестовое задание с помощью скажем sleep(100) или чего-то подобного, и, возможно, вы сможете проверить memcached таким образом, пока задание еще выполняется.

Также обратите внимание, что есть некоторые известные ошибки в gearmand с libmemcached типом очереди в некоторых дистрибутивах, таких как Debian (по крайней мере, я знаю), где он имеет некоторые условия гонки. Вы можете попробовать запустить gearmand с --verbose DEBUG для тех.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .