簡體   English   中英

ECS Fargate 在查詢 Postgres RDS 時性能極差

[英]ECS Fargate with extreme poor performance when querying to Postgres RDS

我正在將我的 Django + Gunicorn + Nginx Web 應用程序從 Heroku 遷移到 AWS,現在性能要慢得多。

在 Heroku 中,我有一個包含許多不同應用程序的微服務結構,所有這些應用程序都可以通過互聯網(公共)訪問。 所有應用程序都連接到 AWS RDS 中托管的數據庫實例(數據庫和應用程序之間的通信也是通過互聯網進行的。

為了使我的結構更加安全,我開始使用私有子網中的 ECS Fargate 將所有內容遷移到 AWS,並將 RDS 實例移動到私有子網。 微服務分為不同的集群和服務,它們之間的通信是通過服務發現設置的。 我將 AWS API 網關 + 內部網絡負載均衡器 (NLB) 配置為能夠從我自己的計算機訪問某些端點。 在一切正常之前,我能夠從另一個服務訪問一個服務,還進行了一些測試,從我自己的應用程序觸發端點,並使用 ubuntu 的 traceroute 命令測試了網絡路由。 一切都快速而敏銳。

然后,我開始測試更多端點,這些端點從 RDS 中的 Postgres 數據庫獲取大量數據。 我原以為它們會比 Heroku 中的結構快得多,因為現在我在同一個網絡(VPC 和子網)中擁有所有東西。 但事實是,在具有相同硬件資源( 0.5 個 vCPU 和 1GB 內存)的相同端點中完成 GET 請求需要多 5 倍的時間。

  • Heroku 的請求需要 4 秒才能完成
  • Fargate 對同一端點的請求需要 20 秒才能完成

查看文檔,我發現在 Fargate 中升級資源時,網絡性能也會提高。 牢記這一點,我將任務定義升級為4vCPU 和 8GB ram

這樣一來,我的網絡性能確實得到了提高,現在完成請求需要 10 秒(之前的資源需要 20 秒),但與 Heroku 相比仍然很慢。

結論:

  • Heroku 每個請求需要 4 秒,通過互聯網和“弱”機器(0.25 vCPU 和 512mb RAM)進行通信

  • AWS Fargate 每個請求需要 20 秒,在同一網絡中進行內部通信,並且使用比 Heroku(0.5 vCPU 和 1gb ram)更多的資源。 升級到 4vCPU 和 8gb ram 時,仍然需要 10 秒(比 Heroku 多 2.5)

有什么我可能在這里遺漏的嗎? 與 Heroku 相比,Fargate 的性能是否差? 這種緩慢的原因可能是什么?

該應用程序與 Nginx 的配置錯誤。 我刪除了 Nginx,一切都按預期開始工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM