資安

【熱點】探探的微服務架構

最近在很多場合都聽到探探這樣一款App:雲棲大會、微服務案例分享、脫口秀大會等等,老司機們一定知道我在說啥,作為國內版的Tinder,它在系統設計上還是借鑑了許多老大哥的想法。

探探的功能可以簡單概述為四個部分:用戶配置文件管理、個性化推薦匹配、配對服務和實時消息服務。簡單地說個人配置文件就是每個用戶的介紹,主要存儲的是用戶照片或視頻,畢竟人類是視覺動物,尤其是對於第一印象,照片的上限是9張;推薦服務根據篩選條件(性別,年齡,距離,愛好等)從活躍用戶中推薦匹配者;配對服務即雙方都有意向,對方將進入自己的匹配用戶名單,即服務端的通訊錄列表,男性的匹配成功率在0.1%,即每一千次右劃能配對成功一次,當然這也看頭像和區域哈(當然女性玩家會高出幾百倍);最後是實時通訊服務,即點到點即時聊天,不能添加第三方更不能組群^.^
1.jpg

好了,先說第一項功能,探探的客群還是以大陸地區為主,即便如此,圖片和小視頻的存儲量也是相當驚人的,如何確定這些對象在服務端的存儲方式,究竟是用文件還是塊存儲呢?相對於文件存儲,塊存儲的優勢在於以下三點:

  • 易編輯:塊存儲的表結構可以方便用戶提取任意數據塊進行編輯;
  • Transaction保證:變更需要commit並確認操作成功;
  • 索引功能:可以提升搜索效率。
  • 便於做訪問控制

平心而論,照片一般作為一個整體文件被添加或替換,所以前兩個特點的應用場景並不多,而且在實際操作中,很少有用戶會給照片添加各種元數據(拍攝時間,地點,圈頭像等等),甚至連照片名字都是一串數字,常規搜索都詞不達意,更別說特徵搜索了。因此看起來唯一有用的功能只剩訪問控制了。我們再來看看文件存儲的優勢:

  • 便宜
  • 訪問迅速:不需要遍歷表把所有數據塊拼起來,一般只需要建立用戶--圖片--存儲位置的單表就可以了。

2.png

  • 可通過CDN進一步提升訪問速度,CDN可以很好地緩存多媒體文件。
    3.jpg

下面進入我們的正題,首先我們該如何對用戶的配置文件進行微服務拆分?主要考慮有以下幾點。

  • 用戶訪問配置文件(記錄用戶的基本信息,暱稱、地區、愛好等等)需要提供祕鑰(為提高安全級別可以將密碼替換成令牌),如果我們直接將配置文件與用戶對接,那勢必別的服務都需要與配置文件建立連接以獲取驗證信息。但很多情況是不必要的,例如即時通訊跟用戶的配置文件毫無關係。基於此我們需要建立一個應用網關服務,專門用來核實用戶身份。
  • 配置文件是否要和用戶的照片庫關聯,目前看來似乎只有進入用戶賬號才能看到該用戶的照片,但是從長遠來看,不排除會將所有照片進行AI分析,以開發更多客群服務,所以這部分在實際操作中,探探還是將其拆分了。

因此配置文件拆分後的微服務就如下圖所示。
4.png

配對服務的業務邏輯是,如果你喜歡我,我也喜歡你,雙方就加入到各自的通訊錄裡,不然你就再也不會瀏覽到該用戶。用戶的配置文件跟配對服務沒有關係,配對數據庫只記錄任意通過驗證的兩個ID之間的雙向選擇關係,一旦雙向選擇了,就配對成功,當然如果一方取消配對也會實時地刪除雙方通訊錄。因此可以簡單理解為下面的微服務架構。

5.png

關於即時聊天服務,小編已經在微信的微服務中介紹過了,這裡需要注意的是HTTP是客戶端到服務端的單向通信服務,作為即時通訊來說,不可能讓用戶每次登陸才能查看到未讀消息,因此這裡需要建立XMPP通訊協議來使服務端可以主動發消息給客戶。

6.jpg
綜上所述:探探的微服務從前至後包括了:網關服務、配置文件、圖片庫、配對服務、全網配對數據庫(由於數據量的關係,這部分很可能對數據進行了切片,將不同地域的用戶放在不同地區的數據庫裡)、會話服務、會話數據庫、消息數據庫。

各位觀眾如果有想了解的互聯網公司的架構,可私信小編,我們可以一起探討一下。

Leave a Reply

Your email address will not be published. Required fields are marked *