2015-11-02 113 views
1

我想建立一個網站,需要服務器大量或讀取請求。沒有用戶寫信。我想使用MySQL作爲我的後端服務器,並將redis作爲我的緩存層。Redis獨立服務器或與MySQL

數據大小爲60 GB。我有8個EC2,它有2個內核和6個內存。我的想法是使用redis來存儲儘可能多的數據。但是我想知道redis服務器和mysql服務器的數量應該是多少。由於數據的總站點只有60GB,如果我可以有8個Redis服務器可以容納大約40GB的數據。所以不可能只使用redis。

選項1:將數據均勻地分片到7個同時擁有MySQL和redis的服務器。每臺服務器在MySQL中存儲大約10GB數據,redis存儲4-5GB數據(實例只有6GB RAM)。我將有一臺服務器執行負載平衡並指向存儲該值的正確服務器。

選項2:使用MySQL將我的數據分爲兩臺服務器,其他5臺服務器是存儲來自這兩臺服務器的數據的redis服務器。和一臺前端服務器做負載均衡指向右側的redis服務器。如果redis服務器沒有找到任何東西,那麼它會從MySQL服務器讀取數據?

當我使用單個MySQL服務器時,延遲大約爲100ms。我想顯着減少延遲,這就是爲什麼我想出了這些方法。

我對後端架構沒有太多經驗。任何幫助或任何新的想法表示讚賞。

+4

此網站是爲編程問題。我們不是在這裏推薦您的服務器基礎設施。 –

回答

2

它不這樣工作。

您在兩種選擇中都會錯過的是一些後端軟件。 Redis和MySQL是獨立的數據存儲。如果緩存未命中,Redis將不會從MySQL獲取數據。

您還需要評估您的工作集:您的數據將被頻繁訪問的百分比,因此必須從緩存中提供。

您需要負載均衡器。您還需要編寫一個服務器軟件,該軟件試圖首先從Redis獲取數據,如果未命中,請對MySQL執行查詢,然後向Redis提供結果。它可能還必須維持一些緩存失效流量。

個人而言,我根本不會分割MySQL。管理數據庫非常耗時 - 在你真正需要它之前不要分割它。由於您使用的是EC2,因此我只會使用RDS實例(以確保數據的高可用性)。然後,我將使用Elastic Load Balancer將流量分發到n個節點,每個節點包含一個Redis實例,以及處理流量的後端軟件。 Redis中的數據將使用一致的哈希算法進行分片,以限制這些節點潛在故障的影響。

有很多方法可以實現您的要求 - 這只是一個例子。