前言
前后端分離已成為互聯網項目開發的業界標准使用方式,通過Nginx+Tomcat的方式(也可以中間加一個Node.js)有效的進行解耦,並且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務(多種客戶端,例如:瀏覽器,車載終端,安卓,IOS等等)打下堅實的基礎。這個步驟是系統架構從猿進化成人的必經之路。核心思想是前端HTML頁面通過Ajax調用后端的restuful api接口並使用json數據進行交互。
在互聯網架構中,名詞解釋:
Web服務器:一般指像Nginx,Apache這類的服務器,他們一般只能解析靜態資源。
應用服務器:一般指像Tomcat,Jetty,Resin這類的服務器可以解析動態資源也可以解析靜態資源,但解析靜態資源的能力沒有web服務器好。
一般都是只有web服務器才能被外網訪問,應用服務器只能內網訪問。
前后端分離優勢:
● 可以實現真正的前后端解耦,前端服務器使用Nginx。前端/WEB服務器放的是CSS,js,圖片等等一系列靜態資源(甚至你還可以CSS,js,圖片等資源放到特定的文件服務器,例如阿里雲的oss,並使用CDN加速),前端服務器負責控制頁面引用&跳轉&路由,前端頁面異步調用后端的接口,后端/應用服務器使用Tomcat(把Tomcat想象成一個數據提供者),加快整體響應速度。(這里需要使用一些前端工程化的框架比如Node.js,react,router,react,redux,webpack,發現bug,可以快速定位是誰的問題,不會出現互相踢皮球的現象。)頁面邏輯,跳轉錯誤,瀏覽器兼容性問題,腳本錯誤,頁面樣式等問題,全部由前端工程師來負責。接口數據出錯,數據沒有提交成功,應答超時等問題,全部由后端工程師來解決。雙方互不干擾,前端與后端是相親相愛的一家人。
● 在大並發情況下,我可以同時水平擴展前后端服務器,比如淘寶的一個首頁就需要2000+台前端服務器做集群來抗住日均多少億+的日均pv。(阿里的技術峰會上,聽說他們的web容器都是自己寫的,就算單實例抗10萬HTTP並發,2000台是2億HTTP並發,並且他們還可以根據預知洪峰來無限拓展,很恐怖,就一個首頁。。。)
● 減少后端服務器的並發/負載壓力。除了接口以外的其他所有HTTP請求全部轉移到前端Nginx上,接口的請求調用Tomcat,參考Nginx反向代理Tomcat。且除了第一次頁面請求外,瀏覽器會大量調用本地緩存。
即使后端服務暫時超時或者宕機了,前端頁面也會正常訪問,只不過數據刷不出來而已。
● 如果需要有微信相關的輕應用,那樣你的接口完全可以共用,如果也有app相關的服務,那么只要通過一些代碼重構,也可以大量復用接口,提升效率。
● (多端應用)頁面顯示的東西再多也不怕,因為是異步加載。
● Nginx支持頁面熱部署,不用重啟服務器,前端升級更無縫。
● 增加代碼的維護性&易讀性(前后端耦在一起的代碼讀起來相當費勁)。
● 提升開發效率,因為可以前后端並行開發,而不是像以前的強依賴。
● 在Nginx中部署證書,外網使用HTTPs訪問,並且只開放443和80端口,其他端口一律關閉(防止黑客端口掃描),內網使用HTTP,性能和安全都有保障。
● 前端大量的組件代碼得以復用,組件化,提升開發效率,抽出來!
