Local first — это подход к разработке приложений, когда данные обрабатывают в первую очередь на устройствах пользователей, а не в облаке. Обсудим ключевые принципы подхода и примеры в контексте организации совместной работы.

Фото: Sten Ritterfeld / Unsplash.com
Фото: Sten Ritterfeld / Unsplash.com

Автономность — важнее

С приложениями на базе local first подхода можно работать, даже если подключение нестабильно или вовсе отсутствует, — данные синхронизируются позже. Это может быть музыка, подкасты, карты и сервисы совместной работы. В последнем случае избежать проблем с синхронизацией чуть сложнее, однако решений может быть несколько: от предупреждений о конфликте (с предложением сохранить вариант документа) до альтернативного способа, когда правки будут рекомендациями для других пользователей.

В целом local first стали широко обсуждать всего несколько лет назад. В 2019 году группа разработчиков во главе с исследователем из Кембриджского университета опубликовала статью о его ключевых принципах. Первый из них — быстрый отклик на внесение изменений. Авторы пишут, что в local first приложениях пользователь не должен видеть спинер загрузки и ждать, пока данные синхронизируются с сервером. Еще один принцип — синхронизация данных между разными устройствами пользователя, а чтобы обеспечить автономную работу без подключения, авторы рекомендуют воспользоваться Service Worker'ами — прокси для кеширования между клиентом и облаком.

Также исследователи обращают внимание на то, что local first подход обеспечивает конфиденциальность, защищая пользователей и вендоров от массовых утечек, а также сохранность личной информации на устройствах в случае ухода того или иного local first сервиса с рынка. Однако некоторые разработчики идут дальше и предлагают обмениваться информацией через P2P-сеть. Сейчас на рынке можно найти ряд открытых инструментов для проектирования таких приложений. Обсудим некоторые из них.

Решения и протоколы

Объединяя local first подход и возможности P2P-решений, разработчики запускают демо-аналоги известных сервисов: для планирования задач, совместной работы над дизайном и других. Среди таких приложений можно выделить, например, Trellis — клон Trello с открытым исходным кодом, с помощью которого команда может вести общую таблицу заметок и выставлять задачи для участников команды. Trellis построен на фреймворке Electron. В настольном приложении разработчики реализовали MPL (Magic Persistence Layer) — P2P-систему для автоматического слияния версий документов.

Ещё есть сервис PushPin — интерактивная доска, на которой можно размещать файлы, диаграммы, а также оставлять комментарии. Чтобы избежать конфликтов синхронизации, разработчики одного и второго решения использовали Automerge (развернутый материал по теме на английском). Она работает с реплицируемыми типами данных (CRDT) и отвечает за их сжатие и подготовку к передаче вносимых изменений по сети.

Другой примечательный проект — Affine. Это — local first платформа для управления базой знаний. Основная идея заключается в том, что у пользователя есть полный контроль над данными, и он может работать с ними локально, сохраняя изменения. Основная отличительная особенность — фокус на алгоритмах операциональных преобразований (Operational Transformation, OT), позволяющих поддерживать согласованность данных. Близкий по смыслу проект для разработчиков представила команда Dendron.

Фото: Arthur Franklin / Unsplash.com
Фото: Arthur Franklin / Unsplash.com

Некоторые из энтузиастов разрабатывают инструменты для проектирования подобных сервисов, например, p2panda для local first приложений. Он представляет собой SDK и реализацию узла — aquadoggo. Последний обрабатывает запросы с помощью GraphQL, позволяет находить узлы и устанавливать P2P-соединения, поддерживает репликацию.

На p2panda построено приложение Meli на Android. Оно представляет собой базу данных для обнаружения и категоризации пчел Meliponini в Амазонии. Meli запустили совместно с НКО, которая занимается вопросами изменения климата, также в 2020 году проект выиграл грант Евросоюза. Еще один пример — платформа Holochain для разработки P2P-приложений с прицелом на local first. Здесь нет стремления к консенсусу, и вместо этого каждое приложение проверяет поступающие к нему данные, ориентируясь на заданные правила. Такой подход должен решить проблему масштабирования. Однако пока есть всего пара проектов на платформе, например, P2P-хостинг Holo и соцсеть Hylo.

Из других известных платформ для создания приложений с акцентом на local first стоит выделить Replicache. С его помощью можно проектировать сервисы, которые работают даже при нестабильном подключении к интернету, используя смешанный подход: синхронизировать данные с одним или несколькими серверами. На основе Replicache был разработан, например, аддон для создания карт в Figma — Placemark, а также сервис инвентаризации оборудования — Assetbots. Их основная фишка — стабильная работа в оффлайне и быстрая синхронизация данных после восстановления подключения.

Что дальше

Local first — это не только про совместную работу без доступа к сети, но и про контроль над собственными данными. Облачные сервисы в любой момент могут пострадать от атак или санкций, и данные будет уже не вернуть. Поэтому хранение информации на устройствах делает ситуацию более управляемой. Для проектирования систем подход local first создаёт чуть сложнее классических, и в особенности это касается проектов с моделью P2P. Их авторам приходится искать способы разрешения конфликтов, однако готовые платформы и SDK появляются все чаще и помогают с внедрением local first.

Есть мнение, что подход local first станет новым open source с точки зрения его повсеместного распространения и влияния на развитие ниши разработки.

Дополнительное чтение

The Cloud Is a Prison. Can the Local-First Software Movement Set Us Free. Авторы статьи считают, что local first способствует созданию более эффективных приложений и позволяет и позволяет использовать новые возможности аппаратного обеспечения. Это — достаточно простой материал для знакомства с концепцией и ее перспективами.

The forgotten 8th Principle of Local First. В материале описаны ключевые принципы local first приложений: мгновенный отклик, возможность пользоваться без подключения, удобство совместной работы, безопасность, сохранность и доступность данных. К этим принципам автор добавляет экологичность (в прямом смысле этого слова): от снижения объемов передаваемых данных и используемых для этого ресурсов мобильных устройств и сетевой инфраструктуры до оптимизации энергопотребления в дата-центрах.

CRDTs solve distributed data consistency challenges. Автор рассказывает о реплицируемых типах данных (CRDT) как о способе решить проблему с синхронизацией изменений. Главное преимущество CRDT — децентрализация и масштабируемость, но упоминаются и ограничения, такие как небольшой набор допустимых операций и требования к ресурсам. Указаны различные области применения, также примеры реализации. Еще автор объясняет, как Google Docs использует операциональные преобразования (OT) для управления правками и их синхронизации. В статье также подробно описывается, как работают операциональные преобразования для разрешения конфликтов.

Some notes on Local-First Development. Автор объясняет, почему активно развивается local first разработка, и рассуждает, останется ли эта концепция нишевой или заменит традиционные подходы. Также он рассматривает проблемы, связанные с обработкой CRUD-операций при синхронизации на основе CRDT и предлагает способы их решения.

Local-first sync for Postgres from the inventors of CRDTs. Это подробных разбор новой версии ElectricSQL для приложений, ориентированных на локальное хранение данных, — слоя синхронизации с двунаправленной репликацией. Решение позволяет разрабатывать приложения с мгновенным откликом и многопользовательским взаимодействием.

Developing local-first software. Материал от разработчиков ElectricSQL, в котором они рассказывают о перспективах и особенностях local first подхода с примерами. В частности о том, как переход к local first влияет на безопасность приложений, бизнес-логику и работу с базой данных на клиентской стороне. Также затронуты вопросы асинхронной обработки данных, их согласованности и динамической репликации.

Towards Trustworthy and Explorable CRDT Applications with the Automerge Model Checker. Исследователи подсвечивают проблемы, связанные с CRDT: непредсказуемые конфликты с синхронизацией документов и сложности с созданием подходящих моделей данных. Для их решения авторы представляют Automerge Model Checker (AMC на GitHub).

Комментарии (0)