2. Бесконечная память!
У Google в 1998 было 147GB
данных. Сейчас, за $100 можно
купить 128GB microSD карту
для телефона!
Память – дешёвая и почти
бесконечная!
На новые телефоны ставят
64-битные многоядерные
процессоры – этого достаточно
для сложной логики.
20141998
Сейчас, узкое место – сеть!
3. Пользователи ждут загрузки
данных часто и подолгу!
Мобильные и веб- приложения "едят"
всё больше данных, однако время
отклика в сетях не улучшается
(физика).
!
Мобильные устройства работают в
беспроводных сетях, которые
по природе своей ненадежны (физика).
!
У одного пользователя несколько
устройств: планшет, телефон...
Он ожидает мгновенной синхронизации
данных между устройствами.
!
Сеть медленна и ненадёжна.
!
И?
4. Истории из жизни
Пользователь едет в аэропорт,
опаздывая на рейс.
Регистрируется с телефона на
сайте авиакомпании. Нажав ОК,
не заметил, что пропал
интернет. Все данные потеряны.
В iCloud, пропадающий WiFi
вызвал сбой синхронизации.
Пользователь сделал 10
слайдов, но на сервер
сохранился только первый.
При отправке письма из веб-
интерфейса в вагоне метро,
пользователь не заметил, что
пропал интернет. Браузер
пишет "Web page not available",
текст письма потерян.
На компьютерной конференции,
WiFi сеть перегружена, 3G
"тормозит". Есть замечательный
мобильный сайт с расписанием
докладов, но участники
предпочитают смотреть в буклет.
Официант делает заказ через
приложение в iPod. Но, на
втором этаже ресторана в углу,
WiFi не ловит. Обидная заминка,
официант уходит ловить WiFi.
В кафе ЦПКиО, клиент
понимает, что ему необходимо
воспользоваться клиент-
банком. WiFi крайне
ненадёжный, приложение
показывает "часики" и ошибки.
5. Решение: всё кэшировать
и синхронизировать
Когда данные уже получены, кэширование –
бесплатно!
Если данные заранее запасены в кэше:
• никаких сообщений "идет загрузка...";
• можно работать в оффлайне;
• неустойчивое соединение – не проблема
Пользователь очень доволен!
Но с "тотальным" кэшированием есть одна
загвоздка:
• данные меняются и локально и на сервере
• а значит, инвалидации кеша недостаточно
• нужны версионирование и синхронизация
(это сложней)
6. CRDT позволяет "тотальное"
кэширование и синхронизацию
CRDT: технология синхронизации данных
• фоновая синхронизация в режиме реального времени
• версионирование (можно отличить новое от виденного)
• поддержка работы в offline, кэширования, предзагрузки
• бесконфликтное слияние конкурентных изменений
• CRDT используются в Cassandra, Riak
Causal trees: совместное редактирование (как Google Docs)
• это основанная на CRDT замена для OT*
• полностью кешируется, работает в оффлайне
• реализуемо в браузерах (JavaScript, contentEditable)
• сохраняет авторство (кто что написал?)
• показ изменений в тексте (что поменялось?)
• первоначально разработано для letters.yandex.ru
* Operational Transformation
7. Swarm: CRDT в браузере
Swarm: кэш объектов с real-time синхронизацией
• библиотека для репликации модели (M из MVC)
• как "Dropbox для объектов"
• клиентский код: JavaScript (ObjC, Java в плане)
• серверный код: node.js (Java в плане)
• Backbone-подобная, ~2 тыс. строк кода
Citrea: совместный редактор текста
• работает поверх DOM
• отслеживает историю изменений и авторство
• как "Google Docs для вашего сайта"
8. Создание системы тотального
кэша с нуля – это человеко-годы
"There are only two hard things in
Computer Science: cache
invalidation and naming things"
– некий P.Karlton
Хранение данных на стороне
клиента превращает Web систему
(простую) в AP* систему (сложную)
Разработка займёт человеко-годы.
Мы эту работу проделали!
* по теореме CAP
9. Преимущества наших
решений
• приложение работает с локальной репликой данных,
временная пропажа интернета не вызывает ошибок и потери
данных (особенно актуально для веб-приложений)
• мгновенное время отклика приложения, т.к. не нужна
пробежка к серверу на большинство действий пользователя
• разработчик освобождён от написания рутинного сетевого
кода, в т.ч. обработки сетевых ошибок, сериализации и т.п.
• экземпляры приложения на разных устройствах
синхронизируются в реальном времени "сами собой"
• уменьшается передача данных на клиента, что особо
актуально для устройств на слабых мобильных соединениях
10. Команда: мы реализуем CRDT
быстрей, чем пишут теорию! *
Виктор Грищенко, к.ф.-м.н., УрГУ и
Университет Технологии Дельфта
(Нидерланды), Банк России, Яндекс,
отвечает за науку.
Алексей Баландин, УрГУ, Наумен,
Билайн, ЭйТи Консалтинг, gosuslugi.ru,
отвечает за энтерпрайз.
* мы обнаружили это на PaPEC'14