在我的工作中,我需要將一些現有的Enterprise Java應用程序遷移到AWS。我在aws.amazon.com上瀏覽過很多頁面,並且也足夠了。另外,我試圖在stackoverflow處理所有相關的問題。所有這些事情都說得很清楚,但是我仍然有些困惑。這裏是我們的應用程序結構:使用MySQL的Java EE web應用程序的亞馬遜雲配置
- 這是一個基於Spring的應用程序,它使用Spring MVC作爲其表示層,並使用純Java接口和類來處理業務和數據邏輯。
- MySQL用於持久性。
因此,應用程序架構足夠簡單。但是,我們需要部署這個應用程序的許多實例。這個數目目前是15,可以超過30個。還有一點是所有這些實例共享一個共同的數據庫。
現在這裏是我們需要通過移動到AWS來實現:爲應用程序
- 更高的容錯能力。最近,我們面臨專用主機中的服務器/電源故障,導致幾小時的停機時間。
- 在響應時間和吞吐量方面,所有應用程序實例的性能都更高。
- MySQL的容錯性更高。最近由於某些硬件(硬盤驅動器)導致MySQL意外停止,因此應用程序實例在我們的某臺服務器上出現故障。硬盤上的整個文件系統只讀,導致該服務器上託管的應用程序實例發生故障。
- 顯然降低了基礎架構管理的總成本和開銷。
至於我能理解AWS基礎設施到現在,這裏就是我們需要在AWS爲我們設置:
- 4的情況下,各主辦大約10個應用實例,一些EBS的基於Linux的安裝有Tomcat和MySQL的LINUX AMI。
- 我在猜測,我們還需要1個容錯實例來處理這4個實例中的每一個,共計8個實例。
- 所有的服務器實例都有大約160GB的EBS。
- 4個彈性IP地址
- 4彈性負載平衡器
- 其他東西,如快照等
現在,這裏是我的問題:
我真的需要有額外的服務器實例(對於容錯)每個主服務器實例,考慮到EBS由AWS自動備份的面部,並且在硬件故障的情況下它們會向新的EBS提供相同的數據?
如何在上述場景中的所有服務器實例(4x2)之間共享數據庫?我看到的一個選擇是在這些服務器實例之間實現MySQL集羣。比方說,MySQL集羣將包含1個管理節點,3個SQL節點和4個數據節點。但是,在這種情況下,維護集羣對我們來說是額外的開銷,這可能不被接受,因爲我們希望擺脫基礎架構管理。
我是否需要將RDS改爲數據庫並從所有服務器實例(4x2)中刪除MySQL實例?如果是的話,除了EC2實例之外,我是否還需要購買RDS實例(我認爲,如果我需要爲RDS購買單獨的實例,那麼總體基礎架構的成本將增加至少75%),或者RDS實例也爲計算單元用於應用程序開發,從而減少應用程序部署的實例總數?
在RDS實施的情況下,是否真的需要基於EBS的EC2實例?如果我們可以從EC2實例中移除具有RDS實例的EBS要求,我們可以降低總成本。
任何幫助將不勝感激,請讓我知道如果我不清楚指定我的問題,需要更多的澄清任何一點。
我至少需要4臺服務器才能容錯,因爲我們將爲4臺主服務器提供4個不同的IP,因爲他們將託管不同的應用程序實例,然後每臺服務器至少需要一個容錯實例或無故障寬容。而對於RDS,我也在考慮2個帶有多可用區部署的小型實例。 – vikas
沒關係。由於您似乎有4個「外部」IP地址,因此您可以配置4個ELB(彈性負載均衡)實例,其中一個託管每個IP地址,然後通過追加多個EC2計算節點來按需添加容錯根據需要到每個ELB。關於RDS,這種設置看起來不錯,而多可用區絕對是一種可行的方式。如果您的應用程序有太多的數據庫讀取,您還可以另外配置一些只讀副本。 – Viccari