Синхронизация заметок
#slothpro #notes
Пару недель назад я задумал написать замену apple notes, как вы наверное помните, ну и пока отлично все движется. Дошел вот до стадии синхронизации... И чесслово, хотел с двух ног залететь и за пару часов написать простую синхронизацию.
Кажется идея то на поверхности. Ну rsync ж и погнале. Но не тут то было. Во первых я не хочу тащить доп. софт. Во вторых мне нужно, что б алгоритм работал кроссплатформенно. В третьих оказалось безумно интересно погрузиться в дебри и кишочки того, а как сделать правильный алгоритм синхронизации.
До этого проекта опыта с подобного рода задачами у меня не было. Чаще всего всегда была уже написанная инфраструктура или возможность использовать готовое решение (rsync), которыми можно было пользоваться и ни в чем себе не отказывать. Поэтому как-то не так сильно приходилось погружаться в то, а какие там есть трудности, особенности, ограничения и вообще.
Оказалось там водятся драконы 🙂
В целом об этих драконах есть достаточно много написанных книг, в частности таже Database Internals, которую мы недавно на стриме в Тинькофф читали. Да и тема распределенных транзакций, хореографии, балансировки, сортировки и т.д. не нова. Но если не брать уже готовые паттерны и практики и попытаться своим умом допетрить до хорошего решения - будет достаточно не просто и точно очень интересно!
Вот вам задачки по мере усложнения, которые можно разгонять в курилке или на кухне во время еды с коллегами:
- Как обеспечить консистентное копирование файлов с клиента на сервер и обратно без использования стороннего ПО?
- Как реализовать взаимное удаление файлов?
- Как реализовать оба механизма если клиентов больше 2х
- Как обеспечить работу этих клиентов при нестабильном сетевом соединении или при переодическом его отсутствии?
- Как минимизировать передачу информации между клиентом и серверов в этом случае?
- Как обеспечить атомарность внесения данных при одновременном изменении файла со стороны двух и более клиентов?
Короче спустя некоторое время, решения все придумать получилось, сейчас тестирую их реализацию и челенжу некоторые "свои" догадки в сравнении с общепринятыми стандартами, местами сильно корректируюсь. В сентябре судя по всему должен случится релиз с работающей синхронизацией по плану.
А вообще никогда бы не подумал, что чтение phd по rsync будет таким занимательным - https://www.samba.org/~tridge/phd_thesis.pdf 😉