Обычное «файловое» облачное хранилище не подходит для синхронизации данных в приложениях.
Слишком много проблем с согласованностью данных приходится решать самим авторам приложений.
Поэтому сегодня мы открываем технологию каждому API синхронизации данных , который команда Яндекс.
Диск разработала для собственных сервисов Яндекса.
Он позволяет синхронизировать структурированные данные между облачным хранилищем и устройствами.
API использует логин Яндекса, который есть практически у каждого пользователя Интернета в России и у многих в других странах.
DataSync является мультиплатформенным и не ограничивается Android или iOS.
Мы действительно очень рады, потому что три года назад, когда запустился Яндекс.
Диск, мы хотели синхронизировать не только файлы между компьютерами, но и вообще любые данные между всеми человеческими устройствами.
Наша цифровая жизнь – это не только файлы, но и точки на картах, маршруты, закладки в браузере, список записей в компьютерной игре и многое другое.
Яндекс.
Браузер уже более двух лет работает над технологиями синхронизации Я.
Диск.
В ближайшее время другие крупные сервисы Яндекса начнут интегрировать свои платформы с DataSync. Под катом подробнее о том, как это работает, зачем это нужно, и примеры, где можно посмотреть и попробовать, как все работает. Когда-то основным элементом инфраструктуры Интернета стал веб-сервер, без которого сейчас невозможно представить существование Всемирной паутины.
Сейчас времена изменились, и мы уверены, что облачная самосинхронизирующаяся база данных станет не менее важным элементом современного мультиплатформенного Интернета.
Раньше у пользователя было только одно устройство и только один способ взаимодействия с интернет-сервисом – зайти на сайт. А для разработчика все было просто.
Веб-интерфейс базового кода.
Где-то в недрах сайта была база данных, куда разработчик сохранял нужные ему данные и откуда брал их, отображая на одном-единственном устройстве пользователя, а точнее, в браузере его компьютера.
Однако времена сильно изменились, и теперь у человека может быть много устройств, а один сервис может быть представлен целым набором приложений.
Это очень усложнило жизнь разработчику.
У него есть больше всего: интерфейсов, баз данных, логики и даже языков программирования.
Но самое страшное — это данные.
Некоторые устройства имеют локальные копии данных, которые находятся на сервере и других устройствах, и все они должны быть синхронизированы друг с другом.
Это совсем непростая задача: возможны конфликты, потеря данных, потеря связи, требуется нормальная скорость работы на всех устройствах — и многое другое.
Очевидно, что если разработчик каждый раз будет решать проблемы синхронизации приложений и облачного хранения данных с нуля, он, скорее всего, забудет, что он на самом деле намеревался сделать изначально, или доберется до этого не очень скоро.
Разумеется, задача по решению описанной проблемы появилась и в Яндексе.
Мы начали работать над созданием «облачной базы данных», которая освободила бы разработку от рутинной задачи синхронизации и позволила бы сосредоточиться на создании приложений.
Обычная база данных скучно живет на одном компьютере, но мы создали базу данных, которая живет одновременно в облаке и на всех устройствах пользователей.
Это, конечно, как готовое решение, принципиально упрощает задачу разработки мультиплатформенных приложений.
Где бы в такой базе данных ни сохранялись данные – на телефоне, в браузере, на сервере – ничего не потеряется и везде будут актуальные данные.
Во внутренней документации проекта написано так: «DataSync API — хранилище произвольных структурированных данных, привязанных к пользователю или паре пользователь+приложение.
Он создан для возможности синхронизации между пользовательскими устройствами и нормальной работы в условиях плохой мобильной сети».
Для внешнего разработчика наша база данных очень похожа на популярную.
база данных noSQL MongoDB - суть та же.
Он состоит из коллекций, коллекций объектов.
Объект представляет собой набор полей «ключ-значение».
Но мы поставили перед собой задачу сделать так, чтобы разработчик не думал о том, как соединить данные на разных устройствах и в облаке, а просто работал с нашим API, при этом вся синхронизация данных происходила волшебным образом.
Конечно, такое «волшебство» возможно, если вы используете как облако, так и клиентскую часть нашего «синхронизирующего» SDK.
И здесь мне хотелось бы немного подробнее рассказать, какие проблемы и как мы их решали, чтобы это произошло.
Конфликты
В предлагаемой мировой структуре у нас есть множество экземпляров базы данных, и все они меняются локально.В такой ситуации неизбежно возникают конфликты, когда данные изменяются одновременно в разных местах.
И мне совершенно не хочется терять данные.
Алгоритм решения этой задачи вполне традиционен:
- все экземпляры данных имеют версию, о которой знает каждое устройство и сервер;
- при подаче изменений они отправляются и проверяются на сервере;
- в случае несоответствия версий клиент получает список изменений, о которых он не знал, и может корректно разрешить конфликт.
Прозрачная работа без сети
Мобильное приложение (да и многие другие) не может рассчитывать на стабильное соединение, а данные сервиса могут измениться в любой момент. Это не должно быть проблемой для тех, кто использует нашу облачную базу.Очевидно, это также очень важно учитывать в нашем SDK. Мы решили эту проблему с помощью следующего плана действий:
- вся связь с сервером осуществляется нашим SDK;
- связь с сервером полностью асинхронна и происходит в фоновом режиме;
- Методы, которые SDK представляет разработчикам, никогда не ждут завершения сетевого чтения/записи.
Сначала мы убедились, что каждое «приложение» синхронизируется с таким же на других платформах и на сервере.
Но потом нашлись примеры, когда было важно синхронизировать данные между разными приложениями на одном устройстве — грубо говоря, иметь общую базу данных.
А потом мы реализовали и это.
Сейчас, например, если у вас есть облегченное приложение и полноценное, то вы легко сможете перенести данные пользователя, решившего обновиться, с одного на другое.
Или отправляйте или получайте данные из партнерского приложения.
Как работает API
При работе с API клиент в основном оперирует следующими понятиями:- база данных (БД),
- дельта-обновление,
- снимок,
- конфликт.
Но все операции по сути выполняются с отдельными объектами.
Чтобы однозначно идентифицировать объект, необходимо указать его идентификаторы и идентификаторы коллекции.
Идентификатор состояния базы данных — это номер версии.
В API реализована схема контроля версий, которая позволяет отслеживать и фиксировать конфликтные ситуации.
При создании базы данных ревизия равна нулю; если для этой базы данных будут получены какие-либо дальнейшие изменения, номер версии увеличится на единицу.
Любые изменения вносятся путем отправки дельта-обновлений.
С его помощью вы можете создавать, удалять и редактировать записи.
Конфликтом считается ситуация, при которой клиент отправляет на сервер ревизию, более молодую, чем существующая на нем.
В этом случае сервер смотрит на входящий номер ревизии и отправляет набор изменений к существующей версии.
В случае, когда ревизия на клиенте настолько устарела, что сервер не может предоставить список необходимых изменений, клиенту необходимо получить снимок базы данных и обновиться до текущей ревизии самостоятельно.
Схема разрешения конфликтов оставлена на усмотрение разработчиков.
Снимок базы данных отражает состояние текущей версии базы данных на сервере.
Его необходимо запрашивать при создании локальной базы данных на устройстве или при разрешении конфликтных ситуаций.
Чтобы обмениваться данными только внутри вашего собственного приложения, вы должны запросить права доступа для хранения данных приложения; для обмена данными необходимо запросить доступ к общим данным пользователя.
Заключение
Начните использовать HTTP API И JS SDK Ты можешь сейчас.В ближайшее время мы выпустим SDK для Android и iOS. Посмотреть, как все работает, можно на примере адресной книги в протестировать браузерное приложение .
Он демонстрирует, как можно синхронизировать телефонные номера пользователей с шагом в 20 секунд. Данные синхронизируются с облаком и любым экземпляром веб-приложения.
Самый простой способ убедиться в этом — открыть две вкладки в браузере.
Теги: #Разработка сайтов #Яндекс #Yandex API #синхронизация данных #синхронизация
-
Экономическая Модель Для Mmo
19 Oct, 24 -
Google Рассказывает О Своей Формуле Поиска
19 Oct, 24