Skip to main content

Command Palette

Search for a command to run...

知識閱讀 - Tinder 的系統設計

這一篇我寫得很隨性

Published

從這篇文章來看 Tinder 的系統設計,以下是基礎的架構資訊:

  1. Tinder 完全 Host 在 AWS 上
  2. 使用了 AWS amplify 來建立和測試 iOS 和 Android
  3. 使用 MongoDB 作為 Database 和 Redis 作為 Cache

此篇文章只會探討於以下的功能:

  1. Login using OAuth (FB)
  2. Swipes (Left, Right)
  3. Matching
  4. chat
  5. push notification
  6. super likes

How recommendation algorithms work

這邊有提到了幾個 Tinder 如何實作推薦的方式。

  1. Active usage:會先看使用者的使用頻率,這個合理。沒什麼在使用的人就比較不推薦,但這樣有特別強調。不是登入次數,而是使用者如何使用應用程式
  2. Collect tags:當使用 Facebook 登入時,會搜集許多相關資料(很常見的資料,你懂的),有特別提到會抓取照片。我想應該會去做照片內容的分析。
  3. Group userbase:這邊是我覺得比較特別的,當使用者登入時,會從 tinder 得到一個隨機的分數,然後被分群在不同的 bucket(我就很好奇這分數是真的隨機,還是計算出來的)。
  4. Your pickiness/Bad actors:這裡提到的情境是,如果說你總是右滑,那就是會被頻蔽不被推薦。但我覺得這個案例,跟第一點滿想關的。個人覺得比較是如果有被檢舉之類的才比較是這一類別吧。
  5. Do you reply?:你在配對後有多主動回復
  6. Progressive taxation:這裡比較像是平衡機制,當一個人獲得太多關注或配對,就會降低這個人的推薦,反之亦然。

Recommendation Engine properties

  1. 低延遲:當登入到應用程序時,需要快速載入個人檔案/潛在匹配檔案。因此,我們的 RE 需要具有低延遲。
  2. 不是實時的:如果不是實時的也沒關係,即如果有人新加入 tinder,可以花一分鐘時間在 Tinder 上才顯示此人的個人資料。
  3. 易於 shard/distribute:由於我們擁有來自全球的大量個人資料,因此該推薦引擎應該能夠對資料進行 shard,因為我們無法將其保存在一個系統中。
  4. 全文搜索:我們需要搜索個人的整個個人資料,以提供更好的推薦
  5. HTTP interface:或 Web socket,用於獲取資料並將其發送到應用程式
  6. 資料結構:XML/JSON

這邊 Tinder 使用了 Elastic Search 來處理搜尋和排序資料的問題。

文章有提到兩個問題:

  1. 如何 shard 資料讓 elastic search 可以更快的搜尋
  2. 如何依照地理位址進行 shard 資料

How to shard data

Tinder 將使用者的地理位置分區,依照使用者的多寡和 active user 數量和 query 數量,對不同的區域作權重分配(使用 Google s2 library 來儲存資訊,這啥?),並且查看這些地區的延遲和性能。

詳細的細節我就不贅述了,作者有畫了一些滿不錯的圖來講解。不想盜圖也懶得重畫,所以建議可以去作者那邊看看。

About matching

對於配對有三種情境:

  1. A 和 B 彼此右滑
  2. A 右滑 B,但是 B 沒有
  3. B 右滑 A,A 沒有右滑直到現在

配對服務跟推薦的分區類似,但是會是範圍更大。例如一個配對服務的分區,可能是 10 個推薦分區的大小。這邊雖然提到不同國家間不會配對,只會發生在有推薦給使用者的推薦分區,但是這文章是 2020 的,記得現在 Tinder 因為疫情現在是可以跨國的,所以可能狀況不太一樣了。

當 A 右滑 B 的時候,會送訊息到 Kafka,然後 Kafka consumer 會將其狀態存到 Reids,類似一個 Key A_B。然後去找找看 B 有沒有右滑 A 過,如果有的話應該可以找的 B_A,沒有的話則略過。如果 B_A 存在,就代表配對成功,就會送出 matched queue,利用 web socket 送出配對成功的通知。

這邊有點像似一個 in-memory database,這就滿需要考慮持久化了,不過想想好像也不是那麼重要,就算遺失了,配對不到也沒那麼重要,重要的是已經配對的不能消失。

Reference

Software development

Part 22 of 50

A series about software engineering

Up next

字型的標準比較

TTF, OTF, WOFF

More from this blog

如何開始入門軟體工程領域 - 名詞解釋(長期更新)

現在應該開始有很多人想要踏入軟體工程的領域,但在進入這個領域之前,覺得先了解一些名詞,可以在入門時更有方向也更知道要用什麼關鍵字去找尋有用的資訊。這篇文章就是想要幫助想要入門的人理解一些軟體工程裡的專有名詞。 作業系統 這一區塊主要解釋跟作業系統層面相關的名詞 英文中文解釋 Operation system 簡稱 OS | 作業系統 | 就是電腦的作業系統,是三大作業系統分別是:Linux、Windows、macOS | | Linux | | 自由和開放原始碼的 UNI...

May 10, 2023

我的 MacBook Pro (Apple Silicon) 設定

現在開始因為 ChatGPT 的出現,各種 AI 助手的功能都跑出來了。想想自己用了許久的環境設定也應該要來重新審視和建立新的開發環境了,僅此紀錄我個人的環境配置步驟和設定。 環境前置步驟 還原 MacBook Pro 至全新環境 macOS(全部資料刪除) 設定好初始設定後,登入 Apple ID 進入 App Store 確定 macOS 版本和預設 APP 都更新到最新 macOS 版本 到系統設定調整所有設定至個人習慣的設定 三指拖移 觸控板手勢開啟 防火牆開啟 輸入法設定...

Apr 25, 2023

ChatGPT 下的發展預想

從 ChatGPT 問世到現在,有許許多多的文章和討論出來。先從最早的 Google 要完蛋了,到後來的工作要被取代了,工程師失業了。 我就比較沒有想要馬上出來評論一下,我喜歡讓子彈飛一會兒。跟討論一下我自己比較在意的討論點。 Google 為什麼慢了? 結論:因為他需要更小心 很多人說 Google 怎麼被微軟搶先了一步。剛開始 Bing 說要加上 AI 的時候大家都在說 Google 怎麼慢了。我就馬上跑去看 OpenAI 的網站,靠北呀啊就 Azure 贊助的。那當然在正式上線 ChatG...

Mar 23, 2023

不工程的攻城獅

223 posts

I am not a programmer because I am not good at programming. But I do programming. Love to learn new things. An animal lover and a dancer. My oshi is 潤羽るしあ.