數據中心內的延遲是多少?我問這個假設有幾個數量級的差異
我試圖找出一些我無法找到好的答案的東西。
如果我說 REDIS 記憶體(或一些外部記憶體記憶體)位於數據中心,而應用程序伺服器位於同一數據中心,讀取數據的網路連接速度(延遲、吞吐量)將是多少這兩台機器之間?
例如,網路“速度”是否仍然比從 REDIS 上的記憶體中尋找我的數據的 RAM 的速度至少高一個數量級?
我的最終問題是——將這一切都保存在 REDIS 上的記憶體實際上是否提供了任何實用程序?與 REDIS 是否將這一切都記憶體到 SSD 形成對比?記憶體很貴。如果網路確實不是數據中心內的瓶頸,那麼記憶體就有價值。否則,它不會。
我想我的一般問題是,儘管數據中心存在大量未知數,並且無法概括以及差異,但我們是否在談論電腦系統中的記憶體延遲甚至是記憶體的 DC 內部的最佳網路之間的足夠數量級?減少延遲並不能顯著提高性能?我知道有很多變數,但它有多接近?這些變數真的很重要嗎?例如,採取雙曲線的立場,磁帶驅動器比網路慢得多,因此磁帶不適合記憶體。
“每個人都應該知道的延遲圖表”有幾個版本,例如:
- https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- https://gist.github.com/jboner/2841832
- https://computers-are-fast.github.io/
問題是,實際上,不僅僅是延遲。這是多種因素的組合。
那麼,數據中心內的網路延遲是多少?延遲,好吧,我會說它“總是”低於 1 毫秒。它比 RAM 快嗎?不。它靠近 RAM 嗎?我不這麼認為。
但問題仍然存在,它是否相關。這是你需要知道的數據嗎?你的問題對我來說很有意義。由於一切都是有代價的,您是否應該獲得更多的 RAM,以便所有數據都可以保留在 RAM 中,或者不時從磁碟讀取是可以的。
您的“假設”是,如果網路延遲高於(慢)於 SSD 的速度,則將所有數據都保存在 RAM 中不會讓您受益,因為您的網路速度會很慢。
它看起來是這樣的。但是,您還必須考慮並發性。如果你一次收到1000個數據請求,磁碟可以做1000個並發請求嗎?當然不是,那麼處理這 1000 個請求需要多長時間?與記憶體相比?
很難將其歸結為單一因素,例如重載。但是,是的,如果您進行單個操作,那麼網路的延遲可能會導致您不會注意到 SSD 與 RAM 的區別。
就像在 12Gbps 磁碟出現在市場上之前一樣,10Gbps 網路鏈路不會因單個流而過載,因為磁碟是瓶頸。
但是請記住,您的磁碟正在執行許多其他操作,您的程序不是機器上的唯一程序,您的網路可能承載不同的東西,等等。
此外,並非所有磁碟活動都意味著網路流量。從應用程序到數據庫伺服器的數據庫查詢只是非常小的網路流量。來自數據庫伺服器的響應可能非常小(單個數字)或非常大(具有多個欄位的數千行)。要執行該操作,伺服器(無論是否是數據庫伺服器)可能需要進行多次磁碟查找、讀取和寫入,但僅通過網路發送很少的一部分。它絕對不是一對一的網路磁碟 RAM。
到目前為止,我避免了您問題的一些細節 - 特別是 Redis 部分。
Redis 是一個開源(BSD 許可)的記憶體資料結構儲存,用作數據庫、記憶體和消息代理。- https://redis.io/
好的,這意味著一切都在記憶體中。抱歉,這個快速的 SSD 驅動器在這裡幫不了你。Redis 可以將數據持久化到磁碟,因此可以在重新啟動後將其載入到 RAM 中。這只是為了不“失去”數據或在重啟後重新填充冷記憶體。因此,在這種情況下,無論如何,您都必須使用 RAM。您必須有足夠的 RAM 來容納您的數據集。沒有足夠的記憶體,我猜你的作業系統會使用
swap
- 可能不是一個好主意。