У меня возникнет соблазн создать хеш из имени файла и использовать его, чтобы обеспечить относительно хорошую балансировку нагрузки.
Для упрощенного примера (в C):
hash = 0
for(i = 0; i < strlen(file_name); i++) {
hash ^= (hash << 5) ^ file_name[i];
}
server_number_for_this_file = hash % total_servers;
Что-то вроде поиска всех файлов в определенной группе, спросите все серверы и объедините ответы. Например, первый сервер может возвращать «hello» и «foo», а второй сервер может возвращать «goodbye» и «bar», поэтому вы должны объединить эти частичные списки, чтобы получить список из 4 файлов.
Примечание: я бы предположил, что содержимое каталога кеша серверов приложений не будет постоянно мешать сетевому хранилищу, так что это также повышает эффективность кеширования (как и в случае с 10 серверами приложений, каждый сервер приложений должен кэшировать только 10% каталога данные содержания вместо 100%).
Конечно, у меня также возникнет соблазн сделать шифрование / дешифрование на клиенте, чтобы данные файла, передаваемые между клиентом и сервером приложений (через ненадежный Интернет?), Были зашифрованы, а не имели «простой текст» поверх ненадежная сеть и только данные шифрования, которые передаются между сервером приложений и сетевым хранилищем (в доверенной сети).