Amazon-Ec2

AWS 雲架構

  • April 4, 2019

我試圖弄清楚如何在 AWS 上部署我的應用程序。我的 DevOps 經驗非常有限,我不確定我的設計是否良好。

我有兩個應用程序,一個處理文件上傳的 Web 應用程序和一個處理文件的處理應用程序。

我計劃將 AWS beanstalk 用於 Web 應用程序,但對於處理應用程序,我不確定要使用哪種策略。我正在考慮使用隊列 (SQS) 來分派處理作業並將處理應用程序放在 EC2 Auto Scaling 組上。

這些文件很大(幾 GB)並且處理非常受 I/O 限制,因此在進行處理之前會將文件從 s3 複製到處理機器上的本地 SSD。

其他考慮:

  • 兩個應用程序都需要訪問同一個數據庫(我需要某種 VPC 嗎?)
  • 將來我可能會有不同類型的處理,這將需要某種調度到其他實例類型上的其他應用程序(可能是一些記憶體更大的機器)。

問題是:這是一個好的架構嗎?我缺少任何重要的細節嗎?有關如何開始使用 AWS 的任何提示?

所以我能想到的兩種方法在沒有 Jobs 數據庫表的情況下應該適用於你,但如果你需要它仍然允許 DB 訪問。

高度可擴展的無伺服器

將是使用 API 網關並設置一個 Lambda 函式來實際完成繁重的工作,這意味著當您不處理任何事情時,您不會浪費金錢來執行一個沒有做任何事情的系統。

你可以在這裡閱讀它:https ://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-lambda-integration.html

這個允許同時進行多個上傳處理,但如果您有很多頻繁的上傳,可能會變得昂貴

然後,您的 Lambda 可以根據需要處理上傳。

一次持續處理幾個的成本效益

將設置一個 EC2 框,從 SQS 隊列中讀取並一個接一個地處理,然後您設置您的應用程序,一旦它上傳到 S3,它就會推送到 SQS 隊列。

如果您使用此方法開始注意到隊列中有積壓,您可以通過添加更多 EC2 處理實例來擴大規模。

這確實意味著,如果不經常上傳,您可能會執行 EC2 什麼都不做。根據您的 EC2 實例大小,您可以多次執行您的處理應用程序,例如,如果它是 PHP,並且您選擇了 4 核 EC2,您可以在該機器上並行執行 PHP 腳本 4 次。

數據庫問題

第一個選項不需要處理作業數據庫,因為它們是通過 API 網關進入的。但如果您需要通過 NodeJS Lambda 庫連接到 RDS,仍然可以。第二個選項也消除了連接上傳系統的需要,因為它可以使用 SQS 隊列,但如果您需要它,您可以像任何其他應用程序一樣連接到 RDS。

如果您確實希望使用數據庫而不是 SQS 隊列來處理所有這些,或者您有其他使用數據庫的原因,您可以在預設 VPC 中設置 RDS 並使用安全組獲取訪問權限,這是不可擴展的。(IP 地址)

您可以使用第二個選項,只是不使用 SQS 隊列。

如果您需要跨同一區域的多個 AZ 執行 RDS,您可以通過設置多可用區跨所有 3 個可用區設置 RDS,然後同一區域中的任何 EC2 實例都可以訪問它(這為您提供高可用性)。

如果您想添加多區域且沒有對 DB 的公共訪問權限,則必須在要操作的每個區域中創建一組 VPC,並確保它們都相互對等並設置路由表在創建 RDS 之前允許通過對等通信進行通信,因為它需要在新 VPC 中創建。

筆記

如果您想要多區域多可用區以實現超高可用性,我強烈建議您在創建 RDS 之前使用在 EC2 中執行 Amazon 自定義 Linux 發行版的 T2.nano 實例來通過對等互連測試跨區域的 ping,它的設置可能會非常複雜所有對等互連並確保它們正常工作,讓 2 個區域的程序正確,然後一個接一個地添加其他區域,確保所有其他區域都可以 ping 新區域。

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