接着上兩篇繼續寫oss php sdk+laravel搭建靜态網站。 主要說下靜态網站的重要部分圖檔服務,現在很多的網站上都會用到大量的圖檔, 圖檔在網頁傳輸中占據很大的資料量, 圖檔處理也是影響網站性能的重要因素。
這篇文章主要結合oss的圖檔處理功能介紹如何利用oss + laravel搭建一個低成本高性能的靜态伺服器。
靜态網站圖檔伺服器架構可能經曆了如下幾個階段:
網站初期可能我們業務和圖檔服務都在一台伺服器, 圖檔通路也不多, 要通路的圖檔個數也有限, 我們可以把所有要用到的圖檔放到伺服器某個images/目錄下, 然後根據圖檔名來比對就可以滿足需求。
随着網站的發展, 圖檔服務和其他應用通路量和資料量也越來越大, 一個網站一台伺服器早已滿足不了需求,我們需要把圖檔服務拆分成單獨的圖檔處理伺服器甚至圖檔處理叢集。
有了圖檔處理伺服器或着圖檔處理叢集, 我們可以為圖檔服務配置更高端的硬體,并為圖檔服務增加獨立通路域名增加浏覽器加載圖檔速度。這些都突破了IO瓶頸,大大提升了網站性能。
收之桑榆失之東隅,當圖檔服務是一個伺服器叢集時,我們再也不可能擁有原來那麼簡單的圖檔服務架構了。現在我們至少要考慮圖檔服務的負載均衡、資料同步、擴容、容災和資料遷移。
總之, 性能和功能巨大提升的同時,系統複雜度也巨大的增加了。對中小型網站來說,受限于開發運維能力和成本,圖檔服務上雲可能是個很不錯的選擇。
很多中小網站後端使用php寫的,圖檔處理的架構很可能是nginx+php+fastcgi+imagick, 使用imagick做圖檔處理,這種架構對少量的圖檔處理可以work,但大量圖檔下對伺服器的IO、cpu、網絡帶寬都有很大壓力。而使用oss的圖檔服務可以完全把這些壓力剝離出去。
先看一個不使用和使用oss圖檔服務的靜态網站框圖的對比,然後我們再以laravel+oss php sdk做後端,寫一個最簡單的可以work的圖檔處理服務的demo。
藍色的路徑為不使用oss圖檔服務的靜态網站架構,使用者的一個圖檔請求例如簡單的把某張圖檔旋轉90度并加水印後在浏覽器展示,這樣大量的請求會對靜态網站的圖檔伺服器帶來IO和CPU的壓力,同時會對路徑6帶寬帶來壓力。
而使用oss圖檔服務後伺服器隻需要向使用者回複一個靜态頁面,靜态頁面中填入oss圖檔服務的url,然後由浏覽器加載,即可完成上面的效果。是以,改進後的靜态網站完全可以不需要圖檔伺服器或服務叢集,圖檔伺服器完全可以由oss勝任,靜态網站隻需要保留普通業務伺服器。
我們通過一個demo來展示上面的說明,為了簡單起見我們繼續使用上兩篇文章中搭建的oss php sdk+laravel+php-fpm+nginx的環境,不同的是向使用者展示的圖檔不落本地伺服器,對圖檔的旋轉、模糊處理、打水印也全都不經過本地伺服器。
同樣,我們這裡隻說明過程先不考慮代碼的異常分支,嚴謹的代碼可以放到下篇文章中。
步驟如下:
vim routes/web.php, 修改為:
增加resources/views/gitshow.blade.php檔案, 内容為:
這實際上是一個oss相關的url。
前面提到圖檔伺服器要考慮的負載均衡、資料同步、擴容、容災和資料遷移,這些對oss來說都不是問題或者直接有完整的雲上解決方案。