Что такое HTQ
Сначала давайте познакомимся с основными понятиями.
При написании программы иногда возникает необходимость использовать асинхронную очередь. Например, если вы отправляете 10 тысяч писем и используете для этого простой цикл for, то выполнение займёт много времени, и отправка всех писем может занять довольно долго. Кроме того, это может привести к блокировке или тайм-ауту. Если количество писем увеличивается до 1 миллиона, проблема становится ещё более очевидной. В этом случае лучшим решением будет поставить эти 100 тысяч писем в очередь и отправлять их одно за другим. Это концепция очереди задач.
Кроме того, нам не нужно ждать, пока все 100 тысяч писем будут отправлены, чтобы уведомить пользователя на сайте. Мы можем поставить письмо в очередь, как только оно поступит, и сразу же уведомить об этом пользователя. Таким образом, время ожидания пользователя будет сокращено с «времени отправки 100 тысяч писем» до «времени постановки 100 тысяч писем в очередь». Это и есть асинхронная концепция.
HTQ (Http Task Queue) — это сервис очередей, который выполняет асинхронные задачи через HTTP. Вы можете отправить несколько URL-адресов в очередь HTQ, и HTQ будет обращаться к этим URL-адресам через HTTP GET. Если в скрипте, связанном с этими URL-адресами, есть конкретные задачи, такие как отправка писем, можно реализовать асинхронные операции. HTQ написан на node.js и может использоваться вместе с другими серверными языками, такими как PHP и Java, для улучшения асинхронной обработки. В настоящее время поддерживаются следующие типы очередей:
Если вы всё ещё не знакомы с HTQ, вы можете продолжить чтение, чтобы узнать больше о его применении.
Применение
«В реальном времени» означает, что задача выполняется сразу после её постановки в очередь. Типичным примером является отправка писем. Как только письмо отправляется в очередь, оно немедленно отправляется. Если другое письмо уже находится в процессе отправки, оно будет ожидать завершения текущей отправки.
Помимо отправки писем, мы также можем использовать HTQ для отправки статей, публикации сообщений в социальных сетях и комментирования. Особенно это полезно при большом количестве комментариев, когда сервер может быть перегружен одновременными запросами и вызвать блокировку. В таких случаях комментарии могут быть поставлены в очередь для последующей обработки.
По расписанию означает, что задачи выполняются в определённое время. Этот тип очереди может использоваться для отправки периодических писем или уведомлений. Следует отметить, что здесь нет точного расписания. Например, если вы установите задачу на завтра в 12:00, она будет поставлена в очередь на это время. Если в очереди уже есть задачи в обработке, они будут выполнены после завершения предыдущих. Возможно, задача будет выполнена в 12:01.
Мы отправляем 10 задач в очередь, и эти 10 задач будут повторяться. Их скорость выполнения может меняться в зависимости от результатов, что делает очередь изменяемой. Например, при мониторинге мы постоянно выполняем задачу «сканирование». Мы хотим ускорить сканирование при обнаружении проблем, чтобы быстрее обнаружить проблемы, и замедлить его при отсутствии длительных проблем, чтобы сэкономить ресурсы компьютера.
Рассмотрим другой пример: получение новых обновлений из социальных сетей через API. У нас есть 100 000 пользователей, привязанных к Sina Weibo, и нам нужно регулярно получать их новые обновления для отображения на главной странице нашего сайта. Если мы используем метод получения обновлений по расписанию, то, предположим, мы можем получить обновления 1 000 пользователей за 1 минуту из-за ограничений использования API и сетевых факторов. Тогда для получения обновлений всех пользователей потребуется 100 минут. Для пользователей это означает, что обновления появятся на нашем сайте только через 100 минут после их публикации. Это слишком долго. Есть ли способ ускорить процесс? В этом случае мы можем использовать изменяемую очередь HTQ. Изменяемая очередь может замедлять получение обновлений от неактивных пользователей и ускорять получение обновлений от активных пользователей. Таким образом, обновление активного пользователя может появиться на нашем сайте через 10 минут после публикации. Для неактивных пользователей время получения обновлений может увеличиться, но это не критично, так как мы готовы выделить больше ресурсов для удовлетворения потребностей активных пользователей.
Использование изменяемой очереди позволяет нам эффективно использовать наши ресурсы, уменьшая потери и увеличивая эффективность.
Установка и использование
Прежде всего, необходимо установить среду node и сервис redis. Подробные инструкции можно найти по следующим ссылкам:
После установки выполните следующие шаги:
npm install
node htq.js
Этот способ запуска является временным, и программа остановится после закрытия окна командной строки. Чтобы запустить программу в фоновом режиме, используйте следующую команду:
nohup node htq.js > ~/htq.log 2>&1 &
Чтобы завершить работу программы, выполните следующую команду:
killall -9 node
После запуска HTQ по умолчанию прослушивает порт 5999 на локальном хосте. Вы можете получить доступ к API HTQ через этот порт, чтобы добавлять очереди и задачи. Подробную документацию по API можно найти здесь: http://www.showdoc.cc/htq?page_id=37198.
Вы можете вызывать API в своём проекте для создания новых задач, следуя документации. Официальный SDK предоставляется для вызова HTQ с помощью PHP (в каталоге /PHPSDK). Разработчики других языков также могут создать SDK для HTQ на своих языках.
Для изменения порта по умолчанию и адреса redis необходимо изменить файл конфигурации config.json. Изменения вступят в силу после перезапуска HTQ.
Безопасность и отказоустойчивость
При доступе к API HTQ требуется простая аутентификация с использованием токена. Информация об аутентификации определяется в файле конфигурации config.json. Для обеспечения безопасности рекомендуется изменить токен на случайное число после загрузки кода. Если HTQ уже запущен, необходимо закрыть его и перезапустить, чтобы применить новые настройки.
Если вас беспокоит, что прямой доступ к URL может представлять угрозу безопасности, и вы не хотите, чтобы внешние пользователи могли получить доступ к вашим URL, вы можете добавить проверку подписи к URL, которые вы отправляете в HTQ. Затем в сценарии задачи, связанной с URL, можно проверить подпись.
HTQ использует redis для хранения очередей. Redis имеет функцию сохранения данных. Если вам необходимо выполнить резервное копирование данных, вы можете сделать это, не внедряя систему резервного копирования в бизнес-логику.
Хотя HTQ может выполнять URL, он не гарантирует правильность бизнес-операций. Например, HTQ успешно запускает скрипт для публикации статьи, но сам скрипт может потерпеть неудачу из-за сетевых проблем. В таком случае следует предусмотреть соответствующую обработку ошибок в бизнес-слое, например, повторно поставить URL в очередь.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )