5

在我的工作中,我需要將一些現有的Enterprise Java應用程序遷移到AWS。我在aws.amazon.com上瀏覽過很多頁面,並且也足夠了。另外,我試圖在stackoverflow處理所有相關的問題。所有這些事情都說得很清楚,但是我仍然有些困惑。這裏是我們的應用程序結構:使用MySQL的Java EE web應用程序的亞馬遜雲配置

  1. 這是一個基於Spring的應用程序,它使用Spring MVC作爲其表示層,並使用純Java接口和類來處理業務和數據邏輯。
  2. MySQL用於持久性。

因此,應用程序架構足夠簡單。但是,我們需要部署這個應用程序的許多實例。這個數目目前是15,可以超過30個。還有一點是所有這些實例共享一個共同的數據庫。

現在這裏是我們需要通過移動到AWS來實現:爲應用程序

  1. 更高的容錯能力。最近,我們面臨專用主機中的服務器/電源故障,導致幾小時的停機時間。
  2. 在響應時間和吞吐量方面,所有應用程序實例的性能都更高。
  3. MySQL的容錯性更高。最近由於某些硬件(硬盤驅動器)導致MySQL意外停止,因此應用程序實例在我們的某臺服務器上出現故障。硬盤上的整個文件系統只讀,導致該服務器上託管的應用程序實例發生故障。
  4. 顯然降低了基礎架構管理的總成本和開銷。

至於我能理解AWS基礎設施到現在,這裏就是我們需要在AWS爲我們設置:

  1. 4的情況下,各主辦大約10個應用實例,一些EBS的基於Linux的安裝有Tomcat和MySQL的LINUX AMI。
  2. 我在猜測,我們還需要1個容錯實例來處理這4個實例中的每一個,共計8個實例。
  3. 所有的服務器實例都有大約160GB的EBS。
  4. 4個彈性IP地址
  5. 4彈性負載平衡器
  6. 其他東西,如快照等

現在,這裏是我的問題:

  1. 我真的需要有額外的服務器實例(對於容錯)每個主服務器實例,考慮到EBS由AWS自動備份的面部,並且在硬件故障的情況下它們會向新的EBS提供相同的數據?

  2. 如何在上述場景中的所有服務器實例(4x2)之間共享數據庫?我看到的一個選擇是在這些服務器實例之間實現MySQL集羣。比方說,MySQL集羣將包含1個管理節點,3個SQL節點和4個數據節點。但是,在這種情況下,維護集羣對我們來說是額外的開銷,這可能不被接受,因爲我們希望擺脫基礎架構管理。

  3. 我是否需要將RDS改爲數據庫並從所有服務器實例(4x2)中刪除MySQL實例?如果是的話,除了EC2實例之外,我是否還需要購買RDS實例(我認爲,如果我需要爲RDS購買單獨的實例,那麼總體基礎架構的成本將增加至少75%),或者RDS實例也爲計算單元用於應用程序開發,從而減少應用程序部署的實例總數?

  4. 在RDS實施的情況下,是否真的需要基於EBS的EC2實例?如果我們可以從EC2實例中移除具有RDS實例的E​​BS要求,我們可以降低總成本。

任何幫助將不勝感激,請讓我知道如果我不清楚指定我的問題,需要更多的澄清任何一點。

回答

3

我不是基礎設施專家,但我在AWS上有一些經驗,我希望我能幫助您解決至少一些問題。我的背景不允許我就您的基礎設施規模給出任何建議,但我可以幫助您就基礎設施提供建議。
首先,我肯定會去EBS。除了在物理上與應用服務器分離之外,它還具有高可靠性和高可用性。我可以告訴你它救了我幾次。儘管我說過我不會告訴你任何關於尺寸的事情,但我不認爲你需要額外的4個「容錯」實例,但是爲了以防萬一,也許你可以保留一些2個實例以備流量。

關於您的數據庫,您應該繼續使用RDS for MySQL(http://aws.amazon.com/rds/mysql/)。它們以(恕我直言)小价格爲您提供預先配置的節點,自動修補,自動備份,自動複製和一鍵縮放。所有這些功能都爲MySQL準備就緒,即開即用。您也可以使用指標和監控,它都包含在內。 RDS不會爲您提供計算單位,但將它們分開保存在AWS中是一種很好的做法。您也可以安裝4個EC2 Tomcat節點+ 2個RDS節點。這只是大小的問題:)

如果您已經閱讀過有關Amazon Elastic Load Balancing的文章,它看起來非常適合您的解決方案。您可以將一些EC2節點附加到每個ELB節點,並忘記負載平衡。它只是起作用,如果你願意,你也可以配置粘性會話。但我不知道應該選擇多少個ELB節點,但是要注意一個問題:只能將EC2節點從相同的地理區域(例如美國東海岸)添加到相同的ELB。例如,西海岸的Tomcat和東海岸的另一個Tomcat之間的流量是不可能平衡的。如果您選擇在多個地區分發節點,則需要在亞馬遜外部使用另一個LB解決方案。

我的最後建議是:繼續使用基於ELB + EBS的EC2 + RDS。這將簡化您的監控,部署和維護,成本往往會低得多。您可能更清楚您需要的每種節點的數量,但不要害怕錯過,因爲您可以輕鬆升級或縮減AWS上的基礎架構。

+0

我至少需要4臺服務器才能容錯,因爲我們將爲4臺主服務器提供4個不同的IP,因爲他們將託管不同的應用程序實例,然後每臺服務器至少需要一個容錯實例或無故障寬容。而對於RDS,我也在考慮2個帶有多可用區部署的小型實例。 – vikas

+0

沒關係。由於您似乎有4個「外部」IP地址,因此您可以配置4個ELB(彈性負載均衡)實例,其中一個託管每個IP地址,然後通過追加多個EC2計算節點來按需添加容錯根據需要到每個ELB。關於RDS,這種設置看起來不錯,而多可用區絕對是一種可行的方式。如果您的應用程序有太多的數據庫讀取,您還可以另外配置一些只讀副本。 – Viccari