Я работаю над чем-то похожим (хотя код далеко не готов). Я расскажу немного о моем предполагаемом подходе, но подходит ли он для вас, зависит от некоторых ключевых моментов проектирования, которые вы должны рассмотреть. Я не знаю ни о каких готовых проектах, которые это сделают, к сожалению.
- В частности, нам нужно знать, какой язык вы хотите использовать, или какие языки вы предпочитаете избегать.
- Кроме того, подумайте, как вы намереваетесь выполнить одноранговый переход - можете ли вы настроить доверие между парами узлов вручную или хотите, чтобы они автоматически обнаруживались?
- Предполагается, что все узлы могут вставлять данные?
Если вы можете использовать PHP, и вам нравится ручной просмотр пар узлов, тогда мой подход может быть интересен. Настройте ORM, например Doctrine, Propel или NotORM, и попросите каждый узел регулярно синхронизироваться с источником времени в Интернете. Для каждой новой строки в БД захватите данные (либо в массиве, либо в объекте ORM), сериализуйте их и отправьте на все узлы, с которыми у вас есть доверительные отношения. В случае неудачной отправки запомните это и повторяйте через определенные промежутки времени (возможно, отказ от работы после того, как удаленный узел не сможет ответить на большое количество попыток).
Нажатия могут быть инициированы вашим приложением, которое создает строку, или могут быть вызваны любым планировщиком, доступным на каждой машине. Push-сообщение может быть XML или для простоты может быть просто POST-сообщением, содержащим новую строку и любые метаданные (например, отметку времени сохранения, чтобы разрешить порядок INSERT для нескольких узлов).
Если ваши узлы не имеют статических IP-адресов, они могут быть зарегистрированы с помощью службы динамической адресации DNS, чтобы каждый узел мог поддерживать связь со сверстниками, даже если их IP-адрес изменяется. Вы также можете рассмотреть возможность добавления системы подписи сообщений, чтобы гарантировать подлинность сообщений между узлами.