Кейсы — системы, которые мы построили и обслуживаем · Codelabs
RU|EN|KK

12 CASE

Что уже построено

Двенадцать систем, и каждая — в эксплуатации, а не в портфолио прототипов. Цифры взяты из работающих продуктов и не округлены вверх: если написано 1.24 млн, значит именно столько.

CASE 01iGaming-платформа под ключ

Игровая платформа, которой пользуются 2 миллиона человек

Оператору нужна была не отдельная игра, а весь бизнес целиком: сайт для игроков, касса в физических точках, панель управления для сотрудников, свои игры, игры внешних поставщиков, приём платежей, партнёрская программа. Мы построили это как одну систему — и из неё же запускаются 15 разных брендов, каждый со своим оформлением, без копирования кода под каждый.

ПлатформаПлатежиВысокая нагрузка
Разбор кейса →
  • ·2.18 млн игроков
  • ·~1.5 млн денежных операций в сутки
  • ·15 брендов из одной кодовой базы
  • ·база данных распределена по 13 серверам
CASE 02Перенос истории в колоночное хранилище

Горячая база уменьшена в 45 раз — платежи не останавливались

Денежный журнал разросся до сотен миллионов строк, и всё, что с ним работало, начинало тормозить. Мы оставили в основной базе одни сутки вместо сорока пяти, а всю историю отправили в отдельное хранилище — потоком, с задержкой в секунды. Каждый отчёт переводили на новое чтение по одному, маленькими релизами, и на каждом шаге сверяли старый ответ с новым: расхождение должно было быть нулевым. Так и вышло.

ДанныеMariaDBClickHouse
Разбор кейса →
  • ·горячая база: 1 сутки вместо 45 дней
  • ·история сохранена целиком
  • ·сверка на каждом шаге: расхождение 0.00
  • ·платежи не останавливались
CASE 03Букмекерский конвейер реального времени

Коэффициенты, которые не отстают от матча

Букмекеру приходит поток изменений коэффициентов по 12 видам спорта. Их нужно мгновенно разложить по матчам и разослать во все открытые браузеры так, чтобы никто не увидел устаревшую цену и не успел поставить по ней. Мы написали для этого собственное ядро на C++ и свой протокол доставки: если у игрока оборвалась связь, он получит не мусор, а корректно восстановленную картину.

Real-timeC++Ставки
Разбор кейса →
  • ·12 видов спорта в одном потоке
  • ·работает в продакшене с 2020 года
  • ·этот же поток продаётся партнёрам как отдельный продукт
CASE 04Нагрузочный инжиниринг

Расчёт ставок ускорен в 15 раз

Обычный день платформа держала, но на популярном матче ставки приходили лавиной, и расчёт выигрышей выстраивался в очередь. Мы написали генератор нагрузки, воспроизвели этот час пик на стенде и увидели виновника: расчёт шёл одним потоком. После того как мы разложили его по независимым дорожкам, темп вырос почти в пятнадцать раз — и это доведено до продакшена.

НагрузкаОптимизацияСтавки
Разбор кейса →
  • ·с 290 до 4360 ставок в минуту
  • ·нагрузка: 274 виртуальных игрока
  • ·проверено на 123 543 ставках
  • ·ноль двойных выплат и потерянных начислений
CASE 05Криптоплатёжный шлюз

Криптоплатежи в 10 блокчейн-сетях

Задача звучит просто: клиент платит криптой — бизнес получает деньги в местной валюте. За этой простотой прячется всё остальное: выдать каждому клиенту свой адрес, увидеть входящий платёж в блокчейне, дождаться подтверждений, проверить происхождение денег, посчитать курс и не потерять на нём. Мы собрали всё это в одну систему.

КриптоПлатежиПроверка на AML
Разбор кейса →
  • ·больше 85 млн операций
  • ·10 сетей: Ethereum, TRON, Solana, TON, Bitcoin и другие
  • ·курс считается автоматически по заявкам на биржах
CASE 06Live-видео и удалённое управление оборудованием

Игра на настоящем автомате — из браузера

Человек открывает сайт и видит живое видео настоящего игрового автомата, который стоит в зале. Он нажимает кнопку на экране — и она нажимается на самом автомате: сигнал идёт от браузера к серверу, от сервера к плате внутри корпуса, плата замыкает контакт. Барабаны крутятся, камера показывает результат, деньги считаются так же, как у живого посетителя зала. Мы сделали здесь всё: от прошивки платы до клиента, который показывает видео.

ВидеоЭлектроникаWebRTC
Разбор кейса →
  • ·около 1000 автоматов онлайн
  • ·1998 одновременных видеопотоков
  • ·своя плата и своя прошивка внутри автомата
CASE 07IoT-трекинг и локальное позиционирование

Датчик на футболисте и тепловая карта поля

Тренеру нужно видеть, сколько игрок пробежал, где он был на поле, как часто ускорялся и что происходит с его пульсом. Мы разработали носимую метку — сами нарисовали плату, сами написали прошивку, — расставили по стадиону приёмники и написали сервер, который по радиосигналу вычисляет положение каждого игрока. Тренер получает живую карту поля во время матча и тепловые карты после него.

IoTСпортЭлектроника
Разбор кейса →
  • ·своя плата: радиомодуль, датчики движения, ЭКГ, GPS
  • ·положение считается по радиосигналу с нескольких приёмников
  • ·зарядные капсулы для меток — тоже наша разработка
CASE 08Лотерейная платформа

Национальная лотерея, переведённая в цифру

Ставки принимаются и онлайн, и в наземных кассах с бумажными чеками, а результаты берутся с официальных розыгрышей. Мы написали разбор результатов, расчёт выплат, который невозможно выполнить дважды, пять типов ставок с коэффициентами до 25 000 и джекпот, который наполняется сам. Партнёрам всё это отдаётся отдельным модулем со своим комплектом интеграции.

ЛотереяПлатежиКассы
Разбор кейса →
  • ·онлайн и офлайн-сеть касс
  • ·пять типов ставок, коэффициенты до ×25000
  • ·двойные выплаты исключены на уровне расчёта
  • ·поставляется партнёрам как встраиваемый модуль
CASE 09Сеть денежных переводов

Наличные, отправленные из одной страны в другую

Человек вносит наличные в кассе одной страны, получатель забирает их в другой по номеру перевода и четырёхзначному PIN. Комиссия делится между принявшей точкой, оператором и выдавшей точкой автоматически. Каждый запрос и каждый ответ подписаны криптографически, все операции пишутся в два независимых журнала, а после десяти неверных PIN перевод блокируется.

ПлатежиКассыФинтех
Разбор кейса →
  • ·выдача наличных по PIN в агентской точке
  • ·три части комиссии распределяются автоматически
  • ·конвертация между тремя валютами
  • ·двойное журналирование всех операций
CASE 10SMS-инфраструктура

Доставка SMS там, где нет надёжных агрегаторов

На рынке, где обычные сервисы рассылки не работают, мы прошли четыре поколения решений: аппаратные GSM-шлюзы, прямые интеграции с операторами, автоматизацию закрытого портала оператора и, наконец, собственное Android-приложение, превращающее обычные телефоны в шлюзы. Все поколения работали через одну очередь и один набор шаблонов.

SMSAndroidИнтеграции
Разбор кейса →
  • ·около 7.5 тысяч SMS в неделю
  • ·маршрутизация по оператору номера
  • ·шаблоны на 12 брендов
  • ·телефон как шлюз входящих SMS для входа без пароля
CASE 11Протокольные эмуляторы и приёмка

Замена кассового ПО без единого расхождения

Кассовое ПО меняли на новое, и нужно было доказать, что новая система считает так же, как старая. Мы написали эмулятор для каждого игрового клиента — двенадцать штук, — прогнали через них тысячи ставок и построчно сверили отчёты обеих систем. Любое расхождение роняло сборку, поэтому «кажется, всё сходится» превратилось в проверяемый факт.

QAКассыАвтотесты
Разбор кейса →
  • ·12 эмуляторов сетевых протоколов
  • ·тысячи ставок за прогон
  • ·сверка каждого выигрыша с таблицами коэффициентов
  • ·расхождение — красная сборка в CI
CASE 12Отчётность на больших таблицах

Выгрузки отчётов, которые перестали обрываться

Кассовая отчётность выгружалась синхронно: сорок с лишним секунд ожидания и обрыв по таймауту на больших периодах. Мы перевели выгрузку в фоновую задачу с индикатором готовности, а чтение — на курсор с постоянным расходом памяти. Заодно научились показывать количество страниц без пересчёта всей таблицы и прыгать на последнюю страницу за секунды.

ОтчётыПроизводительностьДанные
Разбор кейса →
  • ·таблица в 90 млн строк
  • ·выгрузка не обрывается по таймауту
  • ·оценка числа страниц с точностью ±0.1%
  • ·совпадение экрана и файла закреплено автотестом

Опишите задачу — ответим, что из неё у нас уже построено