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

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

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

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

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

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

 

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

 

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

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

 

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

 

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

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

Забытый ПИН больше не потребует стирать весь Android-смартфон

Google разрабатывает запасной способ разблокировки Android-смартфона через привязанный аккаунт. Новинка может избавить пользователей от нынешнего сурового выбора: вспомнить ПИН или отправить все локальные данные под нож. Сейчас при полностью забытом ПИН-коде, пароле или графическом ключе владельцу обычно остаётся сбросить устройство до заводских настроек.

После этого Google попросит подтвердить право собственности через аккаунт, но фотографии, документы и данные приложений без резервной копии уже никто не вернёт.

В Android 17 QPR2 Beta 5 исследователи обнаружили упоминание функции Unlock with Google Account. Её описание предлагает разблокировать устройство с помощью связанного аккаунта Google, если пользователь забыл ПИН или пароль.

Судя по найденному интерфейсу, запасной вход будет добровольным и по умолчанию отключённым. Пользователю придётся заранее разрешить разблокировку через аккаунт в разделе Device unlock.

Фактически компания может вернуть идею, существовавшую в старых версиях Android. До Android 4.4 включительно забытый графический ключ можно было сбросить с помощью данных аккаунта Google. Позднее такую возможность убрали, оставив пользователям фабричный сброс и защиту Factory Reset Protection.

Однако функция пока не работает даже в тестовой Android 17 QPR2 Beta 5, официального анонса от Google нет, а найденный в коде механизм может измениться или вообще не добраться до релиза.

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