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

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

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

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

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

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

 

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

 

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

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

 

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

 

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

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

Эксплойт BigDiskBuster оставляет Microsoft Defender без обновлений

Исследователь в области кибербезопасности Абдельхамид Насери, известный как Nightmare Eclipse, опубликовал новый эксплойт для дыры в для Microsoft Defender. Инструмент BigDiskBuster блокирует обновление платформы и антивирусных сигнатур, оставляя защиту Windows с уже установленной базой угроз.

По словам Насери, эксплойт работает на всех поддерживаемых версиях Windows, но должен постоянно выполняться в фоновом режиме.

Сам исследователь признаёт, что текущая реализация содержит ошибки и нуждается в доработке. Исходный код BigDiskBuster уже выложен на GitHub.

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


BigDiskBuster стал очередной работой Насери в затянувшейся серии публичных раскрытий уязвимостей Windows. С апреля исследователь опубликовал почти дюжину PoC, затрагивающих Microsoft Defender, BitLocker и другие компоненты системы. Среди них ShieldCrash, ShieldBreak, RoguePlanet, LegacyHive, BlueHammer, RedSun, YellowKey и несколько вариантов Plasma.

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

На момент публикации компания не прокомментировала BigDiskBuster и не сообщила о доступном исправлении. Поэтому администраторам стоит контролировать успешность обновления сигнатур Defender, а не ограничиваться зелёной галочкой в интерфейсе.

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