C/S架構
- 比較早的軟件架構,主要用於局域網內,也叫客戶端/服務器模式
- 第一層:用戶表示層 -- 客戶端系統上結合了界面顯示與業務邏輯
- 第二層:數據庫層 -- 通過網絡結合數據庫服務器
- 客戶端不僅僅是一些簡單的操作,也會處理一些運算,業務邏輯等,也就是說客戶端也做着一些本該由服務器來做的事
- 優點:
- 界面和操作可以很豐富(客戶端操作界面可以隨意排列,滿足客戶需求)
- 安全性能很容易保證(只有兩層的傳輸)
- 由於只有一層交互,響應速度很快(直接相連,中間無阻隔,比如QQ,那么多人在線,我們也不覺得慢)
- 缺點:
- 適用面窄,通常用於局域網中。需要專門的客戶端,不能跨平台
- 用戶群固定。軟件需要安裝才可使用,因此不適合面向一些不可知用戶
- 維護成本高,一次升級,所有客戶端程序都要發生改變
B/S架構
- Browser/Server,即瀏覽器/服務器架構
- Browser指的是web瀏覽器,極少數事務邏輯在前端實現,但主要業務邏輯還是在服務端實現
- 無須特別安裝,只有web瀏覽器即可
- B/S架構的分層
- 三層架構
- 表現層:主要完成用戶和后台的交互及最終查詢結果的輸出功能
- 邏輯層:主要是利用服務器完成客戶端的應用邏輯功能
- 數據層:主要是接受客戶端請求后獨立進行各種運算

- 優點
- 客戶端無需安裝,有web瀏覽器即可(基於網頁語言,與操作系統無關,跨平優勢)
- B/S架構可以直接放在廣域網上,通過一定的權限控制實現多客戶訪問的目的,交互性強
- B/S架構無需升級多個客戶端,升級服務器即可。
- 缺點
- 在速度和安全性上需要花費巨大的設計成本
- 客戶端服務端的交互時請求-響應模式,通常需要刷新頁面*(Ajax技術緩解)
B/S架構的幾種形式
第一種:客戶端-服務器-數據庫

這個應該是我們平時比較常用的一種模式:
1、客戶端向服務器發起Http請求
2、服務器中的web服務層能夠處理Http請求
3、服務器中的應用層部分調用業務邏輯,調用業務邏輯上的方法
4、如果有必要,服務器會和數據庫進行數據交換. 然后將模版+數據渲染成最終的Html, 返送給客戶端
第二種:客戶端-web服務器-應用服務器-數據庫

類似於第一種方法,只是將web服務和應用服務解耦
1 客戶端向web服務器發起Http請求
2 web服務能夠處理Http請求,並且調用應用服務器暴露在外的RESTFUL接口
3 應用服務器的RESTFUL接口被調用,會執行對應的暴露方法.如果有必要和數據庫進行數據交互,應用服務器會和數據庫進行交互后,將json數據返回給web服務器
4 web服務器將模版+數據組合渲染成html返回給客戶端
第三種方法:客戶端-負載均衡器(Nginx)-中間服務器(Node)-應用服務器-數據庫
這種模式一般用在有大量的用戶,高並發的應用中

1、整正暴露在外的不是真正web服務器的地址,而是負載均衡器器的地址
2、客戶向負載均衡器發起Http請求
3、負載均衡器能夠將客戶端的Http請求均勻的轉發給Node服務器集群
4、Node服務器接收到Http請求之后,能夠對其進行解析,並且能夠調用應用服務器暴露在外的RESTFUL接口
5、應用服務器的RESTFUL接口被調用,會執行對應的暴露方法.如果有必要和數據庫進行數據交互,應用服務器會和數據庫進行交互后,將json數據返回給Node
6、Node層將模版+數據組合渲染成html返回反向代理服務器
7、反向代理服務器將對應html返回給客戶端
Nginx的優點有:
1、它能夠承受、高並發的大量的請求,然后將這些請求均勻的轉發給內部的服務器,分攤壓力.
2、反向代理能夠解決跨域引起的問題,因為Nginx,Node,應用服務器,數據庫都處於內網段中。
3、Nginx非常擅長處理靜態資源(img,css,js,video),所以也經常作為靜態資源服務器,也就是我們平時所說的CDN
比如:前一個用戶訪問index.html, 經過Nginx-Node-應用服務器-數據庫鏈路之后,Nginx會把index.html返回給用戶,並且會把index.html緩存在Nginx上,
下一個用戶再想請求index.html的時候,請求Nginx服務器,Nginx發現有index.html的緩存,於是就不用去請求Node層了,會直接將緩存的頁面(如果沒過期的話)返回給用戶