Как лучше отправлять сообщения в MQ (AMQP), TCP или UDP?
Добрый день,
Есть сервис сокращения ссылок , через который в день проходит около 400 тыс кликов.
Технически это реализовано как apache + php + memcached. Работает прекрасно, узких мест пока нет.
Теперь появилась необходимость проверять destination ссылки на вирусы и прочее. Ссылок миллионы, поэтому проверять их все по крону - не вариант, нужно проверять только актуальные ссылок.
Пока планируется следующий процесс
1) Пользователь запрашивает ссылку XXX
2) Скрипт проверяет в memcache статус этой ссылки и дальше разрешает или запрещает редирект
3) Если статуса нет, то через MQ отправляет задание на обработку., ссылка разрешается (допускается, что некий процент ссылок пропускаться не проверенным)
4) Второй скрипт получает задания из MQ, проверяет страницу, обновляет статус в memcache
Один вопрос. Так как все это работает в apache+php, то скрипт каждый раз запускается и умирает. Большинство MQ работают поверх TCP, что будет есть TCP соединение не будет доступно с MQ сервером? имеет ли смысл использовать udp и какой MQ полноценно работает через UDP?
MQ сервер будет находится в другой виртуальной машине и возможно эта VM будет на другом сервере. Основная проблема это, есть опасения, что если TCP соединение не удается установить, то скрипт который должне быстро отдать ссылку пользователю, будет просто висеть и ждать соединения с MQ.
единственный плюс UDP - отсутствие оверхэда на установление соединения. Это выгодно скажем для логирование, когда вы записываете что-то в сокет (не очень много данных, что бы влезло в пакет) и будь что будет. В случае с MQ вам все же нужна гарантия доставки сообщений.
С другой стороны, если вы будете подключаться на loopback интерфейс (MQ сервер будет на том же сервере что и источник заданий), то оверхэда практически не будет, операционная система в этом случае опускает большую часть сетевого стэка.