系統設計:如何設計一個類似於Tinder的基於位置的社交搜尋應用

banq發表於2022-02-02

如何設計一個類似於 Tinder 的基於位置的社交搜尋應用程式,如果經常用作約會服務。它允許使用者使用滑動動作來喜歡(向右滑動)或不喜歡(向左滑動)其他使用者,並允許使用者在雙方互相喜歡時聊天(“匹配”)。

這是Ankit Sirmorya的客座帖子。Ankit 擔任機器學習主管/高階工程師。亞馬遜的機器學習工程師,並領導了亞馬遜生態系統的多項機器學習計劃。

 

設計要求:

應用程式應該能夠支援以下要求。

  • 使用者應該能夠通過新增他們的簡歷和上傳照片來建立他們的 Tinder 個人資料。
  • 使用者應該能夠檢視地理位置附近區域中其他使用者的推薦。
  • 使用者應該能夠喜歡(向右滑動)或不喜歡(向左滑動)其他推薦的使用者。
  • 使用者應在與其他使用者匹配時收到通知。
  • 使用者應該能夠移動到不同的位置,並且仍然可以獲得附近使用者的推薦。
  • 傳送和接收來自其他使用者的訊息。

架構設計:

閘道器後面將有一組微服務來服務使用者請求。建立使用者配置檔案時將呼叫配置檔案建立者服務。該服務會將使用者資訊儲存在資料庫中,並將使用者新增到相應的地理分片索引中,以便使用者出現在附近使用者的推薦中。當收到為其他使用者生成推薦的請求時,推薦服務會查詢此索引。一旦使用者開始瀏覽這些推薦,Swipes 服務就會接收這些滑動並將它們放置在資料流中(例如 AWS Kinesis/SQS)。有一組工作人員從這些流中讀取資料以生成匹配項。工作人員通過查詢 LikesCache 來確定它是否匹配。

使用者配置檔案建立

系統設計:如何設計一個類似於Tinder的基於位置的社交搜尋應用

上面的序列圖顯示了使用者在 Tinder 上建立個人資料時執行的操作序列。在同步過程中,使用者媒體(例如照片)被上傳到檔案伺服器上,並且包括使用者位置在內的使用者資訊被儲存在像 Amazon DynamoDB 這樣的鍵值儲存中。此外,此使用者被新增到佇列中,用於將使用者新增到地理分片索引。

非同步程式從佇列中讀取使用者資訊,並將此資訊傳遞給 GeoShardingIndexer。索引器使用諸如 Google 的 S2 庫之類的地理庫將使用者的位置對映到地理分片並將使用者新增到與該分片關聯的索引中。這有助於使用者出現在其他附近使用者的推薦中。

......

詳細點選標題

 

相關文章