Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Цена поездки в Яндекс Go — это не расстояние, умноженное на минуты и километры. В расчёт вмешиваются геозоны, спрос, скидки, платные дороги, дополнительные остановки и требования вроде перевозки кота, велосипеда или лыж. Чтобы управлять этим хозяйством без бесконечных деплоев, разработчики вынесли алгоритм ценообразования из кода сервиса в собственный язык.

Как объяснили разработчики в статье на Хабре, прайсинг работает не только при заказе машины.

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

 

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

 

Сам алгоритм раньше можно было бы держать в C++, но он меняется в среднем дважды в неделю. Выкатка сервиса на 50 подов занимает около 40 минут, а лес динамических конфигов быстро превратил бы код в музей условных операторов.

Поэтому Яндекс разработал собственный DSL. В нём есть условия, функции, неизменяемые значения и fold вместо циклов. Правила собираются в последовательную цепочку: каждое преобразование получает текущую цену и параметры, а возвращает новый результат с метаданными. Грамматику описали через ANTLR 4, а верификатор Z3 проверяет, что программа не выдаст некорректную цену.

 

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

 

В итоге прайсинг превратился в отдельную платформу, которой уже пользуются Такси, Доставка и сервис зарядки электромобилей.

Подпишитесь на новости

Telegram превратили в пульт управления шпионским софтом HEAVYGRAM

Исследователи обнаружили 29 новых образцов HEAVYGRAM — многоступенчатого вредоноса для Windows, который охотится на журналистов, иранских диссидентов и критиков властей. Для управления заражёнными компьютерами операторы используют Telegram.

По данным исследования Group-IB, атака начинается с банальной, но рабочей социальной инженерии.

Злоумышленники представляются знакомыми или техподдержкой и присылают архивы якобы с Telegram, KeePass либо видеоредактором. Встречаются также WSF- и HTA-файлы, поддельные презентации и даже скринсейвер на персидском языке со списком отчисленных студентов.

После запуска цепочка подтягивает дополнительные компоненты через PowerShell, прописывается в автозагрузку Windows и добавляет свои каталоги в исключения Microsoft Defender. Основной имплант написан на Python и упакован с помощью PyInstaller, а для скрытого запуска может применять стороннюю загрузку DLL.


Главная фишка HEAVYGRAM — Telegram Bot API. Через ботов вредонос принимает команды, запускает произвольные инструкции в системе, делает скриншоты, собирает список процессов и отправляет украденные данные. Особенно неприятный трюк — кража файлов сессии Telegram Desktop, позволяющая угнать аккаунт без повторного ввода пароля.

Group-IB связывает кампанию с группировкой Handala Hack. Аналитики считают её интернет-персоной Void Manticore, также известной как Storm-0842 и Red Sandstorm и предположительно действующей в интересах иранской разведки.

Защитникам советуют следить за командами PowerShell, меняющими исключения Defender, ограничить запуск непроверенных скриптов и проверять подозрительные обращения к Telegram Bot API.

RSS: Новости на портале Anti-Malware.ru