2016-04-28 85 views
1

我們必須在6個AWS地區運行的服務,我們有一些前提條件應滿足:AWS讀副本架構

  • 查詢數據庫必須很低
  • 它支持潛伏期查詢的吞吐量很高
  • 據觀察,數據庫更新過程是IO密集型的,所以它增加了由於數據庫鎖定導致的查詢延遲。
  • 時滯在秒的量級是更新之間可接受的,並且讀

,我們討論了具有一個服務,更新每個區域中的主DB和一個從(6個從站總數)的體系結構。

我們發現有一些問題和一些可能的解決方案:

  1. 沒有使用AWS基礎設施5個讀取副本的限制。

爲了解決這個問題,我們雖然創建了只讀副本的只讀副本。這應該給我們25個實例。

  1. AWS中存在限制,您無法從其他區域創建只讀副本的只讀副本。

爲了解決這個問題,我們儘管在應用程序內部更新了2個主數據庫。

  1. 此方法會產生一個問題,即一段時間內數據庫可能不一致。

在服務實現中,我們總是可以重新創建數據。因此,有一項工作需要重新更新數據(這是更新IO密集型的原因之一)。

任何人都有類似的問題?你如何處理它?我們可以避免自己創建和維護數據庫嗎?

我們正在使用MySQL,但我們非常樂意使用其他兼容的數據庫。

回答

2

不幸的是,當涉及到區域間時,沒有什麼不可思議的解決方案:你失去了延遲。

我想你從RDS的角度探討了你提出的所有解決方案,例如只讀副本(我確認你不能從另一個地區做到這一點,但這也是爲了節省你高複製延遲)。

另一種解決方案是創建在EC2實例數據庫,但你會失去所有的RDS(你可以保護這種流量與室性早搏之間的區域間VPN)的好處。不過要記住,太多的只讀副本會影響你的表演。

我建議你的情況應該是:

  • 在每一個可能的水平大量使用緩存:DB與服務器之間elasticache,清漆用於HTTP頁面,CloudFront的內容傳輸。如果你想要這麼多的只讀副本,這意味着你很大程度上依賴於讀取。通過這種方式,您可以節省大量讀取數據庫的時間,並顯着增加延遲時間,可能有5個只讀副本就足夠了。
  • 考慮分片或使用多個數據庫。 ,這 並不總是一個很好的解決方案但是這取決於你的使用情況...
+1

1用於緩存;我使用redis的彈性緩存,易於使用且性能卓越 –