Технические вызовы и их решение
База данных PostgreSQL росла неконтролируемо. Каждое сканирование крупного портала добавляло десятки миллионов записей. Главная таблица превратилась в монстра с миллиардом строк. Простые запросы выполнялись минутами. Система начала деградировать на глазах.
Сайт банка определял робота и блокировал его после нескольких запросов. Пришлось срочно внедрять ротацию прокси-серверов. Но это породило новую проблему: ограниченный пул адресов нужно было использовать эффективно, не превышая лимиты.
Обнаружился парадокс с маленькими сайтами других пользователей. Краулер, настроенный на обработку гигантских порталов, фактически устраивал DDoS-атаку небольшим ресурсам. Владельцы жаловались, что их сайты падают во время сканирования.
Сервер начал испытывать проблемы с памятью. Процессы зависали посреди работы, данные терялись. Диск объемом 200 гигабайт забился под завязку, пришлось экстренно расширять до 400. Но главная боль касалась отчетов.
Система должна была после каждого сканирования сравнивать новые результаты с предыдущими, находить изменения, формировать детальный отчет. Этот процесс, который по задумке должен был занимать секунды, растягивался на восемь минут. PostgreSQL безуспешно пыталась найти совпадения среди шестидесяти миллионов записей за один проход.