技術和互聯網已成為我們日常、學術和職業生活的核心。這就是為什么同時存在的網站和應用程序的絕對數量不足為奇的原因。如果您是一家企業,您會希望擁有一個相關的網絡平臺。應用程序使您能夠輕松地向目標客戶推銷和交付您的服務。無論您創建Web 應用程序的原因是什么,您都需要確定如何構建它。在選擇最佳服務器設置時,您可以使用多種選擇。您選擇的服務器架構將決定您如何運行和管理環境中的所有內容。這就是為什么必須在仔細考慮后做出決定的原因。
如何選擇正確的服務器設置
那么您如何確定哪種架構“適合”您的應用程序?為此,您需要首先考慮您的 Web 應用程序的要求是什么。您必須加入某些功能才能使其在您的特定用例中有效工作。例如,也許您正在努力開發易于擴展的應用程序。或者,您可能需要您的應用程序在瀏覽器和移動設備上流暢運行。同時,您的預算也可能是您最關心的問題。
無論您的要求是什么,您都應該知道您可以為您的應用程序創建自定義解決方案。在本教程中,我們將探索許多人通常用于其 Web 應用程序的各種類型的服務器。我們將討論各種用例以及何時最好使用某種設置。為了幫助您確定它是否適合您,我們還將為您提供每種服務器架構的一些優缺點。
1. 一切都在一臺服務器上
顧名思義,您將整個環境加載到一個單一的服務器上。環境將包括您的 Web 服務器、應用程序服務器以及數據庫服務器。例如,它適用于Linux、Apache、MySQL和PHP (LAMP) 堆棧配置。您可以按照我們的教程了解如何在 Ubuntu 服務器上安裝 LAMP 堆棧以及如何在 CentOS 上安裝 LAMP 堆棧。
何時使用:如果您的時間不多,這種類型的安排效果最好。設置簡單快捷。這就是為什么它適用于簡單的 Web 應用程序。
好處:簡單易懂,易于實現。只需很少的時間即可完成整個設置。
缺點:不允許水平可擴展性。在組件隔離方面提供的很少。應用程序和數據庫本質上在爭奪相同的資源,因為它們位于單個服務器上。因此,您可能會遇到性能不佳的情況。
2. 單獨的數據庫服務器
使用單個服務器的主要問題是對有限資源的競爭。此設置旨在解決該問題。在這里,數據庫管理系統或 DBMS與應用程序服務器保持分離。數據庫服務器在私有網絡中,擁有自己的資源。這會帶來更好的性能和更高的安全性。
何時使用:同樣,如果您想部署快速設置,配置起來非常簡單。如果您擔心數據庫和應用程序爭奪相同資源,這是理想的解決方案。
好處:應用程序和數據庫的單獨、專用系統資源,包括 CPU、內存、I/O 等。在應用程序和數據庫層中的任何一個層都具有更大的可擴展性潛力。您可以根據需要添加和刪除資源。如果您從公共互聯網上刪除數據庫,您也可以提高安全性。
缺點:比單個服務器設置復雜一點。兩臺服務器之間的低帶寬或高延遲網絡連接會產生性能問題。
3.反向代理或負載均衡器
這就是負載平衡器出現的地方。負載平衡器通常用于服務器環境以提高性能和可靠性。他們通過“平衡負載”來做到這一點;即跨服務器陣列分配工作負載。
何時使用:當您需要執行水平擴展時,負載平衡器非常有用。水平擴展基本上意味著向環境添加更多服務器。您還可以使用應用程序層反向代理,使用一個域和端口同時為多個應用程序提供服務。HAProxy、Nginx和Varnish是允許反向代理負載平衡的軟件示例。
好處:如果線路中的一臺服務器出現故障,其他服務器會通過平衡工作負載來補償其功能。允許您執行水平擴展以增加或減少環境的容量。它還限制客戶端連接,以防止 DDOS 攻擊。
缺點:如果系統資源不足,負載均衡器可能會限制應用程序的性能。需要適當的配置以確保適當的性能。比單個服務器或單獨的服務器設置復雜得多。您需要考慮 SSL 終止和需要粘性會話的應用程序等因素。使用負載平衡器的主要問題是它是單點故障。這意味著如果負載均衡器無法正常工作,您的整個服務就會宕機。
4. HTTP 加速器或緩存反向代理
這是一種設置,可用于提高向應用程序用戶交付內容的速度。它采用各種技術來減少這個時間。最重要的一個是緩存來自應用服務器的響應。當用戶第一次請求內容時,加速器將內容保存在其內存中。因此,當任何類似的未來請求進來時,它無需與應用程序服務器交互即可快速提供內容。Nginx、Varnish 和Squid都能夠進行HTTP 加速。
何時使用:可以理解,這種設置最適合用戶頻繁請求的文件和內容。它也適用于內容豐富的動態 Web 應用程序。
好處:緩存和壓縮顯著提高了應用程序和請求處理的速度。減少 CPU 上的負載還可以提高站點性能。您還可以將其用作反向代理負載平衡器。
缺點:您必須對其進行很好的調整才能發揮其最佳性能。如果緩存命中率較低,您可能會遇到性能不佳的情況。
5. 主副本數據庫復制
主副本數據庫復制設置通常對于執行讀取多于寫入的系統非常有用。例如,內容管理系統可以真正利用這樣的架構。您需要一個主節點和一個或多個復制節點進行復制。它將讀取分布在所有節點上。更新僅發送到主節點。
何時使用:就像我們提到的,基于復制的數據庫設置有助于提高系統的讀取性能。您可以將它用于 CMS 等應用程序。
好處:它提高了數據庫的讀取性能,因為它將數據庫分布在副本中。如果只使用主節點進行更新,還可以提高寫入性能。
缺點:任何嘗試訪問數據庫的應用程序都必須能夠決定向哪個節點發送更新和讀取請求。如果主副本失敗,更新將停止。您必須解決該問題才能繼續進行更新。沒有故障轉移機制來適應潛在的主節點故障。
組合使用服務器設置
幸運的是,您也可以結合各種技術來獲得所需的結果。這意味著您可以在單個環境中對應用程序服務器和緩存服務器進行負載平衡并復制數據庫。這樣做可以讓您充分利用兩臺服務器的功能。但是,它不會使設置變得更加復雜或麻煩。
例子:我們將嘗試通過一個例子來理解這樣的環境:在這樣的環境中,負載均衡器會向緩存服務器發送靜態請求。靜態內容包括 CSS、圖像和 Javascript 等。它會將任何其他類型的內容請求定向到應用程序服務器。
假設用戶從環境中請求一些靜態內容。下面是會發生的事情:
負載均衡器將首先確定內容是緩存命中還是緩存未命中。緩存命中的內容存在于緩存中,而緩存未命中的內容不存在。它通過檢查緩存后端來實現。如果緩存命中,負載均衡器會將內容發送給用戶。如果是緩存未命中,緩存服務器會將請求轉發到應用程序的后端。應用后端將從數據庫中查找并發送內容。緩存后端從負載均衡器接收內容。它還會緩存此內容,然后再將其返回到負載平衡器。后者然后將響應轉發給用戶。
另一方面,如果用戶請求動態內容,將會發生以下情況:
請求將從用戶傳入負載均衡器。此請求到達應用程序后端。應用后端定位請求的內容并將其返回給負載均衡器。用戶接收內容。這種組合環境的主要好處之一是它更可靠。不僅如此,它還具有超強的性能。但是,仍然存在兩個單點故障——負載平衡器和主數據庫服務器。
結論
您可以在您的環境中單獨使用每個服務器設置。另一方面,您也可以將它們組合在一起以創建個性化的解決方案。沒有“正確”的答案。這一切都取決于您希望從架構中提取的功能。掌握有關每個服務器設置如何工作的基礎知識將有助于您為自己的應用程序做出決定。最好的辦法是從小而簡單的開始。隨著經驗的積累,您可以不斷增加設置的復雜性。