Честно говоря, похоже, что вам не хватает какого-то большого опыта, почти необходимого для реализации системы, подобной описанной. Кроме того, «в очень малых масштабах» определенно противоречит миллиону файлов менее чем за месяц.
Я постараюсь дать ответы на ваши вопросы.
Организация файлов заключается в том, чтобы дать им разумные имена. Если вы позволяете пользователю выбирать имя файла, следите за тем, чтобы вы правильно фильтровали его, чтобы блокировать атаки на основе имен файлов, таких как "../../../etc/passwd" (вы ДОЛЖНЫ это понимать.). Я рекомендую использовать хэши в качестве имен файлов. Кроме того, вы можете назначить им публичные «имена файлов» (фактически псевдонимы через базу данных). После загрузки рассчитайте хеш файла. Если количество файлов увеличивается, вы можете хранить их в каталогах, названных в честь первых 2 символов хэша. Это то, что делает Git VCS, и мне действительно это нравится.
Что именно вы подразумеваете под этим? Если вы планируете иметь один сервер загрузки и зеркалировать загруженные файлы на другие серверы, вы можете легко разделить эти процессы. Создайте страницу простой загрузки и напишите другой зеркальный скрипт, который отправляет файлы, например через FTP на другие серверы. В противном случае, если вы собираетесь создать нечто, называемое кластером (несколько веб-серверов для одной и той же цели, выполняющих балансировку нагрузки и обеспечивающих высокую доступность), то нет короткого ответа о том, как это сделать. Многие мудрецы зарабатывают много денег, потому что у них есть необходимый опыт и навыки для внедрения таких систем. Если вы достаточно заинтересованы, чтобы сделать это самостоятельно, вам следует прочитать некоторые книги об этом.
Я не хочу подвергать сомнению вашу мотивацию, но почему вы хотите запретить использование менеджеров загрузок? Они очень полезны для возобновления прерванных загрузок и, таким образом, помогают снизить трафик вашего сервера. Это экономит трафик, пропускную способность, энергозатраты и время процессора. Это слишком плохо для тебя? С технической точки зрения вам необходимо настроить HTTP-сервер, например, например. Apache, чтобы отключить резюме. Я понятия не имею, что это за подходящий вариант, но я считаю, что он есть. В качестве альтернативы вы можете предоставить файлы с помощью сценария PHP вместо прямой ссылки на файл. Сценарий получает идентификатор файла с помощью параметра URL и отправляет содержимое файла (которое в этом случае не должно находиться в корневом каталоге WWW) обратно клиенту. Таким образом, вы несете ответственность за внедрение резюме или нет, и, таким образом, вы можете легко «отключить» его. Если вы действительно хотите избежать нескольких загрузок, я бы рекомендовал использовать сложные идентификаторы, такие как хэши (никто не может угадать ссылку для загрузки файла), и реализовать некоторый скрипт, который удаляет файл после полной загрузки. Как я уже сказал, отключение менеджеров загрузки наносит вред вам и вашим пользователям.
Надеюсь, это поможет получить общее представление о сложности вашей идеи.