Добрый вечер!
У меня есть достаточно большой портал, который работает с 2010го года.
На данный момент на сервер загружено более 2 000 000 000 изображений, а для их хранения используется 1 сервер с БД, где хранятся пути к серверам с изображениями, а также 4 файловых сервера, на которых эти изображения и хранятся.
Путь к изображениям формируется и сохраняется в БД в следующем виде:
// s3.domain.com/56/a89/1f1/c7f/56a891f1c7f2451a9e1dd66141334a5d.jpg
Сам сайт написан на PHP, начал разрабатывать его еще в 2009м, и с тех пор много чего было добавлено и изменено, но сама архитектура сайта на данный момент очень неудобная, и мне тяжело его поддерживать и добавлять новые фичи, поэтому решил переписать его заново с учетом новых технологий и полученного опыта.
Уже несколько дней занимаюсь разработкой нового способа хранения изображений, их загрузки и распределения, хочу добавить репликацию, чтобы обеспечить лучшую отказоустойчивость (сейчас все картинки хранятся в одном месте, и случись что с диском, будут потеряны).
В интернете мало статей по организации архитектуры хранения такого огромного количества изображений, я буду рад любой информации на эту тему.
Существуют ли какие программные сервера? Чтобы, например, из PHP можно было делать что-то вроде
// сохранить в файловый сервер изображение, который загрузил пользователь.
// сейчас это изображение лежит во временной папке
$filePath = $fileServer->saveFile("path/to/tmp/folder/user_file.jpg");
// filePath теперь хранит в себе что-то вроде
// http://s20.domain.com/uGDthECHrWU/s46-c-k-no/image.jpg
// нужно сохранить этот путь в бд, чтобы потом отдавать его пользователям.
$db->savePathToUserFile($filePath);
Другими словами, есть ли специализованный софт, который будет организовывать хранение файлов, чтобы мне не приходилось самому организовывать пути к файлам, давать им имена и т.д.?