Перейти к содержимому

Продукт и архитектура

IZI X — это операционная система для компьютерного клуба.

Она помогает клубу открываться, продавать игровое время и товары, запускать сессии, учитывать оплаты, работать с кассой, контролировать устройства и закрывать смены.

КомпонентДля чего нужен
APIОсновной backend IZI X. Хранит бизнес-логику, работает с клубами, сессиями, заказами, оплатами, устройствами и пользователями
CRMРабочий интерфейс клуба и саппорта: касса, смены, устройства, клиенты, продажи, настройки
Mobile WidgetПриложение/виджет для игрока: авторизация, баланс, сессии, действия клиента
КомпонентДля чего нужен
Desktop clientКлиент на игровом ПК. Управляет состоянием ПК, блокировкой, запуском сессии и связью с платформой
Device clientАгент устройства. Сверяет желаемое состояние с фактическим и сообщает телеметрию
PodКлиент для IZI Pod. Помогает управлять устройствами и состояниями, которые связаны с железом клуба

На кассовом ПК обычно не требуется отдельный IZI-клиент. Для работы нужны:

  • браузер с CRM;
  • KkmServer.exe;
  • kkm-watcher;
  • доступ к кассе и локальной инфраструктуре клуба.

В инфраструктуре клуба участвуют:

  • игровые ПК;
  • кассовые ПК;
  • IZI Pod;
  • ККМ;
  • сетевое оборудование;
  • серверы или хранилища, если они используются в клубе.

IZI Boot — это система сетевой загрузки и централизованного управления запуском ПК в клубе.

Она помогает быстрее вводить ПК в работу, держать одинаковую конфигурацию и проще восстанавливать машины после сбоев. Внутри могут использоваться эталонные образы, индивидуальные изменения для конкретных ПК и инфраструктура хранилища.

СервисЗачем нужен
PostgreSQLОсновная база данных
RabbitMQОчереди и события между сервисами
RedisКэш и быстрые служебные данные
EMQXMQTT-сообщения для устройств
MeshCentralУдалённый доступ и управление ПК
TrueNASХранилище и образы, если клуб использует IZI Boot
Grafana / Dash0Мониторинг, логи, метрики и диагностика
КомпонентДля чего нужен
FleetКонтроль устройств, телеметрии и состояния ПК
Fleet enricherДополняет данные по устройствам и состояниям
Windbg analysisПомогает разбирать BSOD и дампы
Cron jobsРегулярные фоновые задачи
E2E testsАвтотесты основных сценариев CRM
МодульЗа что отвечает
organizationsОрганизации
clubsКлубы и их настройки
devicesПК, Pod и другие устройства
sessionsИгровые сессии
catalogТарифы, товары и услуги
ordersЗаказы и позиции заказа
billingБаланс, оплаты и списания
playersИгроки и их данные
schedulesРасписания и тарифные окна
automationsАвтоматические действия
analyticsОтчёты и показатели
support-integrationИнтеграции для саппорта
platformОбщие платформенные функции
usersПользователи и роли
izi-bootУправление IZI Boot
monitoringМониторинг и диагностика
СущностьЧто означает
OrganizationЮридическая или управленческая организация
ClubКонкретный клуб
DeviceПК, Pod или другое устройство
PlayerИгрок
SessionИгровая сессия
DeviceHoldУдержание или блокировка устройства
TariffТариф игрового времени
OrderЗаказ
OrderItemПозиция заказа: тариф, товар, комбо или услуга
ScheduleРасписание действия тарифа или цены
LedgerФинансовые движения по балансу
DesiredStateКакое состояние система хочет получить на устройстве
ObservedStateКакое состояние устройство фактически прислало

Внутри продукта важно разделять прямые запросы и события.

Для запросов, где нужен ответ сразу, используется API. Например: CRM просит создать заказ, открыть сессию или показать список устройств.

Для событий, которые должны обработаться асинхронно, используются очереди. Например: заказ создан, сессия завершилась, устройство прислало новое состояние.

Обработчики событий должны быть устойчивыми к повторной доставке. Если событие пришло второй раз, система не должна создать дубль или сломать состояние.

РольКто это
PLAYERИгрок или клиентское приложение
CRMДействие из интерфейса клуба или саппорта
DEVICEДействие от устройства
SYSTEMАвтоматическое системное действие
  1. CRM показывает не «магическую картинку», а данные из API и связанных сервисов.
  2. Если в CRM что-то выглядит странно, нужно проверять сущность: заказ, сессию, устройство, оплату, расписание или удержание.
  3. Устройство может иметь желаемое состояние и фактическое состояние. Они могут временно отличаться.
  4. Не каждую проблему видно в одном месте. Иногда нужно сверять CRM, логи, аудит, устройство и кассу.
  5. Перед эскалацией нужно собрать конкретику: клуб, ПК, время, действие, ошибку, скриншоты и ссылку на переписку.
  1. Для чего нужен API?
  2. Чем DesiredState отличается от ObservedState?
  3. Что такое DeviceHold?
  4. Почему заказ и сессия — не одно и то же?
  5. Где саппорт смотрит фактическое состояние ПК?
  6. Почему нельзя делать вывод только по одному экрану CRM?