系統設計:如何設計一個類似於Tinder的基於位置的社交搜尋應用
如何設計一個類似於 Tinder 的基於位置的社交搜尋應用程式,如果經常用作約會服務。它允許使用者使用滑動動作來喜歡(向右滑動)或不喜歡(向左滑動)其他使用者,並允許使用者在雙方互相喜歡時聊天(“匹配”)。
這是Ankit Sirmorya的客座帖子。Ankit 擔任機器學習主管/高階工程師。亞馬遜的機器學習工程師,並領導了亞馬遜生態系統的多項機器學習計劃。
設計要求:
應用程式應該能夠支援以下要求。
- 使用者應該能夠通過新增他們的簡歷和上傳照片來建立他們的 Tinder 個人資料。
- 使用者應該能夠檢視地理位置附近區域中其他使用者的推薦。
- 使用者應該能夠喜歡(向右滑動)或不喜歡(向左滑動)其他推薦的使用者。
- 使用者應在與其他使用者匹配時收到通知。
- 使用者應該能夠移動到不同的位置,並且仍然可以獲得附近使用者的推薦。
- 傳送和接收來自其他使用者的訊息。
架構設計:
閘道器後面將有一組微服務來服務使用者請求。建立使用者配置檔案時將呼叫配置檔案建立者服務。該服務會將使用者資訊儲存在資料庫中,並將使用者新增到相應的地理分片索引中,以便使用者出現在附近使用者的推薦中。當收到為其他使用者生成推薦的請求時,推薦服務會查詢此索引。一旦使用者開始瀏覽這些推薦,Swipes 服務就會接收這些滑動並將它們放置在資料流中(例如 AWS Kinesis/SQS)。有一組工作人員從這些流中讀取資料以生成匹配項。工作人員通過查詢 LikesCache 來確定它是否匹配。
使用者配置檔案建立
上面的序列圖顯示了使用者在 Tinder 上建立個人資料時執行的操作序列。在同步過程中,使用者媒體(例如照片)被上傳到檔案伺服器上,並且包括使用者位置在內的使用者資訊被儲存在像 Amazon DynamoDB 這樣的鍵值儲存中。此外,此使用者被新增到佇列中,用於將使用者新增到地理分片索引。
非同步程式從佇列中讀取使用者資訊,並將此資訊傳遞給 GeoShardingIndexer。索引器使用諸如 Google 的 S2 庫之類的地理庫將使用者的位置對映到地理分片並將使用者新增到與該分片關聯的索引中。這有助於使用者出現在其他附近使用者的推薦中。
......
詳細點選標題
相關文章
- 分散式搜尋系統的設計分散式
- 一圖簡看基於搜尋的問答機器人設計機器人
- 基於中臺思想的物流系統設計(一)
- 基於系統融合的統一監控平臺設計
- 設計一個基於svg的塗鴉元件(一)SVG元件
- 基於雲原生的秒殺系統設計思路
- 基於abp的小小裝置控制系統設計
- 設計一個基於 LSTM 神經網路的文字分類器神經網路文字分類
- 基於 Seata Saga 設計更有彈性的金融應用
- 一個類似於Gridster的柵格佈局系統Vue元件Vue元件
- 基於關卡設計維度的戰棋遊戲系統與關卡設計用例遊戲
- 基於ZooKeeper,Spring設計實現的引數系統Spring
- 如何設計一個RPC系統?RPC
- 如何設計一個 RPC 系統RPC
- 基於Netty,徒手擼IM(一):IM系統設計篇Netty
- Java畢業設計_基於MySQL網盤管理系統的設計與實現JavaMySql
- 有贊基於ES的搜尋系統架構是如何演進的?架構
- 一個TextView設定多種格式(類似於“評論”的樣式)TextView
- 基於電商中臺架構-商品系統設計(二):類目設計架構
- 基於java的網路招聘系統的設計與實現Java
- 基於java的文章釋出系統的設計與實現Java
- 基於Spring Security和 JWT的許可權系統設計SpringJWT
- 如何設計一個微博系統?- 4招教你搞定系統設計
- 【系統設計】設計一個限流元件元件
- 如何設計一個秒殺系統?
- 如何設計一個秒殺系統
- 如何設計一個高可用的運營系統
- 如何設計一個優秀的秒殺系統?
- 基於shiro RBAC的表設計
- 基於 esbuild 的 universal bundler 設計UI
- 基於原型的角色設計方法原型
- 基於javaEE的土地檔案管理系統的設計及開發Java
- 基於JSP自定義投票網站系統設計JS網站
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- 基於BPMN2.0的工單系統架構設計(上)架構
- 基於PLC的混凝土攪拌站控制系統軟體設計
- 基於 LLM 的智慧運維 Agent 系統設計與實現運維
- 基於 Kafka 的實時數倉在搜尋的實踐應用Kafka