0

Начну с сценарием Меня больше всего интересует:«Стандартный» подход для сбора данных из/распределения данных на несколько устройств/серверов?

У нас есть несколько устройств (2 - 10), которые все должны знать о растущий набор данных (тысячи до сотен тысяч мелких кусков, говорят 100 - 1000 байт каждый). Данные могут быть сгенерированы на любом устройстве, и мы: хотим, чтобы каждое устройство было в состоянии получить все данные (изменить: .. В конечном итоге. Устройства не подключены и/или онлайн все время, но они синхронизируются время от времени) Нет данных удаляется или изменяется.

Есть, конечно, несколько наивных подходов, чтобы справиться с этим, но я думаю, все они имеют некоторые серьезные недостатки. Наивно отправляя все, что мне нужно, все остальное приведет к плохой работе с большим количеством старых данных , отправляемых снова и снова. Сначала отправьте инвентарь, а затем сообщите , что другие устройства запрашивают то, что им не хватает, не пригодится для небольших данных . Так может быть, когда каждое устройство помнит, когда и с кем они разговаривали с , может быть полезным компромиссом? Пока число партнеров относительно невелико, а дата нашей последней синхронизации не использует столько места , но должно быть легко просто отправить то, что было добавлено с тех пор.

Но это все только догадки.
Это может быть очень широкая тема , и меня также интересует проблема в целом: (децентрализованная) версия управления, вероятно, делает что-то подобное , что я хочу, а также часть программного обеспечения для синхронизации от пользователей smart телефона, планшета и камеры в онлайн-хранилище и т. д. Каким-то образом они все разные, и есть много факторов, таких как размер данных, пропускная способность, требования к согласованности, мощность обработки или количество устройств, которые агрегировали новые данные между синхронизациями, чтобы иметь в виду, так что же такое теория об этом? Где я должен искать, чтобы найти документы и так о том, что работает, а что нет, или в каждом случае просто так много отличается от всех остальных тем, что нет хороших решений по всему миру?

Уточнение: Я не ищу готовые программные решения/продукты. Это больше похоже на вопрос, какой алгоритм поиска использовать для поиска путей в графе. Книги по информатике, вероятно, скажут вам, что это зависит от особенностей графика (направленного «взвешенного» гиперграфа? Евклидова?), Или вам в конечном итоге понадобится всевозможный путь или только несколько. Существуют разные алгоритмы для того, что вам нужно. Я также рассмотрел вопрос по этому вопросу на https://cs.stackexchange.com/.

ответ

0

В вашей ситуации я бы исследовать службы обмена сообщениями, которая реализует стандарт AMQP такие как RabbitMQ или OpenAMQ, каждый раз, когда новая порция излучается, он должен быть направлен в AMQP брокера, который будет транслировать его на всех устройствах очередей. Затем сообщение может быть отправлено потребителям или выведено из очереди.

+0

Похоже, что есть центральный сервер или что по крайней мере один сервер должен быть онлайн все время. Это не то, что мне нужно, и я действительно не ищу библиотеки или фреймворки, меня больше интересуют (общие) альгорифмы. – Higemaru

0

Вы также можете рассмотреть Kafka для передачи данных от нескольких производителей нескольким потребителям. Другая возможность: ZeroMQ. Это зависит от ваших конкретных потребностей.

+0

Из связанной страницы Кафки: «потоки данных эффективно и в режиме реального времени». Это не то, что мне нужно, я не забочусь о реальном времени, и это часто не возможно (не думайте о сигнале на мобильном устройстве). Но я никогда не слышал о Кафке раньше, спасибо! – Higemaru

+0

@ Higemaru, скорее всего, вам понадобится использовать одну из этих технологий в сочетании с вашим собственным решением. Конечно, «реальное время» в мире облачных и веб-сервисов имеет другое значение, чем традиционная концепция реального времени. Большинство людей использует «реальное время» для обозначения «очень быстро» и «очень быстро» при определенных ограничениях. – rodolk

+0

Конечно, но я не стремлюсь ни к чему, даже близко к реальному времени ;-) – Higemaru

0

Вы решили использовать Amazon Simple notification для решения этой проблемы?

Вы можете создать тему для каждой группы устройств, которую вы хотите синхронизировать. Всякий раз, когда в наборе данных есть обновление, устройство может публиковать в теме, которая, в свою очередь, будет перенесена на все устройства с использованием SNS.

+0

Нет, и это, похоже, не то, что я ищу. Это кажется излишним, и я больше искал альгорифмов, а не готовых программ/услуг. – Higemaru

+0

Существует множество способов синхронизации ваших устройств. Я сказал вам одно, о чем я бы сказал, это не перебор. Это на самом деле довольно просто и эффективно. В качестве альтернативы вы можете синхронизировать свои устройства с использованием протокола сплетен. Устройствам придется поддерживать отпечаток пальца (хэш текущего состояния мира в соответствии с ними). Всякий раз, когда происходит изменение их взглядов на мир, они могут сплетничать, чтобы подтолкнуть изменения к другим устройствам. В этом случае сложность сообщений довольно высока. – anupam

+0

Вы прочитали последний параграф моего вопроса? Я не ищу продукт, я ищу алгоритмы. Я мало знаю об Amazon SNS, но как это поможет в синхронизации? Помните, что это не вариант (и моя цель) отправлять каждое обновление на каждое устройство всякий раз, когда оно происходит, но обмениваться информацией таким образом, чтобы в конечном итоге все устройства имели всю информацию. Если устройство недоступно, где идет сообщение (Amazon SNS)? – Higemaru

 Смежные вопросы

  • Нет связанных вопросов^_^