一直以來,我都對微信的設計有點疑問。
1、微信登錄pc端只能通過手機掃碼登錄。
2、在你更換設備之后,微信的聊天記錄完全無法同步,也無法感知是否被好友拉黑。
3、兩個同在澳大利亞地區的人進行消息通信幾乎瞬間收到。
首先為了滿足第三個條件,假想微信在國內建立單點的服務器,那么這種性能一定不足以支撐澳大利亞內這么快的通信,我的猜想是微信是分布式的,在各地都有它的服務器,每次進行消息通信都是由附近的服務器去處理(澳大利亞的服務器之間通信),此時就涉及到了服務器選擇算法,你要和好友構成通信,此時就涉及到了服務器查找算法,當建立連接之后你倆就可以互相通信了,可是此時就會出現一個問題,當我坐飛機從北京飛到加拿大,我的手機全程保持關機狀態,到達目的地之后打開微信,此時又是怎么拿到消息的呢?此時微信發現發現原有北京微信服務器已經延遲實在是太高,觸發了服務器選擇算法。服務器重選后,我很快確定了要連接到新加坡的服務器。但是微信的消息並不會廣播滿整個分布式集群,新加坡的微信服務器實際上並無法得知我的未讀消息。所以必須需要一個服務器端切換算法來實現將我在北京服務器上的未讀消息同步到新加坡服務器上。
然后此時第一個問題就很好解釋了,如果微信支持密碼登錄,當我的手機和電腦所在服務器不同,手機上就再也收不到消息了。
微信的聊天記錄完全保存在本地,這就可以解釋第二個問題:為什么換了設備后聊天記錄會全沒?因為服務器只是一個中轉、傳達、暫存功能。在你更換設備后自然本地沒有這些數據,就全丟光了。而你掃碼登錄pc端的時候,最近的聊天記錄是由你的手機同步到電腦上的,因為此時服務器根本就沒有存取你的聊天歷史。微信的好友列表是怎么維持的?換了設備,好友列表也能正常同步,所以好友列表應該並不是只存本地,而是存在於服務器上的。接下來解釋下好友拉黑問題,當你被微信好友拉黑時,實際上並沒有發出一條消息,所以你的本地的消息歷史中,仍然存在有和拉黑了你的好友的消息記錄,就像Email發送者即使Block了你的Email,你仍然能夠看到你們的聊天歷史一樣。自然這種設計,就導致你無法得知這件事了。只有在你嘗試發送消息時發送失敗了,才能證明可能他已經不再想和你說話了。 類比QQ,QQ是有完整的多設備同時登錄、聊天記錄跨設備同步、QQ群的保持和搜索等這些功能的。它更大的可能是一個集中式的部署,靠強大的負載均衡和運維能力支撐這一個數據中心正常。如果你在澳大利亞聊QQ你會發現一條消息要轉半天,所以某鵝這樣設計微信是有它的道理的。
謝謝觀賞