動靜分離架構,究竟是啥?
前兩天簡單介紹了“前臺與后臺分離”的架構設計準則,又有水友提問:能不能順帶介紹下“動靜分離”的架構設計準則呢?今天花1分鐘簡單說說。
什么是動靜分離架構設計準則?
動靜分離是指,靜態頁面與動態頁面解耦分離,用不同系統承載對應流量的架構設計方法。
什么是靜態頁面?
靜態頁面,是指互聯網架構中,幾乎不變的頁面(或者變化頻率很低),例如:
- 首頁等html頁面
- js/css等樣式文件
- jpg/apk等資源文件
靜態頁面,有與之匹配的技術架構來加速,例如:
- CDN
- nginx
- squid/varnish
什么是動態頁面?
動態頁面,是指互聯網架構中,不同用戶不同場景訪問,都不一樣的頁面,例如:
- 百度搜索結果頁
- 淘寶商品列表頁
- 速運個人訂單中心頁
這些頁面,不同用戶,不同場景訪問,大都會動態生成不同的頁面。
動態頁面,有與之匹配的技術架構,例如:
- 分層架構
- 服務化架構
- 數據庫,緩存架構
架構上,如何實施動靜分離架構?
靜態頁面與動態頁面解耦分離,用不同系統承載對應流量的架構,如下圖所示。
- 靜態頁面訪問路徑短,訪問速度快,幾毫秒
- 動態頁面訪問路徑長,訪問速度相對較慢(數據庫的訪問,網絡傳輸,業務邏輯計算),幾十毫秒甚至幾百毫秒,對架構擴展性的要求更高
- 靜態頁面與動態頁面以不同域名區分
既然靜態頁面訪問快,動態頁面生成慢,有沒有可能,將原本需要動態生成的站點提前生成好,使用靜態頁面加速技術來訪問呢?
可以,這就是互聯網架構中的“頁面靜態化”優化技術。
什么是頁面靜態化技術?
舉個栗子,如下圖,58同城的帖子詳情頁,原本是需要動態生成的:
- 端訪問/detail/12348888x.shtml 詳情頁;
- web-server層從RESTful接口中,解析出帖子id是12348888;
- service通過DAO層拼裝SQL,訪問數據庫;
- 最終獲取數據,拼裝html返回瀏覽器;
而“頁面靜態化”是指,將帖子ID為12348888的帖子12348888x.shtml提前生成好,由靜態頁面相關加速技術來加速:
這樣的話,將極大提升訪問速度,減少訪問時間,提高用戶體驗。
頁面靜態化,適合什么業務場景?
一切脫離業務的架構設計都是耍流氓,并不是所有的業務場景都適合頁面靜態化,濫用該技術,反而會降低系統性能。
頁面靜態化,適用于:總數據量不大,生成靜態頁面數量不多的業務。
舉一些栗子:
- 快狗打車的城市頁只有幾百個,就可以用這個優化,只需提前生成幾百個城市的“靜態化頁面”即可;
- 一些二手車業務,只有幾萬量二手車庫存,也可以提前生成這幾萬量二手車的靜態頁面;
- 像58同城這樣的信息模式業務,有幾十億的帖子量,就不太適合于靜態化(碎片文件多,反而訪問慢);
簡單總結
- 動靜分離是指,靜態頁面與動態頁面解耦分離,用不同系統承載流量的架構設計方法;
- “頁面靜態化”是一種將原本需要動態生成的站點提前生成靜態站點的優化技術;
- 總數據量不大,生成靜態頁面數量不多的業務,非常適合于“頁面靜態化”優化;
一分鐘不長,希望大伙有收獲。
【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】