Возникла задача - сделать синхронизацию данных между приложениями. Приложения могут быть на любом языке, данные представляют из себя и выборки из базы и бинарные мультимедийные данные.
Данные могут передаваться независимыми блоками (связанные записи из нескольких таблиц). Размер блока - несколько сотен байт. Максимальное количество блоков за один сеанс синхронизации - несколько десятков тысяч.
Пока интересует реализация этого на Питоне, но с учетом того, что это должно быть легко реализуемо и на другом языке.
Хочется сделать это портабельным, быстрым и с минимумом внешних зависимостей, поэтому на twisted я не смотрел.
Пока пробовались 3 вещи - xml-rpc(SimpleXMLRPCServer), json-rpc(SimpleJSONRPCServer взятый с activestate) и tcp поток(SocketServer.StreamRequestHandler), в который суется xml по мере генерации и инкрементально парсится на другой стороне.
Пробовалось только на выборках из базы, без бинарных данных.
Результаты неутешительные - первые 2 кандидата жутко тормозят, причем даже если все данные совать в один rpc вызов, что мне непонятно.
Поток работает в несколько десятков раз быстрее, но как работать из-за прокси непонятно (через 'connect' не везде получится).
В связи со всем этим у меня возникло ощущение, что я либо изобретаю велосипед, либо делаю что-то не так в корне.
Задача-то в общем-то можно сказать классическая, поэтому скорее всего уже существуют правильные подходы к ее решению.
У меня не получилось ничего толкового найти для посмотреть на такой правильный подход. Может я не умею искать или ищу не то, не знаю.
Вообще я пытался использовать стандартные протоколы, чтобы не было проблем с реализацией на других языках. Получилось как-то не очень.
Кто-нибудь может мне рассказать что я делаю не так и как это делать правильно? И что делать с бинарными данными? Или хотя бы в какую сторону копать?
Спасибо.