для определенных задач понадобилось реализовать агрегатор xml фидов, который получая запрос на фронтэнд делает десяток-другой подзапросов на другие хосты, получает ответы в xml, парсит их сортирует и финально отдает итог клиенту.
за базу решил взять модуль ssi_filter но появились несколько вопросов- как происходит обработка подзапросов? они выполняются в очередности добавления или выполняются параллельно?
- что если один или несколько хостов долго не ответят или разорвут соединение?
- немного непонятно что происходит с результатами вызова подзапросов. финальный ответ клиенту собирается после завершения всех запросов или сразу, в потоке пишется в сокет?
Мнение. Лично я не стал бы решать подобную задачу на Си. Фиды можно собирать и агрегировать скриптом по крону. А результат агрегации - статический файл - можно отдавать чем угодно. Это будет не просто быстро, а очень быстро. Никаких задержек из-за отключившихся бекендов. Но данные будут чуток не актуальны. Насколько это вам критично?
Спасибо за подробный ответ. Теперь разобраться в коде гораздо проще.Мнение. Лично я не стал бы решать подобную задачу на Си. Фиды можно собирать и агрегировать скриптом по крону. А результат агрегации - статический файл - можно отдавать чем угодно. Это будет не просто быстро, а очень быстро. Никаких задержек из-за отключившихся бекендов. Но данные будут чуток не актуальны. Насколько это вам критично?К сожалению производительность очень критична. Каждый запрос к xml фиду динамический, с параметром. И соответственно каждый ответ уникален. Кешировать нельзя. Скорее всего один сервер не справится с количеством запросов но и плодить излишние фермы серверов тоже не хотелось бы. Поэтому сейчас исследую возможности выжать из одной железяки по максимуму с возможностью масштабирования.
Попадалась на глаза статья на Хабре. Там упоминалось что предыдущая версия Nxweb была на основе libev, но производительность страдала. Если не секрет, что именно в libev рубило скорость работы? За последний месяц перекопал исходники многих производительных фреймворков и не только ( libevent, libev, varnish, libsxe, libuv, haproxy, redis, memcached) В голове теперь кавардак.
Везде есть плюсы и минусы. Самый мрак когда слишком много лишнего кода чтобы обвернуть системные вызовы...
В Varnish нашел упоминание в комментариях что epoll криво работает под нагрузкой/* XXX: EPOLLET (edge triggered) can cause rather Bad Things to* XXX: happen: If NEEV+1 threads get stuck in write(), all threads* XXX: will hang. See #644.*/не попадалась такая проблема?
еще интересно, насколько nxweb прожорлив к памяти? Как я понял, nxweb работает в продакшене как банерокрутилка. если не секрет, какие показатели по потреблению памяти и сколько реально соединений можно вытянуть на одном сервере?
--
Вы получили это сообщение, поскольку подписаны на группу nxweb-ru.
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес nxweb-ru+u...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.