2012-03-25 57 views
1

我一直在想,當我試圖登錄我的Gmail或Facebook時,登錄操作如此快速地執行如何。我的意思是,例如,Google擁有的服務器數量超過了一百萬臺, 3秒鐘登錄。我現在沒有對這些大數據做任何事情,但我可能會遲一些,所以我現在想在有空的時候透露一下這項技術。如何在有非常大的數據庫時快速登錄?

請仔細閱讀以下內容,我知道我的理論是否正確(至少是其中的一部分)。 我的想法是服務器遍佈各個國家。假設有100臺服務器在英國。當我嘗試登錄時,它只知道我在哪裏,並將我的用戶名和密碼傳遞給這些服務器。在數據庫中找到我的第一臺服務器將作出響應。

這種方法切斷了大量的數據進行檢查。但是當我移居美國時,如何知道在哪裏搜索? ...以及服務器如何處理數千個用戶同時登錄的問題?

回答

1

Google幾乎將數據複製到全球所有數據中心。這是Google速度的主要原因。如果您從英國轉移到美國,數據將不會在美國上市。只要您在美國首次登錄,就會調用最近的服務器,然後再查找登錄歷史記錄並複製來自英國服務器的所有用戶數據。

注:喜歡你的,甚至我的是不是證明了一個理論,因爲谷歌從來不公開這些機制

+0

接下來的問題是如何做的改變,當他們處理無效的舊密碼。我猜想密碼更改可能是一個後臺進程,在某些服務器上可以接受的小延遲,他們在全局範圍內告訴每個「本地」節點舊密碼現在無效。 – Seph 2012-03-26 06:35:48

1

我不知道他們是怎麼做到的,但是有很多技術來傳播負載。一個特別簡單的解決方案是使用您的用戶名的散列來查找保存憑據的分區。

如果您想要對auth服務器進行地理定位,可以在GeoIP數據庫(如MaxMind's)中查找原始IP。當找到本地服務器時,如果它沒有用戶的信用,它可以從中央服務器場進行一次性慢速獲取。

1

馬塞洛的分區是正確的。大多數現代大型數據庫都支持以這種方式分割數據。

要回答您的問題的其他位,無論如何默認情況下您的數據都可以複製到多個物理位置以實現冗餘。在你的IP上使用地理查找可以暗示哪些服務器最接近發送查詢。或者,您可以使用map-reduce類型的解決方案 - 將作業發送給幾臺服務器,然後只是先回答問題。

確保從RAM(通過緩存)而不是從保存數據庫的磁盤中滿足您的查詢,這往往會產生顯着效果。

相關問題