Как реализовать механизм обмена данными между linux-серверами?
Ребят, нужна помощь. Занимаюсь вебом, использую Django и Flask, проекты со стандартной конфигурацией, ничего серьезного.
Сейчас надо реализовать такую штуку. Есть главный сервер на linux(main, там скорее всего Debian будет), к нему будут подключаться другие сервера(slave, на базе alpine linux ) к которым в свою очередь коннектятся пользовательские девайсы. На данный момент сделан (не мной) сбор и запись в файл всех ip адресов подключенных к каждому slave. Надо реализовать web протокол, при котором main будет к примеру раз в минуту опрашивать все slave вытягивать из них инфу по ip и сохранять/обновлять в один общий файл, и затем передавать его для сохранения назад всем slave.
Таким образом на main 1 общий файл, на slave - 2 файла.
Подскажите пожалуйста, на чем такое реализовывать? Правильно я понимаю, что тут фреймворки не нужны будут. Может Nginx, uwsgi(с ними есть опыт хоть какой)?
Буду безмерно благодарен за советы опытных комрадов!
UPD Задача усложняется тем, что кол-во slave может меняться в течении этой минуты опроса и у нас не ведется учет количества подключенных девайсов.
Jekson, я никогда не встречал людей способных изучить Twisted за пару дней, не имея хорошего опыта написания tcp/udp-серверов и понимания кооперативной многозадачности.
Jekson, можно приспособить под это Flask, но надо понимать, что это будет применение его не по назначению и решение не будет очень эффективным. На каждом слэйве поднимается flaks-проект, имеющий как минимум два эндпоинта - один для подключения клиентов и один для подключения мастер-сервера. На мастер сервере поднимается flask-проект, имеющий эндпоинт для подключения слэйвов. Когда запускается новый слэйв, он отправляет http-запрос мастеру, в котором сообщает свой IP-адрес. Мастер запоминает адрес слэйва. Когда к слэйву подключается новый клиент, слэйв отправляет http-запрос мастеру, в котором сообщает адрес клиента, мастер в обработчике этого запроса обходит все запомненные адреса слэйвов и каждому отправляет http-запрос, в котором сообщает IP-адрес нового клиента.
Jekson, сильно упростит реализацию, повысит производительность и заменит периодические синхронизации на обмен данными в реальном времени. Каждый слэйв просто подключается к редиске, записывает в множество адреса подключающихся клиентов и считывает их, когда они ему нужны.
Сергей Горностаев чисто для себя уже интересно. Не могли бы в кратце описать почему:
Выглядит как задача, которую легко и при этом качественно можно реализовать на Twisted.
Как бы вы видели решение такой задачи? Подписки организовать? Просто клиент-сервер? Почему именно Twisted, а не просто асинхронщина на питоне с сокетами?
Андрей Шубин, сервера на слейвах при запуске подключаются к мастеру и удерживают соединение всё время своей работы, отправляя и получая через него в режиме реального времени информацию о подключенных клиентах. Можно и на голом asyncio сделать, но в Twisted очень простые и эффективные абстракции, которые могут например облегчить реализацию собственного протокола, организацию фоновых задач, демонизацию серверов и прочее.