p2p библиотека/программное обеспечение для синхронизации файла между известными серверами

Вопрос или проблема

Я ищу способ поделиться файлом в p2p-формате между несколькими серверами.

Серверы знают друг о друге, они находятся в дата-центрах, у них есть соединение друг с другом, но их много. Между ними нет NAT. Им нужно поделиться большим файлом друг с другом.

В данный момент я использую простой https сервер, и весь флот просто скачивает файл с сервера.

Я думал о том, чтобы написать способ разбивки файла на части, а затем распространять части и делиться ими в p2p-формате, и серверы, которые уже имеют некоторые части, будут их публиковать, и я осознал, что просто думаю о трекере торрентов.

Тем не менее, использование торрентов на флоте хорошо известных серверов кажется слишком сложным; там столько накладных расходов, которые бесполезны в этом случае, и весь протокол выглядит очень ориентированным на конечного пользователя, и так много настроек и версий всего.

IPFS выглядит несколько проще (и у них даже есть библиотеки на go), но мне не слишком важно DHT; мне не нужно искать файл по всему миру, я знаю список серверов.

Я могу закончить с IPFS, но это выглядит слишком сложно; мне не нужно глобальное самоорганизующееся сообщество; я знаю серверы. Список можно сохранить в конфигурационном файле на диске. Мне просто нужен способ поделиться файлами между ними.

(Идеальное программное обеспечение/библиотека должно быть использовано из golang, но я могу использовать оболочку, так что нормально, если это не так)

Рекомендую обратить внимание на открытое решение Syncthing.

Оно доступно на Windows, Linux, macOS, Android и других менее распространенных ОС.

Руководство по установке и использованию доступно по ссылке

Ответ или решение

Для решения задачи синхронизации файлов между известными серверами в P2P-режиме, стоит рассмотреть несколько подходов. Вы уже отметили своё желание использовать подходы, схожие с торрент-технологиями и IPFS, однако указали, что в вашем случае эти методы могут быть избыточными. Давайте рассмотрим ваше требование подробнее и предложим некоторые решения.

Синхронизация файлов: P2P-решения

  1. Использование Syncthing

    • Что такое Syncthing?
      Syncthing — это open-source решение для синхронизации файлов, которое позволяет легко обмениваться файлами между несколькими устройствами в реальном времени. Оно работает по принципу P2P, что значит, что каждый из серверов может одновременно выступать и в роли отправителя, и в роли получателя.

    • Преимущества:

      • Простота установки и настройки. Вы можете быстро настроить Syncthing на нескольких серверах, следуя официальной документации.
      • Поддержка различных платформ, включая Windows, Linux и macOS.
      • Автоматическая синхронизация изменений. Если файл изменится на одном из серверов, он автоматически будет обновлён на всех остальных.
      • Шифрование при передаче данных, что добавляет уровень безопасности.
    • Недостатки:

      • Может быть несколько сложным в настройке для больших масштабов, особенно если вам нужно заранее установить конфигурацию серверов.
      • Необходимость открытых портов в брандмауэрах для связи между серверами.
  2. Реализация кастомного решения (например, на Go)

    • Вы можете создать своё решение для синхронизации, разбивая файлы на блоки, как вы упомянули. Подобный подход позволяет управлять данными более гибко, так как вы будете контролировать процесс передачи и хранения файлов.

    • Используя стандартные библиотеки Go, такие как net, os, и sync, можно создать простую систему, которая будет обмениваться файлами между серверами напрямую, без необходимости в сложных протоколах.

    • Примерный алгоритм:

      1. Разделите файл на несколько частей (чеков).
      2. Реализуйте механизм, который будет отслеживать, какие части уже есть на сервере.
      3. При наличии новых частей маленькими чанками отправляйте их на другие сервера.
      4. По завершении передачи убедитесь, что все сервера имеют актуальные версии файлов.
  3. Использование особых библиотек для P2P-соединений

    • Вы можете использовать библиотеку для P2P-соединений, например, libp2p, которая предоставляет низкоуровневое API для построения P2P-сетей. Хотя это может быть несколько сложнее, а также требует более глубокого понимания сетевых протоколов, это даст вам полный контроль над вашим решением.

Заключение

Учитывая вашу ситуацию, Syncthing представляется как наиболее удобный и надежный вариант для реализации вашей задачи без избыточных сложностей. Если вы всё же хотите реализовать решение на Go, кастомная реализация с использованием стандартных библиотек может предоставить вам необходимую гибкость. Рассмотрите свои конкретные требования к производительности, безопасности и управлению, чтобы выбрать оптимальное решение.

Оцените материал
Добавить комментарий

Капча загружается...