Сайт на двух серверах

3.66K
.
# Delphinum (11.11.2016 / 15:00)
ramzes, все правильно, только я тебе предлагаю решение для задачи, которая у тебя называется "отправляется на донор". Вот предлагаю не отправлять на донор, а чтоб донор сам скачивал с основного сайта
согласен, сама идея более чем разумна.
вопрос реализации.
писать апи Сайту для ответа на запрос Донора?
делать в скрипте /cloud/ по мимо чеккера ответа донора проверку на наличии еще не удаленного файла на Сайте?
кстати, сам /cloud/ может и удалать изначальный файл с Сайта, в случае получения положительного ответа от Донора.
как думаешь?
.
# ramzes (11.11.2016 / 15:04)
согласен, сама идея более чем разумна.
вопрос реализации.
писать апи Сайту для ответа на запрос Донора?
делать в скрипте /cloud/ по мимо чеккера ответа донора проверку на наличии еще не удаленного
по поводу API думаю:
На стороне донора
addLoadTask(id, адресОткудаКачать) - дергается основным сайтом и нужен для добавления задачи донору типа - как будешь свободен, забери у меня вот этот вот файл. id файла нужен для обратных запросов от донора к сайту
remove(id) - удаляет файла на доноре
На стороне сайта
onFileLoaded(id, кудаСкачалсяФайл) - дергается донором для того, чтобы сообщить основному сайту что файл скачался и по какому адресу он сейчас лежит (по id правится запись в базе основного сайта)

Логика такая:
1. Как только сервер скачал файл, он дергает у донора addLoadTask
2. Как только донор скачал файл, он дергает у сайта onFileLoaded, а сайт правит запись в БД
3. Как только файл удаляется, у донора дергается remove и удаляется запись из БД
.
# ramzes (11.11.2016 / 15:04)
делать в скрипте /cloud/ по мимо чеккера ответа донора проверку на наличии еще не удаленного файла на Сайте?
никаких проверок не надо, до тех пор пока донор не скачает себе файл (полностью), ты не получишь от него onFileLoaded и в базе у тебя будет ссылка на файл с основного сайта. Как только файл на донор уедет, ты получишь обратный вызов, поменяешь ссылку в БД и удалишь файл с основного сайта. Таким образом файл будет доступен всегда.

Вообще старайтесь минимум логики реализовывать, только самое необходимое, добавить логику всегда успеете
.
# ramzes (11.11.2016 / 15:04)
кстати, сам /cloud/ может и удалать изначальный файл с Сайта, в случае получения положительного ответа от Донора.
как думаешь?
естественно
.
# Delphinum (11.11.2016 / 15:10)
никаких проверок не надо, до тех пор пока донор не скачает себе файл (полностью), ты не получишь от него onFileLoaded и в базе у тебя будет ссылка на файл с основного сайта. Как только файл на донор у
Ты предлогаешь организовать межсерверное общение (ну грубо обозвал)
Я бы хотел минимально опираться на логику у Донора, т.к. хочу что бы это был натуральный файловый сервер, я бы и пхп с него убрал, но в серверных настройках ноль и просто не смогу организовать эту же логику на уровне апача или чего то такого.
Соответственно, думать должен именно Сайт, его ресурсов хватит с преизбытком на x100 потребностей скрипта, за это я не переживаю.
Вот вопрос.
Например, как заставить донор забрать файл не используя php ftp_* а напрямую работать чисто по фтп, т.е. что бы не пхп отдавал команду на закачку сайта.
.
ramzes, тебе в любом случае нужна какая то логика, которая будет у тебя лежать либо на машине донора, либо на машине сайта. Без логики (на чистом bash) реализовывать будет крайне сложно. Если хочешь избавить донор от логики, просто на основной машине организуй отложенные задачи. Это довольно простая штука, которая работает так:

1. PHP дергает специальный класс
2. Специальный класс пишет в БД запись типа "выполнить такой то скрипт в такое то время"
3. Cron раз в n времени ищет в базе скрипты, дата выполнения которых уже наступила и выполняет их
4. Отложенный скрипт просто перенесет все файлы на донор

Вообще для реализации нужно ответить на несколько вопросов:

1. Когда должен выполняться перенос файла, сразу после получения или, скажем, в 3 часа ночи?
2. Через что будет передаваться файл, ftp, ssh или еще что то. Я бы предложил ssh, ибо не надо париться об авторизации и подобном
3. Кто будет качать файлы на донор? PHP, Python, Bash, C, etc. От выбора языка многое зависит. Думаю ты выберешь PHP, но тогда нужно позаботиться о времени выполнения скрипта или просто использовать PHP-CLI, он по умолчанию имеет неограниченные lifetime

Можно конечно маленько упростить и сделать все через rsync (почитай в тырнете, очень удобная тулза). Тобишь некая локига будет раз в n минут дергать rsync, тот будет передавать всю папку на донор, а после отчищать папку на сайте. Но это так себе решение, проблем будет много через какое то время.
.
(\/)____o_O____(\/)
Delphinum, я через spl писал импорт, ему по барабану время исполнения, ему дал задачу, файл в любом случае примет до конца
splFileObject
.
Koenig, в смысле через move метод?
.
га счет передачи импорта Донору понял, действительно, как то не додумал я этот момент)
.
(\/)____o_O____(\/)
Delphinum, http://annimon.com/code/?act=v ... =2372
как то так. даже если страница по лимиту вылетит, сам процесс не умирает, файлы до 2 Гб пхп норм отдаёт, может уже и в 64 бит ос по умолчанию и больше 2 Гб можно. скрипту много лет, всегда ровно работает. я фильмы так перемешал, с сайта на сайт
Всего: 156