[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите оптимальное решение
deeman
Привет всем!
Подскажите пожалуйста варианты, как лучше всего реализовать следующее. Есть два сервера, один сервер под БД и интерфейсы, обслуживающий запросы пользователя, второй сервер - сервер контента (для картинок, видео и т.п.). Вопрос в том, как реализовать загрузку файлов на сервер контента, если пользователь работает с основным сервером и все скрипты выполняются на нем, а после загрузки необходимо чтобы результат сразу отображался на страничке, допустим:
1) http://server.ru/photo.php - загружаем картинку, картинка обрабатывается (сжимается и т.п.) и затем:
2) http://server.ru/photo.php выдает html ... <img src='cs.server.ru/photos/12345.jpg' /> ...
С помощью DFS делать?..



Спустя 13 минут, 51 секунда (30.12.2009 - 22:50) glock18 написал(а):
Привет, я вижу три варианта здесь:
1. dfs.
2. перенести обработку фоток на сервер контента. пойдет любой язык - можно написать на c с использованием gd2. получится почти то же самое, что обычно на пыхе получается. только
а) быстрее
б) основной сервер не будет загружен обработкой фоток
в) можно грузить прямо на сервер контента без предварительной загрузки на основной сервер

3. грузишь на сервер. обрабатываешь и кидаешь на контент-сервер.

1 - для меня теория, потому что решение чисто админское.
2 - здесь пойдет любой sh или bat (в зависимости от ОС), запускающий скомпиленный обработчик изображений. однако требуется возможность запустить этот sh/bat при загрузке фотки на сервер. по этому вопросу нужно гуглить, точно не могу ничего больше подсказать.

3 - самое простое, не требующего больших усилий, решение. грузим, обрабатываем, все как обычно. только вместо сохранения на основном сервере, отправляем изображения контент-сервер.

Очевидно, что 3 - наиболее медленное при загрузке. 2 - наиболее быстрое и изящное, на мой взгляд решение. проблема в том, что оно не проверено smile.gif
1 - dfs будет задействован при каждом обращении к картинке. то есть при каждой загрузке - раз 5-10. это очень часто, и в сумме тоже может дать определенный оверхед.

Спустя 17 минут, 16 секунд (30.12.2009 - 23:07) deeman написал(а):
Спасибо за ответ. К третьему варианту сам склоняюсь, потому что в случае с одним сервером все необходимые действия выполнялись бы скриптом сразу и сразу выдавался результат. Конечная цель не повысить скорость аплода файлов, а ускорить отдачу страниц под высокие нагрузки (файл загружается 1 раз, а просматривается 10 000 раз допустим). Получается если остановиться на 3м варианте, то добавляется достаточная медленная операция по передаче файла на контент-сервер (сразу встает вопрос, каким способом, но я думаю, что это надо решать с админами, чтобы для скрипта процесс записи был прозрачен, конечно не полноценную dfs поднимать, а что-то простенькое, типа смонтировать удаленную папку если сервер в одной ЛВС или как-то еще), а не делать самому заливку по фтп или каким-нибудь другим способом. Просто возможна ситуация, когда загружается не картинка, а видео или музыка, а это уже достаточно объемно. Думал, может быть уже есть отработанные варианты. Может кто-нибудь видел статьи на подобные темы и поделится ссылками?.. Интересно также почитать и про распределенную БД, особенно работу с автоинкрементными полями, когда генерируется ID объекта и этот идентификатор участвует в формировании ссылки на контент.

Спустя 53 минуты, 12 секунд (31.12.2009 - 00:00) glock18 написал(а):
deeman
Да, разумеется. Если гонять по каналу видео, а сервера не "рядом", то это увеличить время и трафик вдвое. тогда я бы рассматривал второй вариант.

Спустя 3 дня, 11 часов, 50 минут, 54 секунды (4.01.2010 - 11:51) deeman написал(а):
Отпишу результаты размышлений и анализа чужих идей, может кому полезно будет. Как делает тот же вконтакте, если я правильно понял. Например, процесс загрузки выглядит так (сильно упрощенно):
1) открываем страничку загрузки, на ней форма, где в качестве action указывается скрипт загрузки на выбранном сервере контента из пула серверов, например cs100.server.ru/upload.php. Вместе с файлом этому скрипту также будут отправлены параметры: ID вашего альбома и хеш от него (чтобы другие пользователи не могли загрузить что-то в ваш альбом, просто подменив идентификатор).
2) Скрипт cs100.server.ru/upload.php, приняв данные, сверяет ID альбома и хеш от него. Если значения совпадают, то обработав фотографию скрипт выдает редирект на страничку описания вашей фотки, причем в GET параметрах передается ID загруженной фотки и хеши (чтобы опять же скорее всего сверить подлинность), приняв данные о файле, скрипт заносит данные о ней в БД, ну а если на страничке описания добавляются и сохраняются данные, то они также сохраняются в БД.
Конечно, описано сильно упрощенно, но основная идея понятна. Остался открытым вопрос по работе с распределенной БД...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.