Сеть, о которой идёт речь, работает в России, Казахстане и Беларуси; ранее была представлена в ОАЭ (франчайзи в этом регионе позже отключили от сети), рассматривается запуск в Узбекистане. Основная часть точек — в России. Это создаёт вполне конкретное техническое ограничение: устойчивость интернет-соединения и доступность внешних сервисов между разными странами присутствия — не одинаковы, и то, что стабильно работает в одном регионе, может работать заметно хуже или быть недоступным в другом. Эта разница ощущается уже на этапе разработки, а не только в эксплуатации.
Региональные инстансы вместо одной точки отказа
Архитектурное решение — не одна централизованная система, обслуживающая все страны из одной точки, а несколько копий (инстансов) приложения, каждая из которых обслуживает свой регион. Логика в том, чтобы пользователь в конкретной стране получал быстрый и стабильный отклик от инфраструктуры, физически и сетевым образом ближе к нему, — а не зависел от связи с сервером на другом конце света и от того, насколько хорошо тот сервер доступен именно из этой страны.
Региональные инстансы и центральное хранилище
Дальше эти региональные инстансы сводятся в единое хранилище данных для аналитики по сети в целом — головная компания должна видеть общую картину продаж, лояльности, эффективности ресторанов вне зависимости от того, в какой стране находится конкретная точка, даже если оперативно каждый регион обслуживается собственной копией платформы.
Что варьируется по странам
Не вся бизнес-логика одинакова во всех регионах — часть настроек платформы сделана явно на уровне страны, а не единого глобального значения:
валюта и, при необходимости, обменный курс для бонусов лояльности, если предусмотрен их пересчёт между регионами;
максимальный процент оплаты заказа бонусами и условия реферальной программы — они могут отличаться по странам;
доступность конкретных внешних сервисов — например, интеграция с определённым сервисом доставки может быть доступна в одной стране и не быть доступна в другой из-за локальных ограничений или отсутствия партнёрства.
Технически конфигурация лояльности в платформе начинается именно с создания профиля страны — это отражает то, что мультирегиональность заложена не поверх готовой системы, а на уровне модели данных с самого начала.
Локальные зависимости, о которых легко забыть
Часть решений в архитектуре продиктована не бизнес-логикой, а рисками, специфичными для конкретного региона. Например, для карт в мобильном приложении команда написала собственную обёртку под Яндекс Карты для React Native — решение, связанное с неопределённостью в том, насколько долго и стабильно в регионе продолжит работать альтернативный картографический сервис. Такие решения нельзя предугадать заранее по одному только техническому заданию — они появляются по мере того, как команда сталкивается с конкретными ограничениями конкретного региона.
Обсудим мультирегиональную архитектуру для вашей сети
Выходите на новый рынок и не хотите пересобирать платформу под каждую страну заново?
Чего не стоит недооценивать при запуске в новой стране
Опыт этого проекта показывает несколько пунктов, которые стоит проверить до, а не после запуска в очередной стране:
Юридические лица и локальная фискализация. У каждой страны свои требования к чекам и платежам — это не техническая деталь, а условие, без которого точка не может легально принимать оплату.
Устойчивость связи между регионом и остальной инфраструктурой. Стоит заранее проверить, как ведёт себя интеграция при деградации или временной потере связи с центральным хранилищем — региональный инстанс не должен переставать работать из-за того, что недоступна аналитика.
Локальный список доступных партнёров по доставке и платежам. Сервис, который используется в одной стране, может быть недоступен или юридически невозможен в другой — это стоит сверить на этапе планирования, а не разработки.
Перевод интерфейса и контента. Мультиязычность — отдельная задача, не совпадающая с мультирегиональностью: язык интерфейса и страна размещения ресторана не всегда совпадают один к одному.
С какого момента стоит проектировать платформу как мультирегиональную, если сейчас сеть работает в одной стране?
Если экспансия в другие страны реально стоит в стратегии бизнеса, разумнее заложить страновую конфигурацию (валюта, настройки лояльности, доступные интеграции) на уровне модели данных с самого начала — переделывать это постфактум на действующей системе заметно дороже.
Что произойдёт с региональным инстансом, если временно пропадёт связь с центральным хранилищем?
Региональный инстанс продолжает обслуживать свой регион локально — сбор в центральное хранилище для сквозной аналитики можно (и в этой архитектуре нужно) проектировать так, чтобы он не блокировал работу региона.
Нужно ли для каждой новой страны разворачивать полностью отдельную инфраструктуру?
Не обязательно отдельную инфраструктуру целиком — но отдельный инстанс, обслуживающий регион локально, с собственной конфигурацией по валюте, лояльности и доступным интеграциям.