С 28 июня по 2 июля на киевском ВДНГ прошёл третий фестиваль Atlas Weekend. На восьми разноформатных сценах выступили две сотни артистов, а 80 гектаров фестивальной территории вместили 30 развлекательных локаций и около 300 тыс. человек за все дни. Как заявляют организаторы, их главная цель — развитие фестивальной культуры в Украине, привлечение туристов и популяризация нашей музыки. Но в этом году Atlas Weekend посодействовал ещё одному положительному процессу — развитию технологии (и культуры) электронных платежей на масштабном фестивале.
Контрольные браслеты, которые посетитель получал вместо купленного билета можно было пополнять у кассиров и использовать для расчёта на территории мероприятия. Киевский программист Макс Фрай отвечал за написание системы, которая хранила данные о купленных билетах, связывала билет с браслетом, управляла виртуальными кошельками, транзакциями оплаты и пополнениями, собирала статистику каждого кассира и прочее. Об устройстве системы, защите от багов и особенностях работы «в поле» Макс поведал нашей редакции:
Как создавалась «браслетная» технология
Всё началось с наших вечеринок в аквапарке, где расплачиваться бумажными деньгами неудобно, а использовать внутреннюю систему для своих целей было нельзя. Тогда я впервые занялся написанием подобной системы, которая работает на rfid-браслетах. Под Atlas Weekend разработку пришлось существенно переписать и доделать, но база та же.
По сути, мне дали полный список штрихкодов проданных билетов, а дальше фестиваль полностью обслуживала моя система. Когда человек приходил с купленным билетом, он уже числился в локальной базе, связывался с «чистым» rfid-браслетом, который позже выдавался посетителю. С этого момента у него появлялся свой виртуальный кошелёк и своя история действий: пополнение счёта, покупки, вход на территорию. Всё это обрабатывал один большой «кусок» логики, который отвечал и за проход, и за покупки, и за полную статистику фестиваля. Благодаря тому, что система работает не в офлайн, у нас в любой момент времени была полная и точная статистика абсолютно по всему — от количества людей, которые прошли, до того, сколько они уже пополнили и купили товаров.
О безопасности данных и кибератаке
На территории фестиваля была поднята локальная сеть, сервер стоял в закрытом павильоне. Весь раздел жёсткого диска был зашифрован, поэтому даже имея физический доступ, невозможно было бы добраться к базе и как-то изменить её. Весь трафик от каждого кассира и человека, который менял билеты на браслеты, шифровался. Плюс, в самой логике системы существует определённый набор проверок от разного рода махинаций. Например, у каждого кассира/работника создавался свой рабочий токен. С помощью этого токена можно выполнять только указанный набор операций, например: активатор браслетов может только активировать, и все это происходит от его имени; кассир умеет только продавать и т.д. В любой момент можно было отследить мошенника, заблокировать его токен и отменить «вредоносные» транзакции. По сути, это ведь человеческий фактор.
Ядро системы написано на системном языке программирования Rust, который сочетает в себе скорость и надёжность, и в нём есть встроенная защита от проблем с памятью. Благодаря этому основной сервер ни разу не упал и круглосуточно работал. Интерфейс написан на веб-стеке (чистый javascript и html-разметка), всё это запускается на Java-приложении под Android, которое может выступать в режиме киоск-мода и блокировать доступ к системе.
По времени Atlas Weekend совпал с кибератакой (вирус Petya.A, из-за которого не работали онлайн-системы многих компаний — прим. ред.), но к счастью, это совершенно не отобразилось на стабильности системы. Вся инфраструктура построена на linux-дистрибутивах и Android на планшетах кассиров. Мне не раз писали друзья за день до фестиваля с вопросом: «У вас всё хорошо?», только позже я понял, что нагрузка и количество работы было настолько большим, что вся наша команда банально выпала из информационного пространства и мы узнали об этой глобальной атаке уже намного позже.
60 дней на собственный мини-банк
Самым сложным оказались сроки. По сути, за два месяца была написана полная инфраструктура: логика мини-банка, основанная на транзакциях, многоуровневая система доступа пользователей (у каждого свои права), продумана вся защита. В общем, вся система была оттестирована только на самых банальных вещах. Насколько мы уже знаем, поток людей был приблизительно 300 тыс. за все дни, в самой системе прошло около миллиона различных транзакций. Да, ничего не упало 🙂
Чтобы упростить дебаг во время фестиваля был написан алгоритм, который анализировал транзакции и проверял общую инфраструктуру на целостность. Т.е. если человек пополнил свой браслет на 200 грн, а потом купил что-то на 150 грн, то у него должно остаться 50 грн. Со стороны это кажется простым и банальным, но на деле — параллельно происходит ещё куча транзакций, которые могут сломать логику. Чем больше поток, тем больше вероятность, что даже самый мелкий баг хоть раз да проявит себя.
О проблемах со связью
Самая большая проблема, которая выбила нас в первый день — это локальная сеть и Wi-Fi. По логике, мы должны были покрыть все точки кассиров Wi-Fi. Планшеты бы подсоединялись, группировались и просто обменивались с локальным сервером нужной информацией. В теории, всё было хорошо. На практике же мы получили огромный поток людей, у каждого был свой телефон, у многих — включён режим модема для раздачи интернета. Ещё у некоторых оказались свои мобильные роутеры, в результате, частоты были просто зашумлены всем этим. Как результат, планшеты кассиров часто теряли связь с точками доступа.
К счастью, мы довольно быстро собрались и нашли решение: SIM-карты от Kyivstar. Плюсом было то, что они ещё «подогнали» пару станций усиления сигнала. Где можно было, мы разгрузили Wi-Fi использованием SIM-карт. В последние три дня система «летала» и работала достаточно стабильно.
Работа над ошибками
То, что радует больше всего — масштабней уже не будет. Наша команда была на фестивале Tomorrowland в Бельгии, так они там просто протянули кабель и установили моноблок на каждой точке продажи. Вот только штука в том, что у них этих точек очень мало. В наших же реалиях все фудкорты завозились отдельно, у всех свои товары, все они — разнообразные. По сути, получилось около 400 точек продажи. Представьте, что у вас есть 400 сотрудников, которых вы в глаза не видели и которым нужно объяснить как пользоваться всей этой системой. Также мы осознали, что Wi-Fi — очень нестабильная штука, особенно на таких масштабах. Либо делаешь стационарно с кабелем, либо 3G/4G, который на большом количестве людей в обычных условиях тоже нестабильно будет себя вести.
О недоверии и преимуществах электронных платежей
Да, изначально люди на фестивале с недоверием относились к этой системе. Они подходили в пункт пополнения денег, давали купюры, а через 10 секунд эта сумма уже была на их виртуальном кошельке. Ещё интересней было наблюдать за очередью на покупку чего-либо и частый вопрос «И всё?». Когда система была полностью настроена и адаптирована, весь процесс проходил очень быстро и удобно. Продавцам и покупателям не нужно отсчитывать купюры, давать сдачу, доставать кошелёк и т.д. В большинстве случаев экран планшета было видно посетителю и он мог проверить, какую сумму ему зачисляют и сколько осталось денег на балансе.
«Плюсы» для организаторов — полная статистика в реальном времени всего, вплоть до конкретного человека/кассира. Здесь можно долго описывать, какие преимущества это даёт, но каждый и так может себе представить.
ЧИТАЙТЕ ТАКЖЕ:
Фото — Facebook-страница Макса Фрая, Facebook-страница Atlas Weekend