公開日

Tinder が 1 日あたり 16 億スワイプまでスケールアップした方法

著者

"昔々、日本の沖縄にケンジという名前の学生が住んでいました。

賢司;火口のアーキテクチャ 彼は高等教育を受けるためにオーストラリアに移住する予定です。

しかしある日、彼のガールフレンドは彼と別れました。

それで彼は悲しかったのです。

彼は、Tinder と呼ばれる人々をつなぐプラットフォームについて聞きました。

内向的ですが、彼はそれを試してみることにしました。

Tinder アーキテクチャの簡略版は次のとおりです。

第 1 章: 別れを乗り越える Kenji は Tinder プロフィールを作成し、追加情報を追加します。

Tinder が 1 日あたり 16 億スワイプにスケールアップした方法

ユーザー情報は、Amazon DynamoDB などのキーと値のデータベースに保存されます。また、Dynamo Streams を使用して、テーブル上の変更を別の場所に自動的にプッシュします。

また、ユーザー情報がメッセージ キューに追加され、位置インデックスが更新されます。位置インデックスを使用して、近くのユーザーを効率的に見つけます。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

API ゲートウェイを通じてパブリック API を提供します。つまり、インフラストラクチャに対するユーザー要求の中心的なエントリ ポイントとして機能します。また、ユーザー認証とセキュリティ ルールを処理します。

彼らは約 500 のマイクロサービスを実行します。また、サービス間の通信にはサービス メッシュを使用します。サービス メッシュは、マイクロサービス通信を効率的に管理するためのネットワーク インフラストラクチャであると想像してください。

第2章 沖縄から来た貴婦人 ケンジには近くに住んでいる人々のTinderプロフィールが表示されます。

人の緯度と経度の値のみに基づいて近くにいる人を見つけるのは困難です。

また、ホットシャードの問題を回避するために、世界地図を等間隔のグリッドに分割しません。海のグリッドが空になるからです。一方、大都市の送電網には多くのユーザーがいます。ホット シャードは、単一のパーティションに過剰な負荷がかかることです。

代わりに、S2 ライブラリを使用します。 S2 は、Google によって作成された正方形の階層型地理空間インデックス システムです。

多くのプログラミング言語をサポートする安定したライブラリです。言い換えれば、彼らは S2 を使用してリアルタイムで人々を推薦し、位置データベースをシャード化します。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

S2 は地球の表面を平面グリッド上のセルに分割し、各セルに 64 ビット整数の一意の識別子を与えます。言い換えれば、小さなセルは地球の小さな領域を表します。

これらは、同じデータベース シャード内で物理的に互いに近い場所にユーザーを保存します。したがって、近くのユーザーを見つけるために多くのシャードをクエリする必要性が軽減されます。

そして、S2 は階層的です。つまり、セルのサイズは平方​​センチメートルから平方キロメートルまで変化します。

また、緯度と経度を使用した特定のセルの検索もサポートしています。特定のセルの周囲のセルを検索する機能を提供します。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

S2 はヒルベルト曲線に基づいています。ヒルベルト曲線を、特別な方法で折り曲げたりループさせたりすることで正方形のすべての点をカバーする線として想像してください。ヒルベルト曲線内で近い 2 点は、物理空間でも近いです。つまり、空間的な局所性が維持されます。

それぞれの小さなヒルベルト曲線は S2 セルを表します。 4 つの隣接するセルがより大きなセルを形成し、四分木は 2D ヒルベルト曲線を表します。クアッドツリーは、各ノードがちょうど 4 つの子を持つツリー データ構造です。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

彼らは、近くのユーザーを見つけるために位置インデックス (S2) をクエリします。特定の場所に近いすべてのデータベース シャードを返します。その後、関連するすべてのデータベース シャードに並行してクエリを実行し、それらのシャード内のユーザーのリストを取得します。

平均して、半径 160 km 以内の近くのユーザーを見つけるために 3 つのデータベース シャードをクエリします。また、人を推薦する前に、ユーザーの好みに基づいて結果をフィルタリングします。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

ケンジは沖縄から来た女性と会う。

しかし、彼女は遠距離恋愛に興味がなかったので、うまくいきませんでした。

第3章 沖縄からシドニーへ ケンジは、Tinder でオーストラリアのシドニーにいる人とマッチングするほうが合理的だと考えました。

そこで彼は、パスポートと呼ばれる Tinder の機能を使用して、自分の場所を変更します。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法

ユーザーの所在地の変更

ユーザーの場所の変更に応じてインデックスを更新します。そのため、新しい場所にいる人もユーザーを見ることができます。つまり、ユーザーを新しい場所インデックスに追加し、古いインデックスからユーザーを削除します。

ただし、これらの操作はアトミックではないため、失敗するリスクがあります。

ある日、ケンジがプロフィールを新しい場所に更新するまでは。そしてすぐに元の場所に戻ります。しかし、操作が同じ順序で実行されなかったため、彼のユーザー データは依然として新しい場所を指していました。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 順序が保証されない問題

そこで彼らは、この問題を解決するために Apache Kafka を使用しました。 Kafka は、大規模なデータ処理のための分散ストリーミング プラットフォームと考えてください。

同じユーザー データを同じ Kafka パーティションに送信しました。一方、Kafka コンシューマは競合を避けるためにパーティションのロックを取得します。したがって、順序保証と非常に高いスループットを備えた FIFO キュー実装が提供されます。

また、プロセスがクラッシュした後に処理を再開できるように、Kafka にチェックポイントを付けます。

第4章:ゾーイとケンジ ケンジはTinderをスワイプし続けた。

そして日が経ちました。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 ユーザーのマッチング

Amazon Kinesis などのデータ ストリームにスワイプを送信します。そして、マッチ ワーカーを実行してデータ ストリームを読み取り、Likes キャッシュに一致するものがあるかどうかを確認します。

一方、「いいね!」キャッシュには、ユーザーが「いいね!」した人に関する情報が保存されます。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 一致についてユーザーに通知する

WebSocket を使用して、一致するものがあればユーザーに通知します。したがって、リアルタイムの体験が得られます。 WebSocket は、リアルタイムの双方向通信プロトコルです。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 ユーザーが嫌いなプロファイルを保存する

彼らは、個人が嫌ったプロファイルを Amazon S3 などのデータ ストレージに保存します。そしてその情報をデータ分析に使用して、ユーザーへの推奨事項を改善します。

Tinder が 1 日あたり 16 億スワイプにスケールアップした方法 ある日まで。ケンジはゾーイとマッチした。

シドニーから来た女性。

第 5 章: 問題はガイドラインである ユーザーの一意の数を計算して、シャードの負荷を調べます。また、シャード内のユーザーは通常、同じタイムゾーンにいます。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 2 つの異なるシャードのトラフィック パターン

タイムゾーンの違いにより、ホットシャードの問題が発生する可能性があります。つまり、時間差により、ピーク交通量は場所によって異なります。そして、シャード間で不均衡なトラフィックが発生します。

しかし、物理サーバーにシャードが 1 つあると事態はさらに悪化します。そのため、ホットシャードの問題を防ぐために、多くのシャードを同じ物理サーバーにランダムに割り当てます。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 ホットシャード問題を回避するためのキャッシュ

また、Tinder でのほとんどのデータ操作は読み取り操作です。そのため、規模を拡大するために Redis キャッシュを使用します。

これらはキャッシュアサイド パターンを使用します。言い換えれば、キャッシュにデータがあるかどうかをチェックします。それが存在しない場合は、データベースにフォールバックします。また、キャッシュはデータで更新されます。

したがって、キャッシュ層は読み取りホットシャードの問題を解決します。一方で、書き込みホットシャードの問題を処理するためにレート制限が行われます。

さらに、障害時にはジッターを伴う指数関数的なバックオフを実行します。また、バックグラウンド ジョブを定期的に実行してデータ ストアを同期します。

Tinder は依然として最大の出会い系プラットフォームの 1 つです。 1 日あたり約 2,600 万件の試合を処理します。

Tinder が 1 日あたり 16 億スワイプにまで拡大した方法 ケンジとゾーイはずっと幸せに暮らしていました。

"

日本語版は Ai 支援を使用しているため、小さな間違いが存在する可能性があることをご了承ください。 Tinder が 1 日あたり 16 億スワイプまでスケールアップした方法

著者

Ai Base Network (ABN), ABN ASIAは、アカデミアに深く関わり、アメリカ、オランダ、ハンガリー、日本、韓国、シンガポール、ベトナムでの仕事経験を持つ人々によって設立されました。ABN ASIAは、学問とテクノロジーが機会と出会う場所です。最先端のソリューションと優れたソフトウェア開発サービスにより、ビジネスがレベルアップし、グローバルシーンに挑戦できるよう支援しています。 私たちの取り組み: より速く。 より良い。 より信頼性が高くなります。 ほとんどの場合、価格も安くなります。

いつでも、ITサービス、デジタルコンサルティング、既製のソフトウェアソリューション、または提案依頼書(RFP)をお探しの際は、お気軽にお問い合わせください。お問い合わせ先は[email protected]です。お客様のテクノロジーに関するニーズにお応えします。

ABNAsia.org

© ABN ASIA