Как обстоят дела с внедрением сети передачи сообщений p2p?
Я знаю, что Google быстро дает массу результатов, и литература по этой теме очень богата, и это именно та проблема. Среди множества возможных решений я не уверен, какой именно является лучшим, современным выбором для моих конкретных потребностей.
Я пытаюсь реализовать p2p-сеть через Интернет с единственной и единственной функцией трансляции сообщений на онлайн-узлы. Чтобы подключиться к сети, вы должны иметь возможность указать существующие IP-адреса. Когда вы это делаете, вы обнаруживаете некоторых пиров и поддерживаете с ними активную связь. Затем вы можете отправлять сообщения на любой другой узел. Прямого общения нет, каждое отправленное сообщение получают все остальные. Я хочу, чтобы эта сеть была максимально эффективной и работала поверх UDP.
Как называются некоторые современные алгоритмы для решения этой проблемы в указанной здесь форме?
2 ответа
Трансляция одного сообщения в оверлейной сети через Интернет - дело довольно простое. Вы присоединяетесь к сети, создаете рандомизированную или структурированную таблицу маршрутизации соседей, наполняете сообщение сообщениями соседей, они делают то же самое со своими соседями, за исключением некоторого сокращения, чтобы избежать циклов пересылки.
Сложность возникает из-за дополнительных ограничений и требований, которые варьируются от сети к сети. Например, проблемы с доверием в анонимных настройках, оптимизация задержек, оптимизация потоков многих сообщений с высокой пропускной способностью (прямая трансляция видео с помощью p2p) и т. Д.
Если вы хотите узнать о концепциях настройки децентрализованной P2P-архитектуры, вы можете взглянуть на Dat Project, который предоставляет экосистему модулей для обмена данными P2P через Интернет, таких как Hypercore (необработанные потоки P2P) и Hyperdrive (передача файлов поверх hypercore). У них есть хорошая документация о технических концепциях, проблемах и способах их решения.
Некоторые из проблем в проектах P2P:
- Маршрутизаторы и брандмауэры NAT: преодоление за счет реализации NAT Traversal и пробивания дырок UDP (см . Состояние NAT Traversal от ZeroTier)
- Обнаружение одноранговых узлов: Dat Project использует Gossiping как эффективный способ для поиска множества партнеров в сети и простого (protobuf) проводного протокола для связи (см. Hyperdiscovery и Hypercore Protocol).
- Передача / синхронизация данных P2P: Hypercore реализует журналы только для добавления на каждом одноранговом узле и деревья Merkle для агрегирования и дедупликации фрагментов данных от других одноранговых узлов в правильном порядке.
Проект TCP поддерживает как TCP, UDP, WebRTC, так и BittorrentDHT.
Пожалуйста, прочитайте некоторые из их документов документации для получения более подробной информации об этих концепциях и дизайне протокола: