При миллионе URL нельзя создавать миллион одновременных задач и держать все ответы в памяти. Нужны потоковый ввод, ограниченная очередь и фиксированный пул обработчиков.
Если входных URL будет очень много, например миллион, какие проблемы возникнут и как их решить?
При миллионе URL нельзя создавать миллион одновременных задач и держать все ответы в памяти. Нужны потоковый ввод, ограниченная очередь и фиксированный пул обработчиков.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При миллионе URL нельзя создавать миллион одновременных задач и держать все ответы в памяти. Нужны потоковый ввод, ограниченная очередь и фиксированный пул обработчиков.
Ограничивайте общее число соединений и нагрузку на каждый домен, используйте timeouts, лимиты размера ответа и ограниченные повторы. Результаты сохраняйте постепенно, с checkpoint и дедупликацией для возобновления.
Один semaphore вокруг миллиона заранее созданных Task всё равно оставляет расход памяти на сами задачи. Для пользовательских URL проверяйте SSRF, редиректы и допустимые назначения. Учитывайте ограничения источника и backpressure хранилища: ускорение скачивания бесполезно, если запись результатов отстаёт.