我的 C# ASP.net MVC 站點允許用戶一次上傳多張照片(使用 dropzone.js)。上傳大約 80 個檔案后,用戶開始收到 503 服務器不可用錯誤。
他們等了幾分鐘,重試了失敗的檔案,然后上傳了其余的檔案(大約 20 個)。
如何防止服務器執行此操作?
當它發生時,該站點的其余部分仍在運行。
蒂亞!
uj5u.com熱心網友回復:
負載下的 503 Server Unavailable 錯誤通常意味著您已超出服務器上的某些資源限制。有兩種方法可以解決這個問題:
- 更改客戶端,使其不會達到此限制(或至少不會很快)。特別是對于 dropzone,我會向它添加限制邏輯,以便當用戶一次洗掉 100 張照片時 - 您的邏輯將分批處理這些(例如一次五張)。
- 更改服務器,因此此限制更高。如果沒有關于您的基礎設施的更多資訊,就很難判斷是什么導致了當前的瓶頸。它可以像擴展主機的 CPU/RAM 一樣簡單。
uj5u.com熱心網友回復:
503 服務器不可用意味著,您的應用程式不可擴展且無法處理更多請求。解決此問題的幾個建議。
- 垂直縮放
- 水平縮放
- 重溫架構
甚至在完成這些要點之前,我建議對您當前的應用程式進行“負載測驗”并創建基準測驗。意味著開始測驗應用程式每分鐘 100 個檔案、200、300 ... 并確定它正在破壞/拋出 503 錯誤的數字。您可以為此使用簡單的 JMeter 型別的工具。
并定義您的目標要求。比如每小時 10K 個檔案或每分鐘 100 個檔案......
垂直擴展: 根據負載測驗的基準測驗結果,您可以開始微調現有機器的 RAM/CPU/IO 容量。例如,如果您使用容器,則可以增加分配的硬體資源。并重復測驗,直到它滿足您的目標要求。
水平擴展 根據負載測驗的基準測驗結果,開始向集群添加更多節點。并重復測驗。
重新審視架構 以上兩個選項討論了在不修改應用程式架構的情況下進行的基礎架構微調。但您的要求是“檔案上傳”,這是 IO 任務,不受 CPU 限制。因此,為了使用最佳資源實作更大的可擴展性,您可以考慮使用“ NodeJS ”或“ C# Reactive X ”(https://github.com/dotnet/reactive)重新構建應用程式。這些是反應式編程,將為您提供非阻塞異步處理功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375673.html
標籤:C# asp.net-mvc-4
上一篇:如何使用linq獲取表中值的計數
