發起一個web請求,先經過ngnix,再到我們的應用服務(比如:tomcat),然後再去訪問我們的緩存服務(比如:redis)或者我們的數據庫(比如:mysql)。最後提供基本的數據服務。
但是這裏有一個問題:我們的應用服務因爲要求開發效率非常高,所以它的運行效率是很低的。它的qps,或者tps,或者併發都是受限制的,所以我們需要把很多這樣的應用服務組成一個集羣。
向用戶提供高可用性。而一旦很多應用服務構成集羣的時候,我們就需要ngnix具有反向代理功能,可以把動態請求傳到給用戶。而很多應用構成集羣,它一定會帶來兩個需求:
1.我們需要動態的擴容。
2.有些服務出問題的時候,我們需要做容災。
那麼這樣,我們的反向代理必須具備負載均衡功能。其次,在這樣的一個鏈路中,ngnix是處在企業內網的一個邊緣節點。隨着我們網絡鏈路的增長,用戶體驗到的時延會增加。
所以如果我們能夠把一些所有用戶都看起來不變的或者在一段時間內看起來不變的動態內容緩存在ngnix部分,由ngnix直接向用戶提供訪問。那麼,這樣的話,用戶時延就會減少很多。
所以,反向代理就衍生出了另外一個功能叫緩存。它能夠加速我們的訪問。而很多時候,我們在訪問像css或者javascript文件或者像一些小圖片,那麼這樣的靜態資源,是沒有必要
由應用服務來訪問的。它只需要通過本地文件,系統上放置的靜態資源,直接由ngnix提供訪問就可以了。這是ngnix靜態資源。
那麼,第三那個應用場景,則是因爲應用服務自己本身的性能的問題,但是數據庫服務要比應用服務好的多。因爲數據庫服務的業務場景比較簡單,它的併發性能和TPS都要遠高於應用服務。
原文地址:https://www.cnblogs.com/mrcoderwrong/p/11595249.html