Uber Tech Stackとソフトウェアアーキテクチャ– Uberはどのように構築されましたか?
公開: 2022-01-17Uberは一般的な名前になっています。 信じられないほどのプラットフォームにより、ユーザーはたった4つの簡単なステップでタクシーサービスを予約できます。 Uberアプリは、迅速なサービスと最適な利便性を保証します。人気が爆発的に高まっているのも不思議ではありません。
Uberの月間アクティブユーザー数は9800万人であることをご存知ですか? また、同社は2020年に111億ドルの収益を上げましたか? Uberは、スタートアップと既存のタクシーサービスの典型的な例を示しました。 すべての組織は、迅速で便利なタクシー配車サービスを提供することで、Uberの成功を再現することを目指しています。
Uberの大成功にも畏敬の念を抱くなら、この記事はあなたにぴったりです。 ここでは、Uberの技術スタックとソフトウェアアーキテクチャについて説明します。これにより、プラットフォームをより深く理解し、タクシーサービスアプリを最初から構築するのに役立ちます。 それでは、始めましょう。
Uberのようなリアルタイムアプリを作成するにはどうすればよいですか?
Uberのようなリアルタイムアプリを作成するには、まずアプリのさまざまなコンポーネントを理解する必要があります。これは次のとおりです。
乗客アプリ
以前にUberアプリを使用したことがある場合は、乗客アプリの機能で簡単に識別できます。 アプリのこのコンポーネントには、乗車の選択、運賃計算、オンライン支払い、GPS追跡など、ユーザーがタクシーを予約するために必要なすべての機能があります。
ドライバーアプリ
運転手のアプリは、乗客からの新しいタクシーのリクエストを表示するタクシー運転手によって使用されます。 このパネルを使用すると、ドライバーは乗車リクエストを受け入れるか拒否し、組み込みの地図を使用して乗客の正確な位置を確認できます。
マーケットプレイス
マーケットプレイスは、PassengerアプリとDriverアプリの2つのアプリケーションを接続します。 乗客とドライバーのマッチングや支払いの処理など、最も複雑なタスクを実行します。
したがって、Uberのようなアプリを作成する場合は、3つの異なるパネルが必要になります。 最初のパネルでは乗客がタクシーを予約でき、2番目のパネルではドライバーが乗車リクエストを受け入れることができます。 そして最後に、3番目のパネルが最初の2つのパネルからリクエストを受け取り、すべてのオンライン操作を管理します。
次のユーバーを構築する方法は?
Uberは、乗客に究極の利便性を提供する、非常に成功したタクシー配車サービスです。 Uberのようなアプリの開発には、多額の資金と有能なアプリ開発チームが必要になる場合があります。
それとは別に、Uberのようなアプリを開発する際に考慮すべきことがいくつかあります。
競合他社をチェックしてください。
アプリで対処しようとしているのと同じ問題を現在解決しようとしているアプリを検索することをお勧めします。 これらのアプリを見ると、それらの機能、機能、およびターゲットオーディエンスについてのアイデアを集めるのに役立ちます。
さらに、競合状況を徹底的に調べることで、競合他社がどのように運営されているかを理解するのに役立ちます。 たとえば、ソーシャルメディアをチェックすることで、マーケティング戦略、製品の進化、顧客満足度に関する洞察を集めることができます。 これはすべて、成功するアプリの起動を支援するのに大いに役立ちます。
潜在的なユーザーを知る
アプリ開発に取り掛かる前に、誰がアプリを使用するかを知る必要があります。 あなたがあなたのターゲットオーディエンスを知っている場合にのみ、あなたは彼らと適切にコミュニケーションをとることができます。
年齢、場所、性別、行動、好みなど、潜在的なユーザーのすべての人口統計データを収集できます。完了したら、アプリのアイデアについて、高く評価している人々と話し合うことができます。
ユーザーエクスペリエンスに集中してください。
ユーザーエクスペリエンスは、アプリを成功させるための重要な側面の1つです。 人々は、シンプルでありながら直感的なUIとUXを提供するアプリを使いたいと考えています。 見事なUIはシームレスなナビゲーション体験を提供し、直感的なUXは使いやすさを保証します。
優れたユーザーエクスペリエンスを提供することは、より良いユーザー獲得とより多くのダウンロードにつながります。
MVPでテストする
最小実行可能製品(MVP)は、最小限でありながら重要な機能をサポートする製品の最初の基本バージョンです。 本格的なアプリを開発する前にMVPを作成することをお勧めします。これにより、市場投入までの時間を短縮し、早期採用者を引き付け、製品市場に早期に適合させることができます。
MVPがユーザーにリリースされると、最初のフィードバックが取得されます。 このフィードバックに基づいて、繰り返し、バグを修正し、製品に競争上の優位性をもたらす新機能を導入することができます。
Uberアプリは技術的にどのように機能しますか?

Uberアプリは、社内で開発されたMLおよびデータ分析プラットフォームを活用して大量のデータを処理します。 乗客がタクシーをリクエストすると、大量のデータが生成されます。 たとえば、アプリは乗客、彼の位置、クレジットカード情報、乗車料金、近くのタクシー運転手などに関するデータを受け取ります。そして徐々に、これらの情報はすべてシステム全体に行き渡ります。 方法を見てみましょう。
乗車がリクエストされると、プラットフォームは次のようになります。
- すべての乗車情報をデータベースに保存します
- 乗客のジオロケーションを使用して乗車リクエストを処理します
- 処理されたすべてのデータをMLを利用したマッチングアルゴリズムに送信します
- データベース内の近くに存在するドライバーに関する情報を検索します

Uberのようなプロジェクトの要件
Uberは2009年に発売され、最も長い間、プラットフォームにはモノリシックアーキテクチャのバックエンドがありました。 つまり、アプリは単一のデータベースと複数のアプリサーバーを使用して、すべてのオンラインリクエストを管理していました。
初期の期間では、これは問題なく機能しました。 ただし、プラットフォームが成長するにつれて、新機能の必要性も急増しました。 また、新機能を統合するために、開発チームはすべてのコードを一度にデプロイする必要がありました。 これはアプリの速度に影響を与え、新機能を導入するプロセスを非常に危険で時間のかかるものにしました。 これは、すべての統合によってシステム全体がダウンする可能性があるためです。 これにより、マイクロサービスアーキテクチャが採用されました。
マイクロサービス

2014年、Uberはマイクロサービスアーキテクチャを採用して、速度とパフォーマンスを向上させました。 基本的に、このアーキテクチャには、互いの機能を対象としたサービスのグループが含まれています。 したがって、開発チームはマイクロサービスアーキテクチャとは独立して新しいコードを簡単にデプロイでき、完全なシステムスケーリングを保証します。
DOMA(ドメイン指向システムアーキテクチャ)
マイクロサービスアーキテクチャはモノリシックアーキテクチャへの大幅なアップグレードでしたが、Uberの開発チームはそこで止まりませんでした。 彼らは、DOMA-ドメイン指向システムアーキテクチャと呼ばれる新しいアプローチを時間とともに採用しました。
このアプローチによれば、開発者は関連するマイクロサービスのコレクションを中心に設計を方向付けます。 そして、これらのコレクションはドメインと呼ばれます。 さらに、ドメインはレイヤーと呼ばれるさまざまなコレクションにも分類されます。 各ドメインが属する特定のレイヤーは、そのドメイン内のマイクロサービスが引き受けることができる依存関係を確立します。 これはレイヤーデザインと呼ばれます。
次に、開発者はGateway APIを使用して、すべてのドメインを他のドメインから独立させます。 したがって、すべてのドメインには独自のロジックがあり、同じレイヤー内の他のドメインとは関係ありません。

簡単に言うと、DOMAは、組織化されたアーキテクチャ、事前定義された拡張ポイント、およびドメインゲートウェイを提供することにより、マイクロサービスアーキテクチャを複雑なものから簡単に理解できるものに変換します。

UberはどのUIフレームワークを使用していますか?
Uberのデザインチームは、新しい機能を追加することでアプリのデザインを絶えずアップグレードすることに重点を置いています。 ただし、これは時間のかかるプロセスです。 そこで、設計チームの取り組みを合理化するために、Baseと呼ばれるReactUIフレームワークを作成しました。

ベースには、色、グリッド、タイポグラフィ、リスト、ボタン、図像など、事前に設計されたUberアプリ要素が含まれています。 このフレームワークにより、デザインチームは、高いUI / UX標準と一貫性を維持しながら、より速いペースでデザインを作成できるようになりました。
フードデリバリーアプリUberの背後にある技術スタックとは何ですか?
2014年、UberのバックエンドにはPython、Mongo、MySQLなどの言語が含まれていました。 一方、ディスパッチシステムはNode.jsとRedisを使用していましたが、モバイルアプリはJavaとObjective-Cを利用していました。 ただし、要件が進化するにつれて、開発者はプラットフォームのほとんどすべてのコンポーネントを変更しました。
マーケットプレイステクノロジースタック
Uberのマーケットプレイスは、すべてのデータストリーミングとデータ分析を管理する重要な側面です。 また、このマーケットプレイスの構築に使用される技術スタックには、Python、Go、Java、Nodeなどの言語が含まれます。 それでは、このマーケットプレイステクノロジースタックを詳しく見てみましょう。
トリップ実行エンジン
トリップ実行エンジンは市場の不可欠な部分であるため、元々はNode.jsで記述されていました。これは、非同期でシンプルなシングルスレッド処理のために好まれていました。 Node.jsにより、Uberチームは大量の同時接続を管理することもできました。 ただし、現在、同社はGoで新しいサービスを作成しています。これは、効率性、同時実行性、およびタイプセーフな操作で知られています。
最前線のAPI
最前線のAPIは、運転席および助手席のモバイルデバイスからの他のAPIおよびサービスにリクエストを送信します。 これは、エッジを除いてNode.jsで記述されています。 フロントエンドにNGINXを使用し、SSLターミネーションといくつかの認証を実行します。
リアルタイム接続
最高の可用性要求をシームレスにサポートするには、マーケットプレイススタックがリアルタイムで情報を受信する必要があります。 したがって、開発者は、協調分散システムを構築するためのライブラリであるRingpopを使用します。 このライブラリのおかげで、開発者はRiakやDynamoDBなどの分散データベースとの高可用性接続を利用できます。
マッチングロジック
マッチングアルゴリズム、つまり、ドライバーとライダーからのアラートをリアルタイムで管理し、それらをマッチングするシステムは、GoとNode.jsで記述されています。 Riakは分散データベースですが、Redisはキャッシングを提供します。
動的な価格設定の最適化
Uberのマーケットプレイスチームは、動的な価格設定、インテリジェントなマッチング、および供給のポジショニングを通じて、最適化とバランスをすべて管理します。 以前は、このスタックのほとんどの部分は、FlaskとuWSGIを備えたPythonを使用して構築されていました。 ただし、現在、開発者はパフォーマンスを向上させるためにほとんどのPythonをGoに置き換えています。
データストリーミングと機械学習
Uberは、データストリーミングにKafkaと独自の本番データベースを使用しています。 また、データストレージは、Hive、HDFS、Elasticsearch、MapReduce、およびファイルストレージWebサービスに依存しています。 同社はまた、内部共有を保証する独自のLIDARを開発しました。 LIDARは、Apache Sparkおよび独自のデータプラットフォームと統合されたJupyter、JupyterHubを実行します。
続いて、Uberには独自のMLプラットフォームがあることに注意してください。 2015年、同社はツールとワークフローを標準化し、MLのアンチパターンを回避するためにMLをスケーリングすることを決定しました。 その結果、彼らは2017年にミケランジェロを開発しました。
ミケランジェロは、データの管理、モデルの評価と展開、傾向予測の作成、および予後の監視を支援するAIおよびMLを利用したプラットフォームです。 MLプラットフォームは、オープンソースシステムと次のような社内コンポーネントの組み合わせで構成されています。
- HDFS
- サムザ
- スパーク
- MLLib
- TensorFlow
- カサンドラ
- XGBoost

Webアプリケーションのスタックテクノロジー
Webベースのアプリの場合、Uber開発者はNode.jsを使用します。これは、Webエンジニアの巨大なコミュニティを持つオープンソースプラットフォームです。 Node.jsを使用すると、開発者はサーバーとクライアント間でJavaScriptコードを共有して、ユニバーサルWebアプリケーションを作成することもできます。 最後に、Nodeに付属しているため、すべてのクライアント側のバンドルにBrowserifyを使用します。 jsベースのモジュール要件。
Bedrockと呼ばれるUberのWebサーバーは、完全なセキュリティと内部化を提供する人気のあるWebフレームワークであるExpress.js上に構築されています。 Atreyuとして知られる自社のサービス通信レイヤーは、バックエンドサービスとのすべての通信を管理し、Bedrockと統合します。 この通信レイヤーにより、企業はSOAサービスAPIに簡単かつ迅速にリクエストを行うこともできます。
Uberは、アプリケーションのレンダリングと状態処理に標準のFluxとReact.jsを使用します。 ビルドシステムであるコアタスクは、Gulp.jsでビルドされたフロントエンドアセットをコンパイルおよびバージョン管理するための事前定義されたスクリプトのグループです。
モバイルアプリケーションのスタックテクノロジー
Uberのようなアプリを開発するには、Androidパッセンジャー、Androidドライバー、iOSパッセンジャー、iOSドライバーの4つの異なるモバイルアプリを作成する必要があります。 開発者はObjective-CとSwiftプログラミング言語を使用してIOSアプリを作成しますが、AndroidアプリはJavaを使用して開発されます。 しかし、それらを除けば、開発者が使用する他のテクノロジーはほとんどありません。 これらには以下が含まれます:
Androidアプリの技術スタック
- Gradle
- OkHttp / Gson / Retrofit
- バターナイフ
- 短剣
- エスプレッソ
- ピカソ
- RxJava
- 木材
iOSアプリの技術スタック
- バック
- 組積造/SnapKit
- KSCrash
- OCMock
Uberのようなフードデリバリーアプリを作成するために使用できるプログラミング言語は何ですか?
Uberのようなアプリを開発したい場合は、次のテクノロジーを統合することを選択できます。
- Node.js –マーケットプレイスWebアプリ用
- Python –Webベースの予約アプリ用
- Go-パフォーマンスと速度を向上させる
- Browserify –クライアント側のバンドル用
- Java –サードパーティのサービス統合用
- Apache Hiveデータウェアハウス–分析およびデータクエリ用
- ELk –ログの保存、処理、および出荷用
- Apache Cassandra –大量のデータを管理するため
- MySQLデータベースサービス-リレーショナルデータベース管理用
- Docker –データセンターインフラストラクチャ用
- HAProxy –プロキシサーバーおよびロードバランサー用
これは、Uberのテクノロジースタックの簡単なまとめです。 ただし、独自の調査を行わずにこの技術スタックをコピーするだけでは、ビジネスモデルに悪影響を与える可能性があります。 また、同じテクノロジーを適用しても、タクシーを呼ぶビジネスの成功は保証されません。
そのため、可能な限りいくつかのテクノロジーを使用してアプリを構築することをお勧めします。 徐々に、ビジネスが拡大するにつれて、新しいテクノロジーを活用して新しい機能を追加し続けることができます。 開始するには、インスピレーションの源としてUberの技術スタックのみを使用する必要があります。
