? ?在實(shí)際環(huán)境中,由于負(fù)載均衡,cdn加速的等原因,服務(wù)器都需要耗費(fèi)內(nèi)存在創(chuàng)建socket來(lái)進(jìn)行tcp鏈接,導(dǎo)致服務(wù)器的壓力很大,當(dāng)多人并發(fā)訪問(wèn)之后,會(huì)導(dǎo)致負(fù)載過(guò)大的情況發(fā)生,所以,我們需要在應(yīng)用服務(wù)器的前端再加一個(gè)web服務(wù)器來(lái)提高訪問(wèn)效率,提高性能。
? 首先我們前后端技術(shù)人員會(huì)用各種框架以及開(kāi)發(fā)技術(shù)寫(xiě)出前后端的代碼,接著,把前端的代碼放到web服務(wù)器(Nginx)上,而把后端的代碼放到應(yīng)用服務(wù)器(Tomcat)上。接著根據(jù)主機(jī)獲取到的ip地址就可以遠(yuǎn)程訪問(wèn)應(yīng)用了。
? 前后端代碼的分離可以實(shí)現(xiàn)低耦合的特點(diǎn)。
? 動(dòng)靜分離的優(yōu)點(diǎn):
1.可以實(shí)現(xiàn)真正的前后端解耦,前端服務(wù)器使用nginx
2.發(fā)現(xiàn)bug,可以快速定位是誰(shuí)的問(wèn)題,不會(huì)出現(xiàn)互相踢皮球的現(xiàn)象。
3. 在大并發(fā)情況下,可以同時(shí)水平擴(kuò)展前后端服務(wù)器,比如淘寶的一個(gè)首頁(yè)就需要2000+臺(tái)前端服務(wù)器做集群來(lái)抗住日均多少億+的日均pv
4. 減少后端服務(wù)器的并發(fā)/負(fù)載壓力
5. 即使后端服務(wù)暫時(shí)超時(shí)或者宕機(jī)了,前端頁(yè)面也會(huì)正常訪問(wèn),只不過(guò)數(shù)據(jù)刷不出來(lái)而已
6. 也許你也需要有微信相關(guān)的輕應(yīng)用,那樣你的接口完全可以共用,如果也有app相關(guān)的服務(wù)
7. 頁(yè)面顯示的東西再多也不怕,因?yàn)槭钱惒郊虞d
8. nginx支持頁(yè)面熱部署,不用重啟服務(wù)器,前端升級(jí)更無(wú)縫
9. 增加代碼的維護(hù)性&易讀性(前后端耦在一起的代碼讀起來(lái)相當(dāng)費(fèi)勁)
10. 升開(kāi)發(fā)效率,因?yàn)榭梢郧昂蠖瞬⑿虚_(kāi)發(fā),而不是像以前的強(qiáng)依賴
11. 在nginx中部署證書(shū),外網(wǎng)使用https訪問(wèn),并且只開(kāi)放443和80端口,其他端口一律關(guān)閉(防止黑客端口掃描),內(nèi)網(wǎng)使用http,性能和安全都有保障
12. 前端大量的組件代碼得以復(fù)用,組件化,提升開(kāi)發(fā)效率,抽出來(lái)
? 所謂web服務(wù)器就是負(fù)責(zé)處理HTTP協(xié)議,只能發(fā)送靜態(tài)頁(yè)面的內(nèi)容,常用的是Nginx。
應(yīng)用服務(wù)器是處理類似于JSP,PHP,ASP等動(dòng)態(tài)內(nèi)容,常用的是Tomcat。
Tomcat和Nginx服務(wù)器的區(qū)別:
nginx是Http服務(wù)器,專為處理Http請(qǐng)求而誕生,處理Http請(qǐng)求能力強(qiáng),適合用于處理靜態(tài)資源(通過(guò)Http請(qǐng)求如實(shí)地返回內(nèi)容,并且每個(gè)請(qǐng)求處理時(shí)間不會(huì)很長(zhǎng)),底層采用單線程異步非阻塞方式,當(dāng)讀取靜態(tài)資源發(fā)生IO時(shí),可以先處理其他請(qǐng)求。據(jù)說(shuō)nginx單機(jī)能抗5W并發(fā)。
tomcat是servlet/JSP容器,就是servlet/JSP運(yùn)行的環(huán)境,tomcat把接收到的http請(qǐng)求交給servlet處理,然后servlet處理那些不講邏輯的業(yè)務(wù)邏輯,適合處理動(dòng)態(tài)資源。tomcat一般采用線程池的方式處理請(qǐng)求,當(dāng)請(qǐng)求數(shù)量多,線程處理時(shí)間長(zhǎng),線程處理不過(guò)來(lái),線程間會(huì)頻繁切換,消耗大量cpu資源和內(nèi)存。當(dāng)請(qǐng)求超過(guò)一定的數(shù)量,會(huì)拒絕連接。因此JSP并不適合用于高并發(fā)的場(chǎng)景。
靜態(tài)資源全部部署到nginx中,動(dòng)態(tài)資源放在tomcat中,也就是動(dòng)靜分離的思想。一個(gè)請(qǐng)求過(guò)來(lái),先請(qǐng)求nginx的靜態(tài)資源,瀏覽器加載靜態(tài)資源后,通過(guò)nginx的反向代理請(qǐng)求后端服務(wù)器,這里還可以使用nginx的負(fù)載均衡,添加多臺(tái)后端服務(wù)器:

大量并發(fā)瀏覽器請(qǐng)求--->web服務(wù)器集群(nginx)--->應(yīng)用服務(wù)器集群(tomcat)--->文件/數(shù)據(jù)庫(kù)/緩存/消息隊(duì)列服務(wù)器集群
服務(wù)器架構(gòu)集群:多臺(tái)服務(wù)器組成的響應(yīng)高并發(fā),高數(shù)據(jù)量訪問(wèn)的架構(gòu)集群。
負(fù)載均衡:分發(fā)請(qǐng)求到不同的服務(wù)器,使流量平均分配
靜態(tài)資源服務(wù)器:存儲(chǔ)靜態(tài)資源,如css html
js等。
反向代理:a想訪問(wèn)c,但a不能直接訪問(wèn)c,而b能訪問(wèn)c,所以a訪問(wèn)b,b訪問(wèn)c,c返回?cái)?shù)據(jù)給a
在計(jì)算機(jī)網(wǎng)絡(luò)中,反向代理是代理服務(wù)器的一種。服務(wù)器根據(jù)客戶端的請(qǐng)求,從其關(guān)系的一組或多組后端服務(wù)器(如Web服務(wù)器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會(huì)得知反向代理的IP地址,而不知道在代理服務(wù)器后面的服務(wù)器簇的存在
高可用服務(wù)器,用來(lái)監(jiān)控負(fù)載均衡服務(wù)器,一旦負(fù)載均衡服務(wù)器宕機(jī),會(huì)接替負(fù)載均衡服務(wù)
器的工作,繼續(xù)進(jìn)行網(wǎng)路的分發(fā)工具。如heartbit
cdn內(nèi)容分發(fā)網(wǎng)絡(luò):其基本思路是盡可能避開(kāi)互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母?、更穩(wěn)定。通過(guò)在網(wǎng)絡(luò)各處放置反向代理節(jié)點(diǎn)服務(wù)器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),CDN系統(tǒng)能夠?qū)崟r(shí)地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點(diǎn)的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時(shí)間等綜合信息將用戶的請(qǐng)求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點(diǎn)上。其目的是使用戶可就近取得所需內(nèi)容,解決Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問(wèn)網(wǎng)站的響應(yīng)速度。