使用多個伺服器為網站提供服務有哪些速度缺點?

使用多個伺服器為網站提供服務有哪些速度缺點?

我知道這些問題很難回答:)但我想了解將服務分離到不同伺服器上的影響。

具體來說,我正在建立一個網站,該網站將有一個媒體伺服器(apache 提供靜態檔案)、一個應用程式伺服器(apache 處理 php 檔案)、一個主資料庫伺服器和一個從資料庫伺服器。

我打算在媒體和應用程式伺服器上作為共享池運行 memcached,但想知道這樣做是否昂貴(在時間和資源方面)?顯然,每次(從應用程式伺服器)請求 memcached 呼叫時,它都必須與媒體伺服器建立 tcp 連接,找出結果在哪裡,然後返回它們。

對於像這樣的小型網站設置,增加應用程式伺服器上的記憶體而不是跨伺服器共享記憶體快取會更好嗎?或者差異很小,不值得擔心?

儘管我使用 memcached 作為範例,但我希望答案保持相當通用,因為相同的場景可以應用於其他服務(例如資料庫)。

答案1

如果是一個小網站,我確實認為這種程度的優化有點矯枉過正。

但有一種方法可以確定:測試一下

我們已經用過世界電腦技術協會過去回答這樣的問題。這是一個很好的工具,可以用來查看網站在各種負載下的表現。傑米特是另一個很棒的工具來完成類似的事情。

例如,使用 WCAT,我們最終決定使用一個單獨的 Hyper-V 伺服器來託管與 Web 應用程式虛擬機器(在本例中為 Fogbugz)分開的資料庫虛擬機器。測試表明,即使並髮用戶數量較少,將資料庫虛擬機與應用程式虛擬機放在同一台電腦上也會導致應用程式無法使用(CPU 是瓶頸)。

答案2

需要回答幾個問題才能更好地回答您的問題。

  • 它是一個單一的網站嗎?
  • 是否使用密集資源(大量伺服器端程式設計、串流影片等)?
  • 您只使用影片、資料庫和 php/.net 嗎?
  • 伺服器的規格如何?
  • 硬碟機的速度是多少?
  • 有多少個處理器?
  • 多少內存?
  • 您正在執行 100mb 或 1000gb 網路卡和交換器嗎?
  • 你的上游速度是多少?
  • 您的作業系統是否經過精簡優化?

答案3

沒有足夠的資訊給出可能正確的答案,並且實際運行一些測試/基準測試將是確保您獲得正確答案的唯一方法。

根據您的描述,我的最佳猜測是,池化會增加單一請求的延遲,但會增加您在陷入困境之前可以處理的總負載。

但是,當我說我懷疑它可能會增加單一請求的延遲時,我的意思是延遲時間從幾分之一毫秒到幾十毫秒之間,具體取決於您的網路設定。如果您的網站足夠繁忙,那麼使用兩倍的快取進行更少的資料庫呼叫所帶來的速度優勢將大大抵消這一點。如果媒體伺服器和應用程式伺服器的硬體大致相同,那麼您的應用程式伺服器很可能會獲得大量CPU 使用率,而媒體伺服器的CPU 將相當空閒,這意味著您實際上可能會在僅使用memcached 的情況下獲得最佳性能媒體伺服器而不是應用程式伺服器。

確保優化的唯一方法是測試。測試、基準測試、設定檔等。使用真實的使用者組合運行端對端測試(換句話說,模擬Web 用戶端對真實Web 用戶端發出的所有檔案請求)(這樣您就可以獲得快取命中和未命中的正確組合),兩者都適合中等程度的測試負載和“我們剛剛得到了斜線”負載。自動化您的測試,使其易於重複。在兩台/所有伺服器上使用 memcached 進行測試,僅在一台伺服器上,僅在另一台伺服器上,一台伺服器上的 RAM 比另一台伺服器上的 RAM 更多,等等...

相關內容