Форум сайта python.su
Возникла задача - сделать синхронизацию данных между приложениями. Приложения могут быть на любом языке, данные представляют из себя и выборки из базы и бинарные мультимедийные данные.
Данные могут передаваться независимыми блоками (связанные записи из нескольких таблиц). Размер блока - несколько сотен байт. Максимальное количество блоков за один сеанс синхронизации - несколько десятков тысяч.
Пока интересует реализация этого на Питоне, но с учетом того, что это должно быть легко реализуемо и на другом языке.
Хочется сделать это портабельным, быстрым и с минимумом внешних зависимостей, поэтому на twisted я не смотрел.
Пока пробовались 3 вещи - xml-rpc(SimpleXMLRPCServer), json-rpc(SimpleJSONRPCServer взятый с activestate) и tcp поток(SocketServer.StreamRequestHandler), в который суется xml по мере генерации и инкрементально парсится на другой стороне.
Пробовалось только на выборках из базы, без бинарных данных.
Результаты неутешительные - первые 2 кандидата жутко тормозят, причем даже если все данные совать в один rpc вызов, что мне непонятно.
Поток работает в несколько десятков раз быстрее, но как работать из-за прокси непонятно (через 'connect' не везде получится).
В связи со всем этим у меня возникло ощущение, что я либо изобретаю велосипед, либо делаю что-то не так в корне.
Задача-то в общем-то можно сказать классическая, поэтому скорее всего уже существуют правильные подходы к ее решению.
У меня не получилось ничего толкового найти для посмотреть на такой правильный подход. Может я не умею искать или ищу не то, не знаю.
Вообще я пытался использовать стандартные протоколы, чтобы не было проблем с реализацией на других языках. Получилось как-то не очень.
Кто-нибудь может мне рассказать что я делаю не так и как это делать правильно? И что делать с бинарными данными? Или хотя бы в какую сторону копать?
Спасибо.
Офлайн
Я бы начал с D-Bus.
Офлайн
Посмотри как передаются двоичные данные (jpeg, png, swf и т.д.) по HTTP, и поступи аналогичным образом, если провайдерские фильтры HTTP действительно создают проблемы. Но ты вряд-ли сможешь застраховаться от жесткого кеширования, когда прокси будут просто игнорировать заголовки принуждающие не кешировать контент и будут поступать по своему. Возможно есть стандарты, которые позволяют передавать произвольные пакеты данных по HTTP, но я с ними не знаком, сделать велосипед не должно быть сложнее чем искать и изучать чужой API со своими ограничениями.
А вообще. С такими ограничения следует бороться другими методами.
..bw
Офлайн
Опиши подробнее систему и требования.
Пример вопросов, которые возникли сразу:
1. Где физически раположены приложения?
2. Какие каналы связи существуют и какие можете обеспечить?
3. Диапазон размеров передаваемой инфы в Мб (Кб)?
4. Связанность передавамой инфы?
5. Необходимость обеспечить транзакции при передаче данных?
6. Известные ограничения?
7. Аппаратные средства, на которых крутятся программы?
ЗЫ
А зачем в поток пихать тормознутый XML? Неужели нет других форматов?
Офлайн
ZZZУпс. Можно поподробнее? Я считал, что D-BUS имеет немного другую область применения.
Я бы начал с D-Bus.
Офлайн
LexanderПример вопросов, которые возникли сразу:
Опиши подробнее систему и требования.
ЗЫТолько из-за того, что парсинг xml - стандартная процедура и найти парсер для любой платформы не составляет труда. Собственно из-за этого были рассмотрены и xml/json-rpc.
А зачем в поток пихать тормознутый XML? Неужели нет других форматов?
Отредактировано (Май 20, 2009 21:38:48)
Офлайн
bwМожет и так. Просто в один момент я подумал, что, блин, это же классическая проблема - передать данные из одного
сделать велосипед не должно быть сложнее чем искать и изучать чужой API со своими ограничениями.
А вообще. С такими ограничения следует бороться другими методами.И какими, если не секрет?
Отредактировано (Май 20, 2009 21:39:27)
Офлайн
/Offtop
Отличная задача для Limbo
С питоном труднее.
Хочется сделать это портабельным, быстрым и с минимумом внешних зависимостейВсе довольно трудно.
Офлайн
>> А вообще. С такими ограничения следует бороться другими методами.
> И какими, если не секрет?
Дать админу сети водяры пузырь. Или по морде. Действовать по обстоятельствам в общем.
..bw
Офлайн
EdПо указанным данным получается, что по ГПРС нужно будет передавать пакеты мегабайт эдак в 15 за раз. Что, конечно, бред.
3. Диапазон размеров передаваемой инфы в Мб (Кб)?
Я указал:
Офлайн