Для синхронизации данных в приложениях не подходят обычные «файловые» облачные хранилища. Слишком много проблем с консистентностью данных приходится решать самим авторам приложений. Поэтому сегодня мы открываем всем желающим технологию DataSync API, которую команда Яндекс.Диска разрабатывала для собственных сервисов Яндекса. Она позволяет синхронизировать структурированные данные между облачным хранилищем и устройствами. API использует логин Яндекса, который есть почти у каждого пользователя интернета в России и у многих в других странах. DataSync мультиплатформенный и не завязан только на Android или iOS.
Мы правда очень рады, ведь еще три года назад, когда запускался Яндекс.Диск, хотели синхронизировать не только файлы между компьютерами, а вообще любые данные между всеми устройствами человека. Наша цифровая жизнь – это не только файлы, но еще и точки на картах, маршруты, закладки в браузере, список рекордов в компьютерной игре и много другое.
Уже более двух лет Яндекс.Браузер работает на технологиях синхронизации Я.Диска. В ближайшем будущем другие крупные сервисы Яндекса начнут объединять свои платформы на DataSync. Под катом — больше подробностей о том, как он устроен, зачем нужен, и примеры, на которых можно посмотреть и попробовать, как всё работает.
Когда-то базовым инфраструктурным элементом интернета стал веб-сервер, без которого теперь невозможно представить существование всемирной сети. Теперь времена изменились, и мы уверены, что облачная самосинхронизирующаяся база данных будет не менее важным элементом современного мультиплатформенного интернета.
Раньше у пользователя было только одно устройство и только один способ взаимодействовать с интернет-сервисом – пойти на сайт. И для разработчика все было просто. База-Код-Веб-интерфейс. Где-то в недрах сайта работала база данных, где разработчик сохранял нужные ему данные, и откуда их забирал, отображая на одном единственном устройстве пользователя, а точнее — в браузере его компьютера.
Однако времена сильно изменились, и теперь у человека может быть множество устройств, а один сервис может быть представлен целым набором приложений. Это сильно усложнило жизнь разработчика. У него всего стало больше: интерфейсов, баз, логики и даже языков программирования. Но самое ужасное — это данные. На каких-то устройствах есть локальные копии данных, которые живут на сервере и других устройствах, и их все необходимо синхронизировать между собой. Это вовсе не простая задача: возможны конфликты, потеря данных, потеря связи, требуется нормальная скорость работы на всех устройствах – и много другое.
Очевидно, что если разработчик каждый раз будет сам решать с нуля задачи синхронизации приложений и облачного хранения данных, он, скорее всего, забудет, что он собственно собирался сделать изначально или доберется до этого совсем не скоро.
Конечно же, задача решить описываемую проблему появилась и в Яндексе. Мы начали работать над созданием «облачной базы данных», которая освободит разработку от рутинной задачи синхронизации и позволит сфокусироваться на создании приложений.
Обычная база данных скучно живет на одном компьютере, а мы делали базу, которая живет одновременно в облаке и на всех устройствах пользователя. Это, разумеется, как готовое решение, принципиально упрощает задачу разработки мультиплатформенных приложений. Где бы ни были сохранены данные в такую базу – на телефоне, в браузере, на сервере, – ничего не потеряется и везде появятся актуальные данные.
Во внутренней документации на проект написано так: «DataSync API — это хранилище произвольных структурированных данных, привязанных к пользователю или паре пользователь + приложение. Оно заточено под возможность синхронизации между пользовательскими устройствами и нормальную работу в условиях плохой мобильной сети».
Для внешнего разработчика наша база данных очень похожа на популярную noSQL базу MongoDB — суть та же. Она состоит из коллекций, коллекции — из объектов. Объект — это набор key-value полей. Но мы поставили перед собой задачу сделать так, чтобы разработчик не думал о том, как ему связывать данные на разных устройствах и в облаке, а просто работал с нашим API, в то время как вся синхронизация данных происходила магическим образом. Конечно же, такая «магия» возможна, когда вы используете и облако, и клиентскую часть нашего «синхронизирующего» SDK.
И тут хочется чуть подробнее рассказать, какие проблемы и как мы решали, чтобы она случилась.
К сожалению, не доступен сервер mySQL