10 сент. 2011 г.

Асинхронный HTTP прокси-сервер yup.

Недавно явил свету маленький демон yup. Написан он на ruby, разворачивается в два шага (gem install && run).
Назначение у него простое:
  1. принять HTTP-запрос и сразу ответить клиенту,
  2. запрос ставится в очередь и пересылается указанному в конфигурации yupd хосту,
  3. если пересылка запроса постигла неудача (проблемы с сетью, глюки софта), то повторить через некоторое время.
Это можно изобразить диаграммой.
В итоге, получаем маленький модуль на который можно без особого труда делегировать гарантированную и асинхронную отправку HTTP-запросов на какой-либо HTTP-сервис.

Установка

Предельно проста:
$ gem install yup

Конфигурация и запуск

Конфигурация задаётся через командую строку:
yupd [OPTION...] FORWARD_TO_HOST

Опции таковы:
  • --listen <host:port>
    Указывает куда биндиться. (по-умолчанию, localhost:8080).
  • --status-code <code>
    Указывает какой код ответа нужно вернуть клиенту. (200).
  • --resend-delay <seconds>
    Пауза между попытками переслать HTTP-запрос. (5.0)
  • --watermark <number>
    Лимит одновременно обрабатываемых запросов. При его преодолении поступающие запросы будут игнорироваться. В персистентном режиме опция не имеет смысла. (100)
  • --persistent <path-to-db>
    Если нет желания теряться запросы при преодолении лимита, то можно включить персистентный режим. Тогда все запросы будут проходить через персистентную очередь. Используется BerkeleyDB.
  • FORWARD_TO_HOST
    Хост:порт, куда нужно пересылать запросы.

Пример использования:
$ yupd --listen localhost:8081 --status-code 201 --persistent /var/db/yupd-errbit errbit.host.somewhere

Текущий статус

На данный момент, мы в undev используем его для отправки эксепшенов в errbit (переконфигурация hoptoad_notifier или airbrake предельно проста), а также для других сервисов с подобным HTTP API.

Проект имеет roadmap, планируется сделать возможность конфигурации yupd-подпроцессов, то есть, если yupd-ов становится больше одного, то можно иметь один мастер-процесс, который запускается таким образом:
yupd { --listen localhost:8081 --status-code 201 errbit.host.somewhere } \
     { --listen localhost:8082 --status-code 202 --persistent /var/db/yupd-service some.other.service }
Напоследок можно добавить, что я до сих пор не осилил английский и документация находится в сыроватом виде.

Если кто заинтересовался и захотел покомитить — you're very welcome!

1 комментарий:

  1. Watch the Full Live Stream of the NBA from the USA at Viacom - Viacom
    Watch the Full Live Stream of the NBA from the USA at Viacom. The official site of youtube to mp4 the NBA Championship is Viacom.

    ОтветитьУдалить