У вас здесь есть четыре аспекта,
- Прием и отправка файлов
- Создание миниатюр
- Хранение файлов там, где каждый узел может получить доступ
- Хранение исходных + миниатюрных объектов в общей базе данных
Поскольку у вас уже есть сервер Java EE, у вас, вероятно, также есть сервер сервлетов (HTTP), в котором существует множество способов балансировки нагрузки и кэширование , не говоря уже о явном потенциале для веба. взаимодействие на основе Во всяком случае, поддержка FTP-передачи с наблюдателем каталога в качестве бонуса.
Вы не должны создавать миниатюры, используя сессионные компоненты без сохранения состояния, это означает, что ваши серверы будут дремать в пиковое время - сервер будет отдавать приоритет логике бизнеса над установлением новых соединений. Вместо этого сначала получите и сохраните файл + исходный объект в базе данных, а затем используйте служебный компонент, чтобы поставить в очередь создание миниатюр (возможно, с n рабочими потоками или очередями сообщений, если хотите). Вы также можете использовать нативные инструменты, в некоторых случаях мы используем Linux.
Вам следует использовать общую файловую систему SAN, которая является подходящим инструментом для обмена файлами между несколькими компьютерами. И структурируйте свои файлы в соответствии с ограничениями вашей файловой системы - такими как количество файлов в каталоге и емкость для чтения / записи.
И одной базы данных будет достаточно для хотя бы небольшого кластера, если вы не убиваете ее большими двоичными двоичными объектами.
Если сомневаетесь, купите больше оперативной памяти;) Особенно миниатюры очень кэшируются и будут обеспечивать хорошую производительность также в Tomcat - если вы не знакомы с многопоточностью, найдите кеш в Google. Также естественно кэшируйте сущности, а не только файлы.