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

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

У меня есть достаточно большой портал, который работает с 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы