Технический стек Uber и архитектура программного обеспечения — как создавался Uber?

Опубликовано: 2022-01-17

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

Знаете ли вы, что у Uber 98 миллионов активных пользователей в месяц? Кроме того, в 2020 году компания получила доход в размере 11,1 миллиарда долларов? Uber подал классический пример стартапам и существующим службам такси. Каждая организация стремится повторить успех Uber, предлагая быстрые и удобные услуги такси.

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

Как создать приложение реального времени, подобное Uber?

Чтобы создать приложение реального времени, такое как Uber, вы должны сначала понять его различные компоненты, а именно:

Приложение для пассажиров

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

Приложение для водителя

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

Торговая площадка

Маркетплейс объединяет два приложения — приложение «Пассажир» и приложение «Водитель». Он выполняет самые сложные задачи, связанные с подбором пассажиров и водителей и обработкой платежей.

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

Как построить новый Uber?

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

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

Изучите своих конкурентов.

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

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

Знайте своих потенциальных пользователей

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

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

Сосредоточьтесь на пользовательском опыте.

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

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

Тест с MVP

Минимально жизнеспособный продукт (MVP) — это первая базовая версия продукта, поддерживающая минимальные, но важные функции. Рекомендуется создать MVP до разработки полноценного приложения, так как это ускоряет выход на рынок, привлекает первых пользователей и обеспечивает соответствие продукта рынку с самого начала.

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

Как технически работает приложение Uber?

как работает убер

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

После запроса на поездку платформа:

  • Сохраняет всю информацию о поездке в базе данных
  • Обрабатывает запрос на поездку с геолокацией пассажира
  • Отправляет все обработанные данные в алгоритм сопоставления на основе ML
  • Ищет информацию о водителях поблизости в базе данных
Обзор хранилища технического стека uber
Обзор хранилища технического стека uber

Требования к Uber-подобным проектам

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

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

Микросервисы

Микросервисная архитектура Uber примерно в середине 2018 года от Jaeger
Микросервисная архитектура Uber примерно в середине 2018 года от Jaeger

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

DOMA (доменно-ориентированная системная архитектура)

Хотя архитектура микросервисов была огромным обновлением монолитной архитектуры, команда разработчиков Uber не остановилась на достигнутом. Со временем они приняли новый подход, названный DOMA-Domain-Oriented System Architecture.

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

Затем разработчики делают каждый домен независимым от других с помощью Gateway API. Таким образом, каждый домен имеет свою собственную логику и не связан с другими доменами внутри того же слоя.

API шлюза
шлюз, показывающий внутреннюю информацию о доменах — несколько сервисов, таблицы данных, конвейеры ETL и т. д.

Проще говоря, предоставляя организованную архитектуру, предопределенные точки расширения и доменные шлюзы, DOMA превращает архитектуру микросервисов из чего-то сложного во что-то легко понятное.

Какой фреймворк пользовательского интерфейса использует Uber?

Команда дизайнеров Uber постоянно совершенствует дизайн приложения, добавляя новые функции. Однако это длительный процесс. Итак, чтобы упростить работу команды дизайнеров, они создали фреймворк пользовательского интерфейса React под названием Base.

измеритель силы, разработанный с использованием базовой веб-инфраструктуры
измеритель силы, разработанный с использованием базовой веб-инфраструктуры

База включает предварительно разработанные элементы приложения Uber, такие как цвета, сетки, типографика, списки, кнопки и значки. Фреймворк позволил команде дизайнеров создавать проекты быстрее, сохраняя при этом высокие стандарты и согласованность UI/UX.

Какие технологии стоят за приложением для доставки еды Uber?

В 2014 году серверная часть Uber включала такие языки, как Python, Mongo и MySQL. С другой стороны, система диспетчеризации использовала Node.js и Redis, тогда как мобильные приложения работали на Java и Objective-C. Однако по мере роста требований разработчики меняли почти все компоненты платформы.

Стек технологий Marketplace

Торговая площадка Uber — важный аспект, который управляет всей потоковой передачей данных и аналитикой данных. И технологический стек, используемый для создания этого рынка, включает такие языки, как Python, Go, Java и Node. Теперь давайте подробно рассмотрим этот стек рыночных технологий:

Двигатель выполнения поездки

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

Передовой API

Frontline API направляет запросы от мобильных устройств водителя и пассажира к другим API и службам. Это написано на Node.js, кроме края. Он использует NGINX для внешнего интерфейса и выполняет терминацию SSL и некоторую аутентификацию.

Соединение в режиме реального времени

Чтобы беспрепятственно поддерживать самые высокие требования к доступности, стек Marketplace должен получать информацию в режиме реального времени. Так, разработчики используют Ringpop — библиотеку для построения кооперативных распределенных систем. Благодаря этой библиотеке разработчики получают высокодоступное соединение с распределенными базами данных, такими как Riak и DynamoDB.

Логика соответствия

Алгоритм сопоставления, т. е. система, которая обрабатывает предупреждения от водителей и пассажиров в режиме реального времени, а затем сопоставляет их, написана на Go и Node.js. Riak — это их распределенная база данных, тогда как Redis предлагает кэширование.

Динамическая оптимизация ценообразования

Команда Marketplace в Uber управляет оптимизацией и балансом с помощью динамического ценообразования, интеллектуального сопоставления и позиционирования предложения. Ранее большая часть этого стека была создана с использованием Python с Flask и uWSGI. Однако сейчас разработчики заменяют большую часть Python на Go, чтобы добиться большей производительности.

Потоковая передача данных и машинное обучение

Uber использует Kafka и собственные производственные базы данных для потоковой передачи данных. А хранение данных зависит от Hive, HDFS, Elasticsearch, MapReduce и веб-сервисов хранения файлов. Компания также разработала собственный LIDAR, обеспечивающий внутренний обмен данными. LIDAR работает под управлением Jupyter, JupyterHub, интегрированного с Apache Spark и их собственной платформой данных.

Двигаясь дальше, стоит отметить, что у Uber есть собственная платформа машинного обучения. В 2015 году компания решила масштабировать ML, чтобы стандартизировать инструменты и рабочие процессы и избежать антишаблонов ML. Следовательно, они разработали Микеланджело в 2017 году.

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

  • HDFS
  • Самза
  • Искра
  • MLLib
  • ТензорФлоу
  • Кассандра
  • XGBoost
Функция расчетного времени доставки в приложении UberEATS
В приложении UberEATS есть функция расчетного времени доставки, основанная на моделях машинного обучения, построенных на Микеланджело.

Стек технологий веб-приложения

Для веб-приложения разработчики Uber используют Node.js, платформу с открытым исходным кодом с огромным сообществом веб-инженеров. Node.js также позволяет разработчикам обмениваться кодом JavaScript между сервером и клиентом для создания универсальных веб-приложений. Наконец, они используют Browserify для всех пакетов на стороне клиента, поскольку он поставляется с Node. Требования к модулю на основе js.

Веб-сервер Uber под названием Bedrock построен на Express.js, популярной веб-инфраструктуре, которая обеспечивает полную безопасность и интернализацию. Их внутренний уровень связи службы, известный как Atreyu, управляет всей связью с внутренними службами, а также интегрируется с Bedrock. Этот коммуникационный уровень также позволяет компании легко и быстро отправлять запросы к своим API-интерфейсам SOA-сервисов.

Uber использует стандартные Flux и React.js для рендеринга приложений и обработки состояний. Система сборки, Core Tasks, представляет собой предопределенную группу скриптов для компиляции и версии интерфейсных ресурсов, созданных на Gulp.js.

Стек технологий мобильного приложения

Чтобы разработать такое приложение, как Uber, вам нужно создать четыре разных мобильных приложения: пассажир Android, водитель Android, пассажир iOS и водитель iOS. Разработчики создают приложения для IOS с использованием языка программирования Objective-C и Swift, тогда как приложение для Android разрабатывается с использованием Java. Но кроме них есть несколько других технологий, используемых разработчиками. Это включает:

Технический стек приложений для Android

  • Грейдл
  • OkHttp/Gson/Модернизация
  • Нож для масла
  • Кинжал
  • Эспрессо
  • Пикассо
  • RxJava
  • Древесина

Технический стек приложений для iOS

  • Бак
  • Каменная кладка / SnapKit
  • KSCrash
  • OCMock

Какие языки программирования можно использовать для создания приложения для доставки еды, такого как Uber?

Если вы хотите разработать приложение, подобное Uber, вы можете интегрировать следующие технологии:

  • Node.js — для веб-приложения Marketplace
  • Python — для веб-приложения для бронирования
  • Go- для повышения производительности и скорости
  • Browserify — для связывания на стороне клиента
  • Java — для интеграции сторонних сервисов
  • Хранилище данных Apache Hive — для аналитики и запроса данных
  • ELk — для хранения логов, обработки и отправки
  • Apache Cassandra — для управления огромными объемами данных
  • Служба базы данных MySQL — для управления реляционными базами данных.
  • Docker — для инфраструктуры ЦОД
  • HAProxy — для прокси-сервера и балансировщика нагрузки

Это краткий обзор стека технологий Uber. Однако простое копирование этого набора технологий без проведения собственных исследований может нанести ущерб вашей бизнес-модели. Кроме того, применение одних и тех же технологий не гарантирует успеха вашему бизнесу такси.

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