無經驗學習網站擴展極難。假設你有高流量網站,需好的擴展方案,但世上無「萬靈丹」。必須自己動手,持續思考找到滿足需求的方案。作者親歷某專案:網站一月達百萬用戶,老闆要求重構應對增長。後端:PHP + Smarty + MySQL。託管商推薦配置:負載均衡器、2 Web 伺服器、MySQL 主備、開發機。實際交付:單核 1GB LB、雙核 4GB Web×2、四核 8GB MySQL、單核 1GB 開發機。基礎配置無優化,用 DRBD 雙主同步檔案。
現象: 上線初期正常,隨流量增長伺服器凍結離線。
根因: DRBD 雙主無法承受高併發小檔案 I/O。
破解: 重寫 CMS 程式碼,將 Smarty 快取移至本地檔案系統。再次上線成功。
現象: 下午尖峰響應變慢、超時、空白頁。
破解: 託管商建議 Apache+mod_php → Lighttpd+FastCGI+Xcache。重新配置後壓力大幅下降,響應優異。
現象: MySQL 成瓶頸,佇列大量連線再次「殺死」 Web 伺服器。
嘗試: 每 Web 伺服器掛 MySQL 從庫做主從同步。
根因: CMS 不支援讀寫分離 SQL。
徹底解決: 重寫 CMS 支援獨立讀/寫查詢(耗時但值得,相對於頻繁掛起)。
破解: 持續優化程式碼、減少頁面 SQL 查詢、引入 Memcached。部署後每秒查詢降低 50%+,決定擴展 Memcached 而非增購 Web 伺服器。
成果: Memcached 降低 70-80% MySQL 負載,Web 效能巨幅提升,頁面秒開。配置看似完美。
現象: 藍色 Web 伺服器響應緩慢、錯誤、空白頁,系統負載正常但「大多數情況下」工作。
根因: Smarty 快取檔案全存在同一目錄,inode 耗盡。
破解: Smarty 移至專用 ReiserFS 分區 + 開啟 use_subdirs 選項。
擴展網站是永無止境的過程。 解決一個瓶頸,下一個隨即出現。永遠別想「大功告成」躺平——那會殺死伺服器甚至業務。規劃與學習持續進行。若缺乏經驗/資源,尋找可靠合作夥伴共同攻關。持續與團隊/夥伴溝通當前與即將遇到的問題。思考在前,才能爭取主動。