Amazon-Ec2

PHP/MySQL網站多區域快速載入解決方案

  • September 13, 2014

我在美國東部(弗吉尼亞)區域的單個 Amazon EC2 實例上託管基於 ExpressionEngine 的網站。我使用 Ubuntu。

該網站允許會員發布他們的內容,並將其顯示給其他會員和未登錄的使用者。

**目標:**我需要開始在全球範圍內為同一個網站提供服務,以同樣快的速度連接到香港、紐約和洛杉磯。

我考慮了兩種解決方案:

1.為三個區域設置三個單獨的 EC2 實例:弗吉尼亞、俄勒岡和新加坡。使用 Amazon Rot53 Geo Location 根據瀏覽器的 IP 地址將流量定向到實例。

優點:該地區的網站將快速載入。

相反:這些基本上是三個獨立的網站。除非我弄錯了?

  1. 在與所有三個位置同樣遙遠的區域中設置一個實例:(愛爾蘭),並將伺服器提升到可用的最高性能。

優點:所有地區都將是同一個網站。

相反:讓它足夠快將花費很多。

我的挑戰:

a) 我不知道如何在多個 Ubuntu 實例之間實時同步伺服器設置、數據庫和內容。如果有知識的人可以向我解釋如何做到這一點,我將不勝感激。

b) 我並不完全熟悉所有 Amazon AWS 資源。AWS 是否有一個內置方法可以讓我實現我的目標,即在所有三個選定的位置以同樣快的速度在全球範圍內為一個基於 PHP/MySQL 的會員網站提供服務?

給貓剝皮的方法有很多,但基本上您確實需要以一種或另一種方式在多個地理位置複製您的站點。

假設您的應用程序閱讀量很大(大多數網站都是這樣),這裡有幾個可能適合的選項。我不熟悉表達式引擎,所以我不確定在你的情況下實現這些架構有多困難。

選項 1:跨區域只讀副本

  • 每個區域都有一個 EC2 應用伺服器
  • 每個區域都有一個只讀副本數據庫
  • 僅寫入您的主區域數據庫
  • 如果您必須處理文件上傳,最好將它們儲存在 S3 中,並讓 CloudFront 將它們記憶體在各個區域

選項 2:記憶體代理

如果您的內容幾乎是完全靜態的,您可以在每個區域中都有一個記憶體代理。如果您不需要高級記憶體規則, CloudFront是一個非常簡單的解決方案,否則您可以擁有帶有 varnish 的 EC2 實例。

選項 3:數據庫記憶體

數據庫是您的場景中最難分發的元素,因此您可以將其保留在單個區域中(並讓其他區域連接到您的主區域中的數據庫),然後在您的應用程序中使用數據記憶體以最大限度地減少延遲。如果您的應用程序支持 memcache,那麼 ElastiCache 可能是一種選擇。

引用自:https://serverfault.com/questions/628230