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

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

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

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

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

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

 

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

 

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

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

 

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

 

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

Passkeys сдали адрес: iCloud Private Relay раскрывает реальный IP

Защитная ширма Apple оказалась с дыркой. Исследователи Томми Мыск и Талал Хадж Бакри обнаружили, что сайты могут узнать реальный IP-адрес пользователя даже при включённом iCloud Private Relay. Для этого им достаточно поддерживать ключи доступа или хотя бы сделать вид, что поддерживают.

Проблема кроется в WebKit и механизме WebAuthn. При проверке ключа доступа запрос отправляет не Safari, а системная служба учётных данных.

В результате трафик проходит мимо Private Relay, а сервер получает настоящий IP. Причём взаимодействие пользователя не всегда требуется, сайт способен провернуть трюк без заметного окна или запроса.

Private Relay здесь важно не путать с VPN. Сервис защищает веб-трафик Safari, тогда как VPN работает на уровне всей системы. Поэтому системный запрос спокойно обходит эппловский заслон.

Исследователи нашли ещё два канала утечки: через предварительное разрешение DNS-имён и WebTransport. В первом случае сайт может определить реальные DNS-серверы пользователя, во втором — установить прямое соединение и снова увидеть его IP. Все три проблемы подробно описаны в исследовании Mysk.

Под ударом оказался не только Safari. На iOS браузеры обязаны использовать WebKit, поэтому уязвимость затрагивает и приложения с собственным прокси, включая Onion Browser для работы через Tor. Обычные системные VPN от этих конкретных утечек не страдают.

Исследователи подготовили тестовый сайт, на котором пользователи могут проверить своё устройство. В браузере Psylo разработчики уже закрыли все три канала утечки, отключив опасные функции по умолчанию.

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