擴充 10MPage.com:託管不斷增長的網路檔案的務實方法
10MPage.com 的目標是透過允許使用者向海量線上檔案貢獻 64x64 像素影像來捕捉 2025 年網路的狀態。 作為一名獨立開發人員,我在早期階段優先考慮成本效益,並託管在預算友好的 VPS 上。 然而,可擴展的架構對於未來的成長至關重要。 本文詳細介紹了我的分階段擴展計劃,重點是簡單性和最少的停機時間。
應用架構:
該應用程式使用 Laravel 和 PHP 構建,嚴重依賴後台進程(由 Laravel Horizon 和 Supervisor 管理)進行映像處理、網格放置和電子郵件發送。 Redis 處理快取和作業,而 MySQL 儲存資料。 Nginx 和 PHP-FPM 服務 Web 請求。 初始單一伺服器設定如下:
擴充策略:
我的擴充計畫涉及逐步過渡到多伺服器架構,最大限度地減少每個步驟的停機時間:
第 1 階段:隔離 Redis(零停機)
第一步是將 Redis 移到單獨的伺服器。 應用程式可以暫時使用本機檔案系統緩存,並且作業佇列可以短暫暫停。 這涉及設定新伺服器、配置網路存取和重定向 Redis 連線。 遷移完成後,原伺服器上的Redis將關閉並卸載。
第 2 階段:實作負載平衡器(零停機時間)
接下來,我將介紹 HAProxy 作為負載平衡器,利用其主動健康檢查等進階功能。 該伺服器還將處理 SSL 終止。 DNS 將更新為指向負載平衡器,將流量指派到現有的 Web 伺服器。
第 3 階段:分送工作伺服器(零停機時間)
Laravel Horizon 的設計允許無縫添加工作伺服器。 將設定新伺服器,部署應用程序,並且工作人員開始使用 Supervisor。 然後可以關閉原來的worker。 擴展工作人員只需複製此過程。
第 4 階段:部署多個 Web 伺服器(零停機時間)
與工作伺服器類似,新增了額外的 Web 伺服器,配置了 Nginx 和 PHP-FPM,並向負載平衡器註冊。 複製簡單,確保高可用性。
第 5 階段:專用資料庫伺服器(最短停機時間)
最後,原始伺服器成為專用資料庫伺服器。 所有不必要的軟體都被刪除。 雖然目前單一強大的資料庫伺服器就足夠了,但將來擴展此元件可能需要叢集和短暫的停機時間。
部署自動化:
我的基於 Git 的部署流程將適應處理多個伺服器,僅在需要時使用腳本來部署和重新啟動服務(例如,在重新啟動之前檢查 Horizon 狀態)。
解決單點故障:
目前架構存在單點故障(負載平衡器、資料庫、Redis)。 未來的改進將包括負載平衡器的冗餘。 資料庫和 Redis 擴充將在以後的文章中討論。
容器與群集:
雖然我很欣賞容器和集群,但我相信它們對於這個項目當前的規模來說是多餘的。 所選的方法優先考慮快速初始設定並避免不必要的複雜性。 機器快照和克隆足以在早期階段進行擴展。
結論:
這項務實的擴展計畫優先考慮簡單性和成本效益,同時確保 10MPage.com 能夠應對未來的成長。 分階段方法可最大程度地減少停機時間並在整個擴展過程中保持功能。 透過專注於清晰的漸進策略,我可以致力於建立專案本身,一次為這個雄心勃勃的網路檔案添加一個圖塊。 今天就貢獻自己的圖塊吧!
以上是我計劃如何擴展我的 Laravel (PHP) 應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!