1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/star7th-htq

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Что такое 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, вы можете продолжить чтение, чтобы узнать больше о его применении.

Применение

  1. Асинхронная очередь реального времени

«В реальном времени» означает, что задача выполняется сразу после её постановки в очередь. Типичным примером является отправка писем. Как только письмо отправляется в очередь, оно немедленно отправляется. Если другое письмо уже находится в процессе отправки, оно будет ожидать завершения текущей отправки.

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

  1. Асинхронная очередь по расписанию

По расписанию означает, что задачи выполняются в определённое время. Этот тип очереди может использоваться для отправки периодических писем или уведомлений. Следует отметить, что здесь нет точного расписания. Например, если вы установите задачу на завтра в 12:00, она будет поставлена в очередь на это время. Если в очереди уже есть задачи в обработке, они будут выполнены после завершения предыдущих. Возможно, задача будет выполнена в 12:01.

  1. Изменяемая очередь

Мы отправляем 10 задач в очередь, и эти 10 задач будут повторяться. Их скорость выполнения может меняться в зависимости от результатов, что делает очередь изменяемой. Например, при мониторинге мы постоянно выполняем задачу «сканирование». Мы хотим ускорить сканирование при обнаружении проблем, чтобы быстрее обнаружить проблемы, и замедлить его при отсутствии длительных проблем, чтобы сэкономить ресурсы компьютера.

Рассмотрим другой пример: получение новых обновлений из социальных сетей через API. У нас есть 100 000 пользователей, привязанных к Sina Weibo, и нам нужно регулярно получать их новые обновления для отображения на главной странице нашего сайта. Если мы используем метод получения обновлений по расписанию, то, предположим, мы можем получить обновления 1 000 пользователей за 1 минуту из-за ограничений использования API и сетевых факторов. Тогда для получения обновлений всех пользователей потребуется 100 минут. Для пользователей это означает, что обновления появятся на нашем сайте только через 100 минут после их публикации. Это слишком долго. Есть ли способ ускорить процесс? В этом случае мы можем использовать изменяемую очередь HTQ. Изменяемая очередь может замедлять получение обновлений от неактивных пользователей и ускорять получение обновлений от активных пользователей. Таким образом, обновление активного пользователя может появиться на нашем сайте через 10 минут после публикации. Для неактивных пользователей время получения обновлений может увеличиться, но это не критично, так как мы готовы выделить больше ресурсов для удовлетворения потребностей активных пользователей.

Использование изменяемой очереди позволяет нам эффективно использовать наши ресурсы, уменьшая потери и увеличивая эффективность.

Установка и использование

  1. Установка

Прежде всего, необходимо установить среду node и сервис redis. Подробные инструкции можно найти по следующим ссылкам:

После установки выполните следующие шаги:

  1. Загрузите код с GitHub: https://github.com/star7th/htq.
  2. Скопируйте или загрузите код в нужную папку.
  3. Введите команду в командной строке, чтобы войти в эту папку:
npm install
  1. После установки запустите следующую команду:
node htq.js

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

nohup node htq.js > ~/htq.log 2>&1 &

Чтобы завершить работу программы, выполните следующую команду:

killall -9 node
  1. Использование

После запуска HTQ по умолчанию прослушивает порт 5999 на локальном хосте. Вы можете получить доступ к API HTQ через этот порт, чтобы добавлять очереди и задачи. Подробную документацию по API можно найти здесь: http://www.showdoc.cc/htq?page_id=37198.

Вы можете вызывать API в своём проекте для создания новых задач, следуя документации. Официальный SDK предоставляется для вызова HTQ с помощью PHP (в каталоге /PHPSDK). Разработчики других языков также могут создать SDK для HTQ на своих языках.

Для изменения порта по умолчанию и адреса redis необходимо изменить файл конфигурации config.json. Изменения вступят в силу после перезапуска HTQ.

Безопасность и отказоустойчивость

  1. Безопасность программы

При доступе к API HTQ требуется простая аутентификация с использованием токена. Информация об аутентификации определяется в файле конфигурации config.json. Для обеспечения безопасности рекомендуется изменить токен на случайное число после загрузки кода. Если HTQ уже запущен, необходимо закрыть его и перезапустить, чтобы применить новые настройки.

Если вас беспокоит, что прямой доступ к URL может представлять угрозу безопасности, и вы не хотите, чтобы внешние пользователи могли получить доступ к вашим URL, вы можете добавить проверку подписи к URL, которые вы отправляете в HTQ. Затем в сценарии задачи, связанной с URL, можно проверить подпись.

  1. Безопасность данных

HTQ использует redis для хранения очередей. Redis имеет функцию сохранения данных. Если вам необходимо выполнить резервное копирование данных, вы можете сделать это, не внедряя систему резервного копирования в бизнес-логику.

  1. Правильность

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

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

HTQ, полное название Http Task Queue — это очередь сервисов для выполнения асинхронных задач способом HTTP. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/star7th-htq.git
git@api.gitlife.ru:oschina-mirror/star7th-htq.git
oschina-mirror
star7th-htq
star7th-htq
master