malikov.tech

Синхронизация заметок

#slothpro #notes

Пару недель назад я задумал написать замену apple notes, как вы наверное помните, ну и пока отлично все движется. Дошел вот до стадии синхронизации... И чесслово, хотел с двух ног залететь и за пару часов написать простую синхронизацию.

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

До этого проекта опыта с подобного рода задачами у меня не было. Чаще всего всегда была уже написанная инфраструктура или возможность использовать готовое решение (rsync), которыми можно было пользоваться и ни в чем себе не отказывать. Поэтому как-то не так сильно приходилось погружаться в то, а какие там есть трудности, особенности, ограничения и вообще.

Оказалось там водятся драконы 🙂

В целом об этих драконах есть достаточно много написанных книг, в частности таже Database Internals, которую мы недавно на стриме в Тинькофф читали. Да и тема распределенных транзакций, хореографии, балансировки, сортировки и т.д. не нова. Но если не брать уже готовые паттерны и практики и попытаться своим умом допетрить до хорошего решения - будет достаточно не просто и точно очень интересно!

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

  • Как обеспечить консистентное копирование файлов с клиента на сервер и обратно без использования стороннего ПО?
  • Как реализовать взаимное удаление файлов?
  • Как реализовать оба механизма если клиентов больше 2х
  • Как обеспечить работу этих клиентов при нестабильном сетевом соединении или при переодическом его отсутствии?
  • Как минимизировать передачу информации между клиентом и серверов в этом случае?
  • Как обеспечить атомарность внесения данных при одновременном изменении файла со стороны двух и более клиентов?

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

А вообще никогда бы не подумал, что чтение phd по rsync будет таким занимательным - https://www.samba.org/~tridge/phd_thesis.pdf 😉