PlayTime
Новичок
Здравствуйте,
Занимаюсь разработкой движка для хостинга изображений. Есть покупной движок, но исправляя тот код через несколько месяцев пришел к выводу что лучше написать свой чем подпирать костылями старый.
И вот при разработке новых функций я столкнулся проблемами и пока мне трудно их решить.
Предполагается что загрузка изображений будет происходить не на один сервер а на несколько (s1.example.com, s2.example.com) будет сервер с mysql базой.
И вот тут я задумался. Как правильно организовать загрузку на какой то один сервер из списка? сервера могут быть в разных странах.
Первой идеей было помещать в форме адрес обработчика, тогда просто файл будет сразу отправлен на нужный сервер. Запрос страницы с изображением будет иметь вид s1.example.com/date/imgname//
Второй идее было все отправлять на сервер загрузки а он уже чтобы распределял на какой сервер загрузить файл и ответственно сам производил обработку. Также при втором варианте предполагалось что ссылка для просмотра страницы с изображением будет всегда вести на один сервер и только ссылка на сам файл будет с другого сервера.
Преимуществом первого варианта я вижу независимость каждого сервера (почти независимость так как нужен сервер mysql) но при этом каждый сервер должен иметь установленный apache и nginx. И испытывать большую нагрузку. хотя проведя мониторинг того что сейчас есть (а это около 150 000 просмотров в сутки) я заметил что самым слабым местом есть mysql. По этому предполагается отдельный сервер который потом можно масштабировать.
Во втором варианте есть один сервер (точка входа) который сам генерирует страницу и подставляет только линки на изображения. На серверах с изображениями установлен только nginx и он не производит никакой обработки изображений (возможно и будет apache но только для выполнения административных скриптов).
Таки образом можно иметь сервера для хранения файлов которые имеют не большие вычислительные мощностя и несколько серверов которые предназначены для обработки изображений, показа, и работы с базой.
В данный момент все это можно организовать на одном сервере но при росте нагрузки разделить на разные сервера не составит никакой проблемы.
Также будет АПИ для использования форм загрузки на других сайтах.
Здесь тоже было несколько вариантов.
Просто давать код для встраивания форм и при этом тот кто встраивает может изменить код как ему угодно а запрос к серверу (нашему) будет происходить только при загрузке.
Или использовать CURL. Подразумевается что загрузка будет происходить через CURL и результат загрузки будет получен через него.
Еще был вариант использования AJAX но он мне не понравился.
И вот тут проявилось еще одно преимущество второго способа. Так как при встраивании форм никто даже не должен подозревать что используется сторонний сервис все ссылки должны быть заменены. и вот если будет несколько серверов то тот кто встраивает форму соответственно должен создать CNAME записи на каждый из них.
В общем вот что я задумал. Но стал вопрос. Каким способом передавать файл на другой сервер после обработки его сервером загрузки? Ведь нужно получить еще ответ был ли загружен файл удачно. Возможно нужно даже сверять будет хеш отправленного и полученного файла.
Или может есть какой то другой способ организации такого сервиса? Так как у меня опыта в мало. Использовать другие языки не могу.
Занимаюсь разработкой движка для хостинга изображений. Есть покупной движок, но исправляя тот код через несколько месяцев пришел к выводу что лучше написать свой чем подпирать костылями старый.
И вот при разработке новых функций я столкнулся проблемами и пока мне трудно их решить.
Предполагается что загрузка изображений будет происходить не на один сервер а на несколько (s1.example.com, s2.example.com) будет сервер с mysql базой.
И вот тут я задумался. Как правильно организовать загрузку на какой то один сервер из списка? сервера могут быть в разных странах.
Первой идеей было помещать в форме адрес обработчика, тогда просто файл будет сразу отправлен на нужный сервер. Запрос страницы с изображением будет иметь вид s1.example.com/date/imgname//
Второй идее было все отправлять на сервер загрузки а он уже чтобы распределял на какой сервер загрузить файл и ответственно сам производил обработку. Также при втором варианте предполагалось что ссылка для просмотра страницы с изображением будет всегда вести на один сервер и только ссылка на сам файл будет с другого сервера.
Преимуществом первого варианта я вижу независимость каждого сервера (почти независимость так как нужен сервер mysql) но при этом каждый сервер должен иметь установленный apache и nginx. И испытывать большую нагрузку. хотя проведя мониторинг того что сейчас есть (а это около 150 000 просмотров в сутки) я заметил что самым слабым местом есть mysql. По этому предполагается отдельный сервер который потом можно масштабировать.
Во втором варианте есть один сервер (точка входа) который сам генерирует страницу и подставляет только линки на изображения. На серверах с изображениями установлен только nginx и он не производит никакой обработки изображений (возможно и будет apache но только для выполнения административных скриптов).
Таки образом можно иметь сервера для хранения файлов которые имеют не большие вычислительные мощностя и несколько серверов которые предназначены для обработки изображений, показа, и работы с базой.
В данный момент все это можно организовать на одном сервере но при росте нагрузки разделить на разные сервера не составит никакой проблемы.
Также будет АПИ для использования форм загрузки на других сайтах.
Здесь тоже было несколько вариантов.
Просто давать код для встраивания форм и при этом тот кто встраивает может изменить код как ему угодно а запрос к серверу (нашему) будет происходить только при загрузке.
Или использовать CURL. Подразумевается что загрузка будет происходить через CURL и результат загрузки будет получен через него.
Еще был вариант использования AJAX но он мне не понравился.
И вот тут проявилось еще одно преимущество второго способа. Так как при встраивании форм никто даже не должен подозревать что используется сторонний сервис все ссылки должны быть заменены. и вот если будет несколько серверов то тот кто встраивает форму соответственно должен создать CNAME записи на каждый из них.
В общем вот что я задумал. Но стал вопрос. Каким способом передавать файл на другой сервер после обработки его сервером загрузки? Ведь нужно получить еще ответ был ли загружен файл удачно. Возможно нужно даже сверять будет хеш отправленного и полученного файла.
Или может есть какой то другой способ организации такого сервиса? Так как у меня опыта в мало. Использовать другие языки не могу.