想象一下,你剛剛發布了一篇博文,并分享到了社交網絡。然后,這篇文章恰巧被大V看中再次分享了出去,立即吸引了數百粉絲的目光,引導他們涌入了你的網站??吹竭@么多的訪客量,以及它們的評論,你內心激動不已。突然之間,你的網站就掛掉了,滿屏的數據連接錯誤……
或者假想另一種情境,你一直很努力地創業。突然有一天,一個大V在社交網絡表達了對貴公司的喜愛之情,字里行間滿滿的贊嘆。關注這個大V的粉絲心動了,又涌入了你的網站。不幸的是,點擊連接后卻無法進入你的網站,或者進入后無法注冊用戶,甚至頁面相應超時,無法獲取產品的序列號。盡管你在社交網絡上對此非常誠懇的表達了歉意,但眾多的瀏覽者都不會再有興趣。
這些假想其實非常普遍。在我的工作中,就經常發現,當網站信息在社交網站流傳開來的時候,移動設備的訪問請求就會驟增。這也表明,在社交網絡中,越來越多的人開始使用移動設備,而不是傳統的桌面應用。此外,大多數的移動用戶都在使用公共 Wi-Fi 以及其他低速網絡來訪問網站。所以,快速加載網站的任何優化措施,都會有利于用戶的訪問。
在本文中,我會向你介紹 Varnish 網頁應用加速器(Varnish Web application accelerator)――這是一個免費、簡單的工具,大大改善大規模突發性訪問狀態下的響應能力。
亮點
對于大多數的網站來說,眾多用戶請求訪問的核心內容大都是一致的――尤其是每天都會更新內容的門戶網站。不用多說你也會理解,圖片、CSS 和 JavaScript,這些靜態資源往往有較長的有效期(譯者注:有利于在不同頁面間復用)。但你可能沒有深入思考過,通常在博客平臺或者是內容管理系統中,響應用戶的請求后,所返回的數據內容,大多也是相同的。
來自社交網絡的用戶進入一個博客后,并不會請求完全一致的信息。除了圖片、JavaScript 和 CSS,這些信息還包括 PHP 動態生成的內容,以及從數據庫查詢到的數據。訪問博客中的某一篇博文,所需要發送的每一條請求,不僅僅是在獲取網絡服務器提供的靜態資源,還需要配合 PHP 腳本,使用數據庫連接以及數據庫表單檢索等功能。
數據庫連接的數量越多,Apache 需要處理的進程就會越多,而總的處理能力是由限度的。相應的,訪客的數量越多,服務就會越不穩定,掙到的錢就會越少。
這就是類似 Varnish 的 HTTP 緩存發揮作用的地方。如此一來,從瀏覽器發出的請求,不再直接到達創建和維護網頁的服務器,而是到達 HTTP 緩存服務器。如果緩存服務器中存在所需頁面,那么直接從服務器的內存返回相應的資源,不再動用 Apache 服務器和數據庫。如果所需頁面不再緩存中,那么就像傳統方式一樣,使用 Apache 服務器來處理。Apche 處理完成之后,就會將這個頁面保存到 HTTP 緩存服務器中,等到下一次請求相同頁面時就可以直接返回了。
將頁面保存在內存中,其響應速度遠快于將其保存在硬盤中。此外,當請求的頁面為于 HTTP 緩存服務器中時,就無需動用 PHP 或者數據庫來處理相關操作。這也讓 PHP 和 服務器能夠有更多的性能來處理更繁重的進程和連接。比如,上面提到的被大 V 稱贊的那家初創公司面臨的情境,眾多粉絲點擊的鏈接其實只是網站中的少數幾個頁面――而這些完全可以保存在高速緩存服務器中,當需要時直接從內存響應請求。此時,準備注冊的用戶就會感到整個流程非常順利,因為后臺腳本和數據庫連接的處理能力非常寬裕,完全不受突發性請求的影響。
原理
下面這個示意圖,展示了 Apache 服務器響應請求后生成站點內容的基本流程。在這個例子中,為了請求相同的頁面,一共從瀏覽器發送了五條指令給 Apache,而 Apache 很呆板的對每條請求都做了詳細的處理。
新聞熱點
疑難解答