Авторы: FM Нурул Худа Патан, Сумья Ранджан Мишра

Цель этой статьи — помочь вам понять системный дизайн приложения Uber. Мы надеемся, что вам понравится блог. Давайте начнем!

Uber — американская технологическая компания, которая предоставляет услуги такси, доставку еды (Uber Eats), доставку посылок, курьеров, грузовые перевозки и, благодаря партнерству с Lime, аренду электрических велосипедов и мотороллеров. Большая часть его доходов поступает от такси.

Давайте теперь обсудим, как в Uber выполняются операции по вызову такси.

  • Uber предлагает различные варианты обслуживания. Он включает в себя частную поездку в автомобиле с водителем до четырех пассажиров. В зависимости от местоположения, он также предлагает другие уровни обслуживания по разным ценам, включая черные автомобили класса люкс, новые автомобили или автомобили премиум-класса, автомобили с кожаными сиденьями, внедорожники, минивэны, фургоны, хэтчбеки, электромобили, гибридные автомобили, мотоциклы, автомобили. - рикши, настоящие такси, недорогой совместный транспорт с другими пассажирами, идущими в том же общем направлении.
  • Он определяет сборы и условия, на которых водители перевозят пассажиров. Он использует динамическую модель ценообразования. Тарифы колеблются в зависимости от местного спроса и предложения на момент обслуживания. Стоимость проезда сообщается клиентам заранее. Обычно доступ к сервису осуществляется через мобильное приложение.
  • Пользователям необходимо настроить личный профиль с именем, номером телефона, другой информацией и платежными предпочтениями, которые могут быть кредитной картой, платежной системой электронной коммерции или, в некоторых случаях, наличными. После того, как услуга завершена, клиенту может быть предоставлена ​​​​возможность предоставить водителю вознаграждение, которое также выставляется в счет способом оплаты клиента.
  • Водители обычно предоставляют транспортное средство, которое может быть в собственности, арендовано или арендовано. Водители должны соответствовать требованиям по возрасту, состоянию здоровья, возрасту и типу автомобиля, иметь водительские права и смартфон или планшет, и от них может потребоваться пройти проверку биографических данных. Во многих городах транспортные средства должны проходить ежегодные проверки безопасности и / или иметь эмблему на пассажирском окне. Некоторые города также требуют, чтобы у водителей была бизнес-лицензия. Могут быть приспособления для слабослышащих водителей. Водители могут быть уведомлены перед принятием решения о поездке, если она продлится более 45 минут.
  • После завершения каждой поездки водители и клиенты могут оценивать друг друга, а пользователи с низкими оценками могут быть деактивированы.

Теперь давайте обсудим, как можно разработать систему Uber Trip. Система должна иметь следующие стандартные функции.

  • Водители смогут просматривать доступных водителей в близлежащих местах.
  • Пассажиры смогут заказать поездку из пункта отправления в пункт назначения.
  • Ближайшие водители получат уведомление о поездке, и один из водителей подтвердит поездку.
  • Расчетное время прибытия будет показано клиентам, когда будет отправлена ​​поездка, чтобы забрать гонщика.
  • После завершения поездки водителю должны быть показаны детали поездки, такие как карта поездки, цена и т. д., в квитанции о поездке.

Архитектура системы Uber Trip будет состоять из следующих компонентов.

Предрейсовый компонент:

Он имеет следующие подкомпоненты, такие как

  • Диспетчер местонахождения драйверов: этот компонент будет отвечать за сохранение меняющихся местоположений водителей. Он будет принимать сообщения, отправляемые приложением Uber для водителей, содержащие их текущее местоположение, и обновлять индекс местоположения автомобиля.
  • Диспетчер поездки: он будет отвечать за обработку запросов на поездку от пользователей и отправку водителя в ответ на эти запросы.
  • Калькулятор ETA прибытия: этот компонент будет отвечать за расчет ожидаемого времени прибытия водителя, чтобы добраться до пассажира после того, как водитель принял поездку.

Компонент поездки:

Он имеет следующие подкомпоненты, которые включают

  • Регистратор поездки: сигналы GPS, передаваемые во время поездки, записываются. Затем эти сигналы GPS будут записаны в хранилище данных, которое будет использоваться последующими подкомпонентными системами, такими как Map Matcher и Pricing Calculator.
  • Map Matcher: он будет отвечать за сопоставление поездки на реальной карте с использованием алгоритмов, специально предназначенных для этой цели.
  • Калькулятор цен: затем он будет использовать записанную информацию о поездке для расчета цены, которую пользователи должны заплатить за поездку.

Хранение данных:

  • Местоположение водителя: здесь будет храниться информация о местоположении водителя, такая как широта и долгота.
  • Записи о поездках: в эту базу данных будут записываться сведения о поездках. Эти детали могут быть использованы для извлечения информации компанией для выявления закономерностей и бизнес-идей.

Как устроены предрейсовые компоненты?

Предрейсовые компоненты выполняют следующие действия.

  • Обновить местоположение драйвера. Это включает в себя обновление местоположения драйвера, поскольку драйверы постоянно меняют свое местоположение.
  • Список ближайших водителей. Он включает шаги, необходимые для получения списка ближайших водителей.
  • Запрос на поездку. Он включает в себя ряд шагов, связанных с запросом и отправкой поездки.

Эти компоненты предназначены для отображения автомобилей в близлежащих локациях и отправки поездки по запросам пользователей. Местоположение автомобилей может храниться в индексе местоположения автомобилей в памяти, который может поддерживать высокие запросы на чтение и запись. Приложение для водителя будет продолжать отправлять обновленные данные о местоположении автомобиля, которые будут обновляться в этом индексе. Индекс будет запрашиваться, когда приложение для пассажиров запрашивает местонахождение ближайших автомобилей или размещает запрос на поездку.

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

Некоторые свойства, которые должно содержать местоположение автомобильного указателя:

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

Расчетное время прибытия автомобиля рассчитывается с учетом таких факторов, как маршрут, трафик и погодные условия. Есть два основных компонента оценки ожидаемого времени прибытия с учетом исходной и конечной точек дорожной сети, таких как

  • расчет маршрута от пункта отправления до пункта назначения с наименьшими затратами
  • оценка времени прохождения маршрута.

Каждое пересечение дороги на карте представлено узлом, а каждый сегмент дороги — направленным ребром.

Мы можем использовать алгоритм Дейкстры, чтобы найти кратчайший путь между источником и пунктом назначения. Этот алгоритм имеет временную сложность O(N*logN) для поиска кратчайшего пути для N узлов. Но такие приложения, как Uber, требуют масштабного подхода для определения маршрутов. Чтобы решить эту проблему, мы можем использовать разбиение всего графа, предварительное вычисление наилучшего пути внутри разделов и взаимодействие только с границами разделов. Это даст временную сложность O(√N*log√N). Таким образом, сложность поиска кратчайшего пути может быть уменьшена.

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

Как устроены компоненты On-Trip и Post-Trip?

Эти компоненты отвечают за обработку процессов, которые включают в себя от начала до завершения поездки. Он отслеживает места поездки, когда поездка продолжается. Он также отвечает за создание карты маршрута и расчет стоимости поездки после ее завершения.

Местоположение GPS, отправленное приложением водителя/райдера во время поездки, сохраняется в базе данных. Некоторые из характеристик этой базы данных:

  • Он должен поддерживать большой объем операций записи.
  • Хранилище должно быть прочным.
  • Он должен поддерживать запросы на основе временных рядов, такие как местоположение водителя в заданном временном диапазоне.

Модуль Map Matcher принимает необработанные сигналы GPS в качестве входных данных и выводит положение в дорожной сети. Входные сигналы GPS состоят из широты, долготы, скорости и курса. Позиции в дорожной сети состоят из широты (на реальной дороге), долготы (на реальной дороге), идентификатора сегмента дороги, названия дороги и направления/заголовка. Карта маршрутов, сгенерированная Map Matcher, используется для:

i) определение фактического положения водителя в дорожной сети

ii) расчет стоимости проезда.

Оптимизации

  • Одна из проблем предлагаемого дизайна заключается в том, что как интенсивное чтение, так и запись направляются в хранилище данных. Мы можем оптимизировать систему, отделив трафик чтения от записи, кэшируя необработанные местоположения драйверов в распределенном кэше (Redis). Redis — это хранилище структур данных в памяти с открытым исходным кодом, используемое в качестве базы данных, кэша и брокера сообщений. Необработанные местоположения драйверов из кэша Redis используются MapMatcher для создания сопоставленной карты и сохранения ее в хранилище данных.

  • Мы также можем улучшить прогнозируемые ETA, применив машинное обучение поверх упомянутого выше механизма расчета ETA. Первая проблема использования машинного обучения включает в себя разработку функций, чтобы придумать такие функции, как регион, время, тип поездки и поведение водителя, для прогнозирования реалистичного ETA.
  • Еще одной интересной задачей будет выбор модели машинного обучения, которую можно использовать для прогнозирования ETA. Для этого варианта использования мы будем полагаться на использование нелинейного (например, ETA не связано линейно с часом дня) и непараметрического (отсутствует предварительная информация о взаимодействии между различными функции и ETA), такие как случайный лес, нейронные сети и обучение KNN. Мы можем дополнительно улучшить прогноз ETA, отслеживая проблемы клиентов, когда прогноз ETA отключен.

Расширенное требование

  • В приведенном выше дизайне водители уведомлялись о ближайших гонщиках, и они соглашались на поездки, которые хотели. В качестве расширения существующей реализации мы можем расширить систему, чтобы включить автоматическое сопоставление водителей с пассажирами.
  • Водители сопоставляются с гонщиками на основе таких факторов, как расстояние между водителями и гонщиками, направление, в котором движется водитель, трафик и т. д. Мы можем применить наивный подход подбора гонщиков к ближайшему водителю.
  • Однако этот подход не решает проблему, называемую улучшением поездки, которая возникает, когда гонщик сопоставляется с водителем и, в то же время, дополнительным водителем, и въезжает дополнительный гонщик. система. Сценарий повышения категории поездки показан на изображениях ниже.

Как реагировать на сбои центра обработки данных?

  • Это случается не очень часто, но может произойти непредвиденный каскадный сбой или сбой вышестоящего сетевого провайдера.
  • У Uber есть резервный центр обработки данных, и есть коммутаторы для маршрутизации всего в резервный центр обработки данных.
  • Проблема в том, что данные о внутрипроцессных поездках могут отсутствовать в резервном центре обработки данных. Вместо того, чтобы копировать данные, они используют телефоны водителей в качестве источника данных о поездках.
  • Что происходит, так это то, что система Dispatch периодически отправляет зашифрованный дайджест состояния на телефоны водителей. Теперь предположим, что произошел отказ центра обработки данных. В следующий раз, когда телефон водителя отправит обновление местоположения в систему диспетчеризации, она обнаружит, что не знает об этой поездке, и запросит у них дайджест состояния. Затем система Dispatch обновляется на основе State Digest, и поездка продолжается, как будто ничего не произошло.

Заключение

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

В заключение мы хотели бы предложить некоторые моменты, которые можно было бы улучшить при проектировании системы, а именно:

  1. Сокращение времени простоя водителя
  2. Собственные рекомендации по проведению местных мероприятий
  3. Настройте опыт
  4. Создавайте программы лояльности

Наконец-то мы поговорили о дизайне системы Uber. Я думаю, что наша работа поможет вам в определенных отношениях. Похлопайте нам. Если вы предлагаете добавить что-то еще, не стесняйтесь обращаться ко мне. Увидимся в следующий раз с другим блогом!!!

Справочник

  1. https://www.techtakshila.com/system-design-interview/chapter-3/
  2. https://www.geeksforgeeks.org/system-design-of-uber-app-uber-system-architecture/
  3. https://www.educative.io/blog/uber-backend-system-design