web服務器-------動靜分離

一、靜態頁面

靜態頁面,是指互聯網架構中,幾乎不變的頁面(或者變化頻率很低),例如:

首頁等html頁面

js/css等樣式文件

jpg/apk等資源文件

二、動態頁面

動態頁面,是指互聯網架構中,不同用戶不同場景訪問,都不一樣的頁面,例如:

百度搜索結果頁

淘寶商品列表頁

速運個人訂單中心頁

這些頁面,不同用戶,不同場景訪問,大都會動態生成不同的頁面。


動態頁面,有與之匹配的技術架構,例如:

分層架構

服務化架構

數據庫,緩存架構

三、互聯網動靜分離架構

動靜分離是指,靜態頁面與動態頁面分開不同系統訪問的架構設計方法。


一般來說:

靜態頁面訪問路徑短,訪問速度快,幾毫秒

動態頁面訪問路徑長,訪問速度相對較慢(數據庫的訪問,網絡傳輸,業務邏輯計算),幾十毫秒甚至幾百毫秒,對架構擴展性的要求更高

靜態頁面與動態頁面以不同域名區分

四、頁面靜態化

既然靜態頁面訪問快,動態頁面生成慢,有沒有可能,將原本需要動態生成的站點提前生成好,使用靜態頁面加速技術來訪問呢?

這就是互聯網架構中的“頁面靜態化”優化技術。

舉例,58同城的帖子詳情頁,原本是需要動態生成的:


瀏覽器發起http請求,訪問/detail/12348888x.shtml詳情頁

web-server層從RESTful接口中,解析出帖子id是12348888

service層通過DAO層拼裝SQL語句,訪問數據庫

最終獲取數據,拼裝html返回瀏覽器

而“頁面靜態化”是指,將帖子ID爲12348888的帖子12348888x.shtml提前生成好,由靜態頁面相關加速技術來加速:


這樣的話,將極大提升訪問速度,減少訪問時間,提高用戶體驗。

五、頁面靜態化的適用場景

頁面靜態化優化後速度會加快,那能不能所有的場景都使用這個優化呢?哪些業務場景適合使用這個架構優化方案呢?

一切脫離業務的架構設計都是耍流氓,頁面靜態化,適用於:總數據量不大,生成靜態頁面數量不多的業務。例如:

58速運的城市頁只有幾百個,就可以用這個優化,只需提前生成幾百個城市的“靜態化頁面”即可

一些二手車業務,只有幾萬量二手車庫存,也可以提前生成這幾萬量二手車的靜態頁面

像58同城這樣的信息模式業務,有幾十億的帖子量,就不太適合於靜態化(碎片文件多,反而訪問慢)

六、實現動靜分離的優缺點

優點:

  • api接口服務化:動靜分離之後,後端應用更爲服務化,只需要通過提供api接口即可,可以爲多個功能模塊甚至是多個平臺的功能使用,可以有效的節省後端人力,更便於功能維護。
  • 前後端開發並行:前後端只需要關心接口協議即可,各自的開發相互不干擾,並行開發,並行自測,可以有效的提高開發時間,也可以有些的減少聯調時間
  • 減輕後端服務器壓力,提高靜態資源訪問速度:後端不用再將模板渲染爲html返回給用戶端,且靜態服務器可以採用更爲專業的技術提高靜態資源的訪問速度。
缺點:

  • 不利於網站SEO(搜索引擎化):搜索引擎的網絡爬蟲一般是根據url訪問頁面,獲取頁面的內容後去掉沒用的信息例如:CSS,JavaScript,然後分析剩下的文本內容;動靜分離架構模式前端數據即在是由JavaScript來完成,這就會導致網絡爬蟲得到的信息部分丟失。在開發中可以採用前端緩存不經常變化數據的方式來解決,只有哪些經常發生變化的數據才每次向後端請求。

  • 開發量變大,前後端交流成本升高:後端api返回的數據,往往是有自身邏輯在內的,比如返回數據中的包含status(1-處理中,2-處理成功,3-處理失敗),前端需要理解status的不同含義,對應的前端操作需要理解(如,status =1 or status = 2,不可提交)。

  • 在業務高速發展時需要慎重考慮:因爲開發量變大,如果在業務開始階段,缺乏前端又要求開發速度很快,就需要慎重考慮這種方式的實現成本對業務發展的影響。

七、總結

頁面靜態化”是一種將原本需要動態生成的站點提前生成靜態站點的優化技術

總數據量不大,生成靜態頁面數量不多的業務,非常適合於“頁面靜態化”優化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章