Как правильно переделать систему хранения высоконагруженного сайта?

Добрый вечер!

У меня есть достаточно большой портал, который работает с 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);


Другими словами, есть ли специализованный софт, который будет организовывать хранение файлов, чтобы мне не приходилось самому организовывать пути к файлам, давать им имена и т.д.?
  • Вопрос задан
  • 951 просмотр
Пригласить эксперта
Ответы на вопрос 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Пища для ума: раз, два
Ответ написан
@DobriyJuk
Сетевой инженер, системный администратор
Распределенная ФС - ваше все. Как мне видится, из бесплатных вариантов, вам идеально подойдет Ceph. Но бесплатна она относительно, по скольку там есть некоторые требования по серверам. Точнее, по их кол-ву. Плюс, если скорость доступа к данным важна (само-собой), то всякими примитивными Файбер Ченнелами вы здесь не обойдетесь. Но это уже не особенности ФС, а просто здравый смысл. Сама ФС будет прекрасно функционировать даже на FastEthernet.
Ответ написан
@spotifi
https://www.insight-it.ru/highload/
Выбирай любую как пример.

Уже несколько дней занимаюсь разработкой нового способа хранения изображений, их загрузки и распределения, хочу добавить репликацию, чтобы обеспечить лучшую отказоустойчивость (сейчас все картинки хранятся в одном месте, и случись что с диском, будут потеряны).

В интернете мало статей по организации архитектуры хранения такого огромного количества изображений, я буду рад любой информации на эту тему.


Чем S3-то не устраивает?
Ну возьми 3-5 VDS. Сделай между ними Ceph+ObjectStorage.
Потребуется нормальный локальный канал связи между ними.

Если связь между серверами плохая, то возьми Yandex Elliptics.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы