當一個網站每天有數千個請求時,底層基礎設施必須配備足夠的設備來處理如此龐大的流量。在服務器級別管理繁重網絡流量的優化可以在兩個級別完成:
- 物理服務器
- 網絡應用服務器
處理物理服務器上的大量流量負載有兩種主要方法:
1.線性縮放
投資一臺具有大量處理能力、內存、硬盤空間和冗余的機器。這適用于具有許多靜態網頁的小型網站。例如:一個容量為 500 MHz 的處理器或一個操作系統,它加載了一個 web 服務器,比如 Apache。它通過可靠的連接連接到互聯網,例如 E1(每秒 2 MB)或 E3(每秒 34 MB)。這個物理服務器每天可以處理成千上萬的訪問者。
2.服務器的橫向擴展和負載平衡:
無論服務器有多大,它們都有一個自然的硬限制。同樣適用于服務器上運行的軟件(例如:Apache)。虛擬專用服務器或專用服務器托管計劃最適合擁有大量日常用戶的網站。負載平衡是指在稱為服務器池的一組后端服務器之間有效分配傳入網絡流量。創建更多服務器并平衡服務器之間的負載是管理峰值負載的最佳解決方案。
負載均衡器會立即執行以下功能:
- 跨多個服務器資源分配客戶端請求或網絡負載。
- 通過僅向在線服務器發送請求來確保高可用性和可靠性。
- 提供根據需求增加或減少服務器的靈活性。
讓我們更詳細地了解如何處理 Web 服務器的高負載。
1.處理對網絡域的請求
- 域名服務器 (DNS) 可以減輕負載。(DNS,一種將域名轉換為 IP 地址的互聯網服務)。服務器每次收到請求時,DNS 都會以循環方式輪換可用的 IP 地址以分配和分擔負載。每個服務器都可以訪問同一網站的頁面。
- 負載可以通過開關分配。對網站的請求是向機器發出的。然后將其傳遞到可用服務器之一。使用這種方法的主要優點是冗余。即使其中一臺服務器出現故障,其他機器仍將繼續工作,并且網站始終可以訪問。這里的另一個優點是容量可以以增量方式增加。
2.自動縮放
自動縮放是云計算中的一個過程,可確保有正確數量的實例可用于處理當前應用程序的負載。它會在高流量期間自動增加實例數以保持服務器性能,并在流量消退時再次減少實例數。此功能可確保網站的可用性,并允許根據網絡流量自動上升和下降。這最適合每小時、每天或每周使用變化的網站。
3.優化數據庫服務器設置
每天都有用戶發表新評論,網站所有者添加新頁面,修改或刪除舊頁面以及添加或刪除列出的產品。此類活動會在數據庫表中創建“漏洞”。這些是數據條目被刪除但從未填充的空白。這種間隙會造成碎片并導致更長的提取時間。如果數據庫有超過 5% 的空間作為“漏洞”,則必須對其進行修復。多表連接、慢查詢和其他低效調用通常會對應用服務器性能產生重大影響,需要定期優化。
一些經常修改的數據庫設置是:
max_connections – 此設置通常用于防止單個用戶在多用戶服務器環境中控制整個服務器。在負載較重的共享服務器中,該值最小可以設置為 10,在專用服務器中,可以設置為 250。
innodb_buffer_pool_size – 查詢結果通常存儲在稱為“緩沖池”的內存區域中,以便使用 InnoDB 在 MySQL 數據庫中進行快速訪問。該值設置在 MySQL 可用 RAM 的 50-70% 之間。
key_buffer_size – 它決定了 MyISAM 表的緩存大小。這大約設置為 MySQL 可用內存的 20%。
query_cache_size – 此選項僅對單個網站服務器啟用,其值設置為 10 MB 或更少,具體取決于當前查詢的速度。
4.監控性能并微調 Web 服務器
跟蹤 KPI(包括通過服務臺、客戶服務等獲得的軼事/定性客戶反饋)以確保網站的最佳性能。對于高流量網站,最好定期審核 Web 服務器。下面提到了一些設置:
超時:此設置確定 Web 服務器將等待用戶發送請求的時間。該值是根據服務器流量設置的。在繁忙的服務器中,它設置為 120 秒。通常,始終建議將此值保持在盡可能低的水平,以避免資源浪費。
KeepAlive:如果KeepAlive設置為 ON,則 Web 服務器使用單個連接傳輸所有文件以加載頁面。這可以防止需要為加載每個文件建立新的連接。這在繁忙的交通日節省了大量時間。
MaxKeepAliveRequests –此設置確定可以通過 KeepAlive 連接傳輸的文件數量。除資源限制等情況外,將此設置為“無限”。
MaxClients – 它指示在 Web 服務器中,可以同時為多少訪問者提供服務。過高的值會造成資源浪費,過低的值會導致訪客流失。根據訪問者群將其設置為理想值。
MinSpareServers 和 MaxSpareServers – 應用程序服務器保留一些“工作人員”處于待命狀態,以處理突然激增的請求。如果您的站點容易出現訪問高峰,請將這些變量配置為適當的限制。
HostnameLookups – 應用程序服務器可能會嘗試找出連接到它的每個 IP 的主機名,這可能會導致資源浪費。為防止出現這種情況,請將 HostnameLookups 設置為“0”。
5. 開啟 HTTP/2
HTTP/2 是最新版本,包含很多性能改進。它通過以下方式改進服務器響應時間:
- 使用單個連接而不是耗時的并行連接來傳輸文件。
- 首先傳輸關鍵文件以完成頁面。
- 使用壓縮更快地傳輸標頭。
- 使用二進制數據代替龐大的文本數據傳輸。
- 在瀏覽器請求頁面之前推送加載頁面所需的所有文件。它在使用多個 CSS、JS 和圖像(基本上都是現代網站)的網站中節省了寶貴的時間。
HTTP/2 需要使用 SSL,這使網站在默認情況下是安全的。
6.Web 服務器緩存
NGINX 等工具為網站提供了擴展高流量趨勢的能力。為了處理動態和靜態 Web 服務器請求,NGINX 與主服務器一起配置,NGINX 充當反向代理。憑借其獨特的處理能力,該工具可以用有限的資源處理大量連接。作為單線程服務器,即使在高流量的時候,內存和 CPU 的使用也保持相對穩定。在使用 NGINX 作為反向代理的服務器上使用 Engintron(cPanel 插件),進一步提高了高峰流量時的服務器性能。
NGINX 充當用于 Web 服務、反向代理、緩存、負載平衡和媒體流的開源軟件。它還可以用作電子郵件(IMAP、POP3)的代理服務器,以及用作 HTTP、TCP 和 UDP 服務器的反向代理、負載平衡器。在使用緩存時,網站速度和內容新鮮度之間總是需要權衡,需要在這兩者之間建立完美的平衡。
7.更強大的數據庫服務器/網絡服務器
某些應用程序需要為其數據庫服務器提供更多容量。在這種情況下,在 CPU 和 RAM 方面分配更多資源將有助于網站在流量大幅增加的情況下更順暢地運行。一些數據庫服務器需要自己的裸機(裸機是指服務器擁有自己的硬件,專為單個客戶端構建和使用)與輕量級虛擬 Web 服務器結合使用。示例包括 MS SQL Server。同樣,高流量網站也通過向 Web 服務器添加計算和內存資源來獲得更高的速度和更高的性能。
8.對靜態對象使用 CDN
網站上的視頻或圖像通常被定義為靜態對象。使用 CDN 為靜態對象提供服務將減少主 Web 服務器的壓力,這也有助于提高性能。在高流量網站的情況下,CDN 跨多個服務器緩存靜態文件,并從離每個訪問者最近的位置傳送它們,以盡可能消除時間延遲。CDN 通常與標準托管平臺結合使用,是實現性能最大化的關鍵解決方案之一。
9.數據庫緩存
網站性能不佳的主要原因之一是與數據庫性能相關的問題。電子商務網站就是此類問題的典型例子。許多內容在整個網站上保持靜態或統一,不需要每次都被請求。緩存此類內容可消除瀏覽器和Web 服務器之間的大量請求。
Memcache 和 Redis 等緩存工具提供了顯著的性能提升,可以幫助高流量網站在高負載下運行。這些工具通過在 RAM 中緩存數據和對象來加速數據庫驅動的網站,以最大限度地減少需要讀取外部數據源的出現次數。
下面列出了通過控制 Web 服務器上的負載來處理大量流量的網站服務器的更多優化技術:
1.足夠帶寬的可用性和資源密集型服務的禁用。
必須確保高流量網站有足夠的帶寬。借助 LINX、LoNAP 和 INEX 等工具,可以輕松診斷流量瓶頸。監控服務器上所有啟用的服務并禁用那些未使用的設置。這個未使用的服務消耗了大量的 CPU 和內存。對于資源繁重的服務,夜間最適合在流量最小的情況下執行備份。將硬盤升級到 SSD 存儲(至少對于數據庫分區)可以將加載時間減少大約 10%。
2.讓內容更貼近觀眾
數據離用戶越近,用戶使用網站的速度就越快。用戶使用網站的速度越快,該網站可以為更多的用戶提供服務。在快速增長的網站中,將網站拆分成多個節點可以帶來性能和容量的快速提升。高流量網站從主要互聯網市場的多個交付網站得到顯著改善。
3.網絡基礎應該完好無損
網絡基礎知識應始終保持不變,以確保在快速增長的網站的情況下性能流暢。如果將開關設置為 100 MB 而不是 1 GB,或者防火墻設置不必要地檢查導致關鍵性能問題的流量,則設計良好的網站仍然會失敗。完整地保留網絡基礎在服務高性能網站方面起著至關重要的作用。
4.分片
分片是跨多臺機器存儲數據記錄以滿足數據增長需求的方法??缍鄠€節點/集群進行分片可提高網站的性能。例如:MongoDB。
5.簡化網站設計
具有大量腳本或媒體的網頁更可能加載緩慢。因此,對于需要圖像、腳本、視頻和動態內容的網站,需要采取額外措施來確保良好的性能。
- 縮小腳本以刪除不必要的字符。
- 使用圖像優化器上傳媒體文件。
- 指定要顯示的圖像尺寸 (srcset)。
- 將所有 CSS 合并到一個文件中。
- 需要使用延遲加載選項來按需加載圖像,而不是一次加載。
- 最小化或使用輕量級插件或 CMS 平臺。
- 盡可能避免使用重定向。
- 檢測并修復損壞或失效的鏈接。