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