
У меня есть конечная точка веб-сервиса, которую я создаю, где пользователи будут публиковать XML-файлы, и она будет сильно загружена более чем 1 тыс. запросов в секунду.
Теперь они отправляют эти XML-файлы через http post, но скорость большинства из них будет ограничена.
Проблема в том, что ограничение скорости будет осуществляться веб-приложением путем поиска source_id в xml, и если оно превысит x запросов в минуту, оно не будет обрабатываться дальше.
Мне было интересно, можно ли как-то выполнить проверку ограничения скорости на более раннем этапе обработки и таким образом предотвратить передачу файла размером 50 КБ по конвейеру на мои веб-серверы и потребление ресурсов.
Может ли балансировщик нагрузки каким-либо образом сделать вызов для проверки использования скорости?
Если это возможно, я мог бы поместить source_id в заголовок хоста, чтобы даже XML-файл не приходилось анализировать и загружать в память.
Можно ли просто просмотреть заголовки хоста и не загружать весь XML-файл размером 50 КБ в память?
Я действительно ценю ваши идеи, поскольку для этого требуются более глубокие знания всего стека TCP/IP и т. д.
решение1
Существует два основных типа возможностей:
1) Вы имеете дело с враждебными злоумышленниками, которые не будут сотрудничать с вашим дизайном. В этом случае, почему вас волнует, какой Host
заголовок они отправляют? Ограничьте их скорость по IP.
2) Вы имеете дело с сотрудничающими клиентами, которые накладывают больше нагрузки, чем вы хотите. В этом случае просто примите запрос и отправьте им ответ, в котором им скажут отступить.
Если у вас более сложная ситуация, которая не попадает ни в одну из этих двух простых категорий, лучшее решение, скорее всего, будет зависеть от того, что это за ситуация.
решение2
Вы можете заблокировать его через apache с похожими модулями. Или, если вы хотите вырезать его раньше, вы можете использовать сопоставление строк iptables, чтобы заблокировать вещи через регулярное выражение.
решение3
Это то, чтотккоманда/утилита для - это требует некоторой работы, но это стоит усилий. Я использую его для ограничения скорости передачи на сервер в DMZ за пределами нашей корпоративной локальной сети.
Вот несколько ссылок, которые помогли мне сориентироваться...
Фильтр Tc - Диапазоны портов Рассчитать значение маски: http://mailman.ds9a.nl/pipermail/lartc/2007q4/021739.html
Ограничение скорости для одного хоста или сетевой маски: http://lartc.org/howto/lartc.ratelimit.single.html