Мы используем комбинацию ActiveMQ / Active Messaging, Event Machine и многопоточности для решения этой проблемы.Мы начнем с большого списка URL для получения.Затем мы разбиваем их на пакеты по 100 URL-адресов на пакет.Каждая партия затем помещается в ActiveMQ.Затем у нас есть массив процессов опроса / потребителя, слушающих очередь.Все эти потребители могут находиться на одном компьютере или могут быть распределены по нескольким компьютерам.Массив потребителей может быть сколь угодно большим, чтобы поддерживать столько параллелизма, сколько мы хотим.Потребители используют Active Messaging, что является хорошей интеграцией Ruby с ActiveMQ.
Когда потребитель получает сообщение для обработки пакета из 100 URL-адресов, он запускает Event Machine для создания пула потоков, который может обрабатывать несколько сообщений.в несколько потоков.Как и вы, мы используем Nokogiri для обработки каждого URL.
Таким образом, существует три уровня параллелизма:
1) Несколько одновременных запросов на процесс потребителя, поддерживаемый Event Machine и потоками.
2) Несколько пользовательских процессов на компьютере.
3) Несколько компьютеров.