
Что происходит при синхронизации? Критический момент, который определяет судьбу автономной кассы
Мы разработали Pultrack — кассу и приложение для управления товарами для небольших розничных магазинов, работающих с двумя валютами и в автономном режиме. Поэтому мы много думаем не только о том, работает ли система без интернета, но и о том, что происходит в момент переподключения. На второй вопрос обращают гораздо меньше внимания, чем он заслуживает.
Почему все вдруг говорят об автономных системах?
Недавние описания архитектуры касс приводят к одному выводу: подключение должно рассматриваться как слой синхронизации, а не как зависимость. Локальное хранилище, очередь записей и автоматическое согласование при возврате сети становятся стандартным подходом, а не дополнительной функцией.[1] Для магазинов на рынках с перебоями электричества и интернета это важно, потому что продажи не могут просто остановиться при разрыве соединения.[2] Часто встречается различие между «способностью работать без сети» — деградированным режимом отката — и «автономным режимом в приоритете», где локальное устройство является основным источником данных, а облако второстепенным.[3] Это не просто теория. Касса, которая только переносит отключение, может заблокировать скидки, скрыть часть каталога или отказать в печати чека при потере сигнала. Истинный дизайн с автономной архитектурой держит правила цен, количество товаров и печать чеков полностью на локальном устройстве, поэтому продавец никогда не заметит разницы между днем хорошей и плохой связи.[4]
Что происходит в момент восстановления соединения?
Это та часть, о которой поставщики говорят реже всего, и именно она определяет, работает ли автономная система в повседневной жизни. Когда телефон или касса переподключается после часов или дней автономной работы, она должна согласовать очередь локальных транзакций с тем, что произошло на других устройствах или в облаке. Хорошо спроектированные системы используют идемпотентные API, чтобы продажа, случайно отправленная дважды, не была записана два раза. Они применяют правила разрешения конфликтов, например когда два сотрудника продали последний товар с двух разных касс, прежде чем одна система увидела обновление другой.[5] Для небольшого магазина это не теоретический сценарий. Представьте киоск с одним планшетом с Wi-Fi и одним телефоном, используемым как резервная касса во время отключения электричества. Если обе системы регистрируют продажи одного товара в автономном режиме, то перепродажа неизбежна — единственный вопрос в том, обнаружит ли система это при синхронизации или молча перепишет одну регистрацию товара другой.[6] Опыт, полученный при создании таких систем, подчеркивает важность расставления приоритетов для одних операций (например, завершения напечатанного чека) над другими и проектирования очереди синхронизации так, чтобы критические записи не были потеряны или переупорядочены неправильно.
Означает ли «автономный режим» что магазин работает ровно как в онлайне?
В принципе да — в этом обещание. Автономный режим, описываемый в современной литературе о продуктах, должен быть полноценным для ведения бизнеса, а не урезанным режимом на экстренный случай: полный доступ к каталогу, правила цен и скидок, печать чеков и обновление товаров должны работать локально.[3] На практике полнота этого автономного режима сильно различается между поставщиками и в зависимости от того, что на самом деле означает «обновление товаров» под капотом. Перед тем как предположить, что система действительно работает независимо на уровне магазина, стоит задать несколько вопросов:
- Поддерживает ли автономный режим ваш полный прайс-лист и правила скидок или только кэшированное подмножество?
- Может ли система напечатать действительный чек без интернета, включая любые необходимые налоговые поля?
- Что происходит с количеством товаров на двух устройствах, которые отошли в автономный режим одновременно?
- Есть ли видимый журнал или уведомление при разрешении конфликта во время синхронизации или это происходит молча?
- Может ли продавец увидеть какие продажи «ожидают синхронизации» а какие подтверждены, чтобы понять, являются ли их книги предварительными?
Почему это особенно важно на развивающихся рынках?
На рынках с частыми отключениями момент синхронизации происходит намного чаще, чем на рынке со стабильным широкополосным интернетом. Магазин, который теряет соединение на два часа каждый день, сталкивается не с граничным случаем раз в год — это происходит ежедневно. Это повышает ставки на правильное разрешение конфликтов, потому что небольшие ошибки накапливаются: количество товара, которое неправильно на единицу или две после каждой синхронизации, в конце концов приводит к расхождению между полкой и товаром, что заставляет продавца перестать доверять программе и вернуться к блокноту. Также стоит быть честным об имеющихся данных: большая часть того, что публикуется об архитектуре автономной кассы прямо сейчас, поступает из блогов поставщиков, маркетинговых страниц товаров и от отдельных инженеров, описывающих свои разработки, а не из независимых исследований или крупномасштабных исследований.[1][4] Архитектурные рассуждения верны и подход — локальное хранилище в первую очередь, фоновая синхронизация позже, идемпотентные записи — согласован во всех источниках, но утверждения о надежности или «неостановимой» доступности следует рассматривать как позиционирование поставщика, а не как проверенные результаты.
Что должен действительно проверить владелец магазина перед выбором системы?
Учитывая, что базовый подход стандартизирован — локальная база данных в первую очередь, синхронизация облака позже, разрешение конфликтов для критических задач, таких как печать — различие между товарами в меньшей мере в том, «работает ли без интернета», а в большей — в том, «насколько элегантно система справляется с восстановлением соединения».[6] В Pultrack это то, что мы рассматриваем как основное, а не как украшение: двухвалютные суммы, уровни товаров и чеки должны корректно согласовываться между устройствами и днями без соединения, и продавец должен видеть простыми словами какие продажи все еще ожидают синхронизации, а какие полностью подтверждены. Это более узкое и проверяемое утверждение, чем «работает без интернета», и именно оно, по нашему мнению, предсказывает, будет ли система работать в магазине, теряющем электричество большую часть дня. Если вы оцениваете любую автономную кассу — нашу или чьей-либо еще — попросите посмотреть журнал синхронизации после намеренного отключения от интернета. Поставщик, который может вам показать ровно как он разрешил конфликтующее обновление товара, демонстрирует что-то действительное. Поставщик, который может только сказать что приложение «работает без интернета», еще не показал вам часть, которая имеет значение больше всего.