Первая вещь определить, это Ваше приложение или сервер?
Как статическая производительность файла из каждого решения? Могут Вы для получения по запросу изображения 50k с разумными результатами? Вы уверены, что это - рубиновый стек, который вызывает проблемы?
Существует много частей, которые могли вызывать проблемы даже включая приложение, базу данных бэкенда, хранилище файлов, и т.д. В зависимости от Вашего кода, существует вполне немного, который может представить проблемы параллелизма. Попытайтесь писать очень простое тестовое приложение для наблюдения, какие сравнительные тесты можно получить, затем, добавьте в частях для наблюдения то, что вызывает проблему. Смотрите на некоторые профильные драгоценные камни, чтобы видеть, можно ли использовать их для идентификации, где приложение проводит большую часть времени.
По сути, настройка fail2ban, описанная в связанной статье, изменяет брандмауэр на DROP (в течение ограниченного времени) входящих DNS-запросов от исходных IP-адресов, которым не разрешено запрашивать ваш DNS-сервер. Неплохая идея, но если вы не предоставляете авторитетный DNS для одного или нескольких доменов в Интернете, то почему бы не забыть о fail2ban и просто ОТБРОСИТЬ все входящие DNS-запросы из Интернета?
Если вы запускают авторитетный DNS-сервер, то, к сожалению, вы не можете позволить себе игнорировать DNS-запросы. В этом случае я не думаю, что у вас есть большой выбор, кроме как оставить все как есть (рекурсия отключена) и терпеливо ждать постепенного снижения входящего поддельного трафика. Конечно, было бы неплохо иметь возможность настроить bind, чтобы молча игнорировать запросы, которые он s настроен не отвечать, но я не думаю, что в нем есть такая функция. (В конце концов, такое поведение технически нарушает протокол DNS.) Fail2ban действительно предоставляет некоторую альтернативу, но, как вы отметили, она не идеальна.