Uberはデータセンターが落ちたときのために運転手たちのスマートフォンをバックアップに使っている
ソフトウェアによって従来のタクシー業界を一変させようとしているUber。同社はスマートフォンとクラウドで稼働するソフトウェアによって、位置情報を用いた利用者とUberドライバーのマッチングや、キャッシュレスな支払いなど、さまざまなサービスを実現しています。
このサービスの要であるデータセンターが災害などで落ちたときの備えについて、同社はほかのデータセンターにデータをレプリケートするのではなく、Uberと契約しているドライバーが持つスマートフォンをバックアップ先とするアーキテクチャを、先週9月14日にサンノゼで開催されたイベント「@Scale」のセッション「How Uber Uses your Phone as Backup Datacenter」(Uberはいかにしてスマートフォンをデータセンターのバックアップに用いているのか)で紹介しました。
その動画が公開されていますので、前半で説明されているシステムの概要について要点を記しました。動画の後半では詳しい実装について解説されています。
How Uber Uses your Phone as Backup Datacenter
Uberの仕組みについて。
Uberの利用者がスマートフォンから利用要求(Tripの要求)を送信すると、その位置情報とドライバーたちの位置情報がデータセンターでマッチングされ、ドライバーがそれを受諾すると、それが利用者に伝えられる。
ドライバーが利用者の場所へ到着し、利用者が乗車するとTrip(行程)が始まる。
利用者が目的地に着きTripが完了するまで、データセンターとスマートフォンのあいだではTripに関する何回もの通信とトランザクションが発生する。
しかし万が一データセンターが落ちてしまった場合、どうすべきか。
クラッシックな対策法としては、バックアップ用のデータセンターを用意し、つねにデータを複製し続け、障害時にフェイルオーバーするというものがある。
この方法は、高速な複製のためデータセンター間に広帯域のネットワークが必要となるなどの課題がある。
そこで、もしもTripに関するすべてのトランザクションをドライバーのスマートフォンに保存し、フェイルオーバー先のどんなデータセンターにでも展開できたらどうだろうか。 われわれは、このモバイルによる実装を選択した。
もちろんこの方法にも課題はある。利用者の情報保護などのため、データを暗号化してドライバーのスマートフォンに保存しなければならない。
シンプルな実装のレプリケーションプロトコルで、ネットワークの帯域を最小限にしなければならない。シンプルなプロトコルのため、われわれはキーバリューストアとget、set、deleteを使うことにした。
TripごとにTrip番号を設定し、Trip番号ごとにバージョン管理をしてデータの更新に対応している。
あわせて読みたい
マイクロソフト、Linuxベースのデータセンター向けスイッチ用OS「Azure Cloud Switch」開発をブログで紹介。ASICのプログラミング用API搭載
≪前の記事
20億行のコードを保存し、毎日4万5000回のコミットを発行しているGoogleが、単一のリポジトリで全社のソースコードを管理している理由