PRAKTIKA.plyask.in

Утилита python-rsync: асинхронный инструмент для синхронизации файлов с поддержкой дифференциального обновления

Ты реализуешь полноценную CLI-утилиту, которая синхронизирует файлы между машинами, отправляя только изменённые блоки. Это отличный способ прокачать Python, асинхронное программирование, сетевые взаимодействия и алгоритмы, стоящие за реальными инструментами вроде rsync.

Предоплата 40 000 ₽

При идеальном результате могу вернуть до 100% — 40 000 ₽

Цель и задачи работы

Цель — разработать кроссплатформенное приложение на Python, которое умеет синхронизировать файлы между локальной и удалённой системой по принципу rsync: находить и передавать только изменённые части файлов. Задачи

  • Изучить алгоритм rolling checksum и принципы передачи по дельтам.
  • Продумать структуру приложения с упором на модульность и поддержку расширений (например, новые протоколы).
  • Реализовать CLI-интерфейс и минимум два способа передачи данных (локально и по сети).
  • Обеспечить корректную работу при больших объёмах данных и поддержать логирование и фильтрацию.

Содержание работы

В рамках работы тебе нужно будет

  • Изучить, как работает rsync, особенно rolling checksum и delta transfer. Понять, зачем нужны хеши на блоки (Adler32, MD5, SHA1) и какие из них быстрее.

  • Изучить способы передачи данных по сети: SSH, HTTP, WebDAV, возможно написать собственный простой TCP-сервер.

  • Спроектировать архитектуру: нужно либо два CLI-режима (клиент/сервер), либо один режим, который может работать в обе стороны.

  • Написать код на Python (желательно с использованием asyncio), который

    • Делит файл на блоки, считает хеши
    • Определяет отличия между локальной и удалённой версией
    • Передаёт только изменённые блоки
    • Поддерживает логирование, исключения по шаблону (.gitignore стиль)
  • Настроить тестирование (желательно на больших директориях), сравнить скорость и поведение с rsync.

  • Документировать код и оформить CLI-помощь.

Результат и критерии завершения работы

На выходе должен получиться исполняемый CLI-инструмент, запускаемый из консоли, умеющий синхронизировать две папки (локально и по сети), с передачей только изменённых блоков. Обязательные критерии завершения

  • Работает на Linux/macOS/Windows.
  • Поддерживает передачу через SSH или HTTP.
  • Передаются только изменённые части файлов.
  • Есть CLI-флаги для выбора путей, логирования, исключений.
  • Код оформлен и документирован.
  • Есть README с инструкцией.
  • Все критичные модули покрыты тестами.

Дополнительный плюс: производительность сравнима или лучше, чем у rsync, при синхронизации больших объёмов данных.