Давайте на секунду предположим, что проблема заключается в сквозной задержке, а не в пропускной способности или ЦП. Задержка в этом случае заключается в том, чтобы заставить системный вызов свернуться, создать HTTP-соединение, запросить файл и разорвать соединение.
Один из подходов состоит в том, чтобы отсеять ваши запросы и выполнять их параллельно. Вы упомянули Drupal, поэтому я предполагаю, что вы говорите о PHP здесь. Предположим также, что файлы размером 2,5 КБ перечислены в виде массива в форме URL. Вы можете сделать что-то вроде этого:
<?php
$urls = array(...);
$workers = 4;
$shard_size = count($urls) / $workers;
for ($i = 0; $i < $shard_size; $i++) {
for ($j = 0; $j < $workers - 1; $j++) {
system("curl " . $urls[$i * $shard_size + $j] . "&");
}
system("curl " . $urls[$i * $shard_size + $j]);
}
?>
Это довольно отстойно, но вы поняли идею. Он запускает подпроцессы $ worker-1, чтобы получить файлы в фоновом режиме, и запускает последнего работника на переднем плане, так что вы получаете некоторый темп. Он должен масштабироваться примерно линейно с количеством работников. Он не учитывает крайний случай, когда размер набора данных не делится поровну на количество рабочих. Могу поспорить, что вы можете принять этот подход и сделать что-то достаточно быстро.
Curl также поддерживает запрос нескольких файлов в одной командной строке, но я не знаю, достаточно ли он умен, чтобы повторно использовать существующее HTTP-соединение. Это может быть.