IONDV. Pass-ru - демонстрационное приложение организации пропусков и их проверки для различных мероприятий (в том числе карантинных), с полным описанием подготовки приложений для высокой (пиковой нагрузки).
Приложение реализовано на основе IONDV. Framework. Распространяется по лицензии Apache 2.0.
Приложение в активной разработке.
IONDV. Framework - это опенсорный фреймворк на node.js для разработки учетных приложений или микросервисов на основе метаданных и отдельных модулей. Он является частью инструментальной цифровой платформы для создания enterprise (ERP) приложений состоящей из опенсорсных компонентов: самого фреймворка, модулей и готовых приложений расширяющих его функциональность, визуальной среды Studio для разработки метаданных приложений.
Подробнее об IONDV. Framework на сайте, документация и исхоные коды доступны в репозитории на github.
TODO - находится в разработке. Ниже постановка.
Демо развернуто по адресу https://pass-ru.iondv.ru. Для входа под готовой учетной записью нажмите авторизоваться. Демо доступ обычного пользователя demo
пароль ion-demo
. Можно также просто зарегистрироваться.
Пароль для подтверждения регистрации (смс не подключены) 123456
. Пользователь может:
- смотреть свой профиль
- получить пропуск
- смотреть список своих пропусков
- смотреть данные своего пропуска с QR
Пользователь для проверки других пропусков control
пароль ion-demo
. Инструкция для проверяющего пользователя:
- войдите в систему с браузера на смартфоне поддерживающего открытие ссылки по QR, например Opera.
- авторизуйтесь.
- теперь откройте ссылку пропуска с QR
- альтернативный вариант пункт меню просмотр пропуска - ввести код пропуска вручную.
Пользователь бек-офиса. Перейдите по отдельной ссылке [****] - бек офис развернут в отдельной системе. Учетная запись operator
пароль ion-demo
. Функциональность профиля:
- просмотр всех пропусков, возможность аннуляции пропуска после ввода комментария по бизнес-процессу;
- возможность просмотра данных запросившего пропуск и поиска пропусков
Администратор бек-офиса. Перейдите по отдельной ссылке [****] - бек офис развернут в отдельной системе. Учетная запись admin
пароль ion-demo
. Функциональность профиля:
- аналогично пользователю бек-офиса, кроме бизнес-процесса на пропуске;
- просмотр всех пользователей;
- на главную страницу с которой осуществляется авторизация. Соответственно:
- основная страница минимизирована, она не кешируется, т.к. инициализирует сессию - если её нет, она создается в Mongo, если есть обновляется срок действия.
- запрос проверки авторизации осуществляется AJAX запросом, этот запрос не идет дальше сервера пропусков и СУБД для проверки сессии.
- если пользователь авторизован (сессия валидна), то показываются кнопки действий, если нет кнопка регистрации или входа
- все остальное включается кеширование в браузере пользователя и в кеше nginx
- страница регитрация осуществляется на отдельной странице, регистрация может быть заменена на вход под ЕСИА или учеткой соц.сетей. Регистрация подразумевает проверку телефона. В демо приложении сервис не подключен.
- страница входа запрашивает только сама страница, остальное кеш. После входа переход на страницу с пропусками.
- формирование пропуска
- внешний сервер не содержит никаких данных, только сессия пользователя и его идентификатор в БД. Все остальное запрашивается с бек-офиса. В случае ошибок бек-офиса - фронт продолжает работать, но не показывает данные.
- авторизация и регистрация через выбранную стратегию
- логика автоматических ограничений при проверке и выдаче пропуска
- логика автоматической аналитики и проверок по уже созданным пропускам, в том числе их верификации
TODO
Подключаем Round-Robin DNS на примере cloudns.net, информация https://www.cloudns.net/wiki/article/182/. Для чего нужно:
- пользователи получают IP адрес случайного сервера, нагрузка между ними выравнивается
- обеспечивается высокую скорость отклика и надежность
- позволяет не наращивать один сервер а подключать множество небольших виртуалок простым тиражированием и добавлением их IP, без остановки серверов для добавления ресурсов.
Как сделать:
- прописываем записи типа А для каждого сервера.
В демо - две записи pass-ru.iondv.ru A [ip_адрес сервера 1] и pass-ru.iondv.ru A [ip_адрес сервера 2]
Проверка - с разных IP посмотрим curl -v https://pass-ru.iondv.ru и увидим разные IP.
Для упрощения в системе используется одна СУБД Mongo, её рекомендуется развернуть в кластерном варианте и на SSD дисках. В настройках конфига возможно будет целесобразно указать большее кол-во памяти, т.к. по умолчанию Mongo использует для кеширования 60% минус 1 Гб.
В демо - стандартные настройки на виртуалке 2xCPU c 2Гб памяти, обычные диски, одна инстанция (не кластер) в докер контейнере, включена авторизация, SSL отключен.
Пример mongo.conf
TODO
Пример скрипта запуска
TODO
При очень высокой нагрузке имеет смысл добавить для хранения сессий пользователей портала в Redis.
- инструкция подкючения Redis в deploy https://github.com/iondv/framework/blob/master/docs/ru/2_system_description/platform_configuration/auth.md
- инструкция конфигруирования Redis в парамтерах https://github.com/iondv/framework/blob/master/docs/ru/2_system_description/functionality/cached.md
В демо - не используется.
TODO
TODO
TODO
- скрипт генерации POST запросов (ammo) для яндекс.танка.
- скрипт генерации POST запросов для яндекс. танка
- скрипт авторизации и получения сессии
- скрипт генерации под этой сессией талонов на создание.