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

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

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

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

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

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

 

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

 

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

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

 

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

 

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

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

Дешёвая поддельная вышка позволяет следить за абонентами 5G

Исследователи из i2CAT Foundation, Университета Мурсии и NEC Laboratories Europe собрали недорогой инструмент 5G-Shark, который заманивает смартфоны на поддельную базовую станцию. Без глушилок, хитрых пакетов и предупреждений на экране телефон сам цепляется за фейковую вышку, считая её подходящей сетью.

Разработка использует открытую программную платформу и доступное SDR-оборудование.

Фальшивая станция объявляет высокий приоритет и достаточно сильный сигнал, после чего находящийся поблизости смартфон может автоматически переключиться на неё в режиме ожидания.

Как показало исследование 5G-Shark, протестированные сети почти всегда скрывали постоянный идентификатор абонента, ради чего 5G и должен был отправить классические IMSI-catcher в музей. Но временные идентификаторы GUTI некоторые операторы выдавали почти последовательно.

Учёные собрали 3742 идентификатора в сетях трёх операторов. В отдельных случаях до 84-96% последовательных регистраций одного абонента удавалось связать только по значению GUTI. У оператора, который распределял номера случайнее, показатель упал до 7%.

На слежке сюрпризы не закончились. Поддельная станция отправляла смартфонам сообщения Registration Reject и заставляла Samsung Galaxy S23 откатываться в ограниченный режим 3G без интернета, бесконечно пытаться зарегистрироваться либо намертво подвешивать модем до ручной перезагрузки.


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

Впрочем, объявлять весь 5G дырявым пока рано. Работа опубликована как препринт и ещё не прошла рецензирование, тесты проводились только на семи собственных устройствах исследователей, а атака требует находиться рядом с целью.

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