1. 程式人生 > >nginx+Tomcat 叢集介紹,輪詢,session共享如何實現(面試用)

nginx+Tomcat 叢集介紹,輪詢,session共享如何實現(面試用)

(反向代理的解釋:反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。)
重點兩部分:
一、負載均衡
二、tomcat叢集
所謂tomcat叢集,就是可以向外提供並行服務的多臺機器,任何一臺伺服器宕機,其它伺服器可以替代它向外提供服務,而不影響使用者訪問。
nginx是一個常用的反向代理服務,可自定義模組,實現請求轉發及負載均衡(根具體採用策略有關)。為了tomcat叢集的高可用性,還需要實現nginx的雙機熱備。
一,如果僅是對外提供一個頁面訪問,不用區分單一使用者(不區分每個訪問session,不涉及使用者許可權,使用者資料等內容),僅僅配置nginx負載均衡策略即可。
nginx負載均衡策略主要分一下四種:
1)、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器宕機,能自動剔除。
2)、ip_hash 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器。
3)、fair 按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
4)、url_hash 按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。
二,如果涉及到使用者session,做一些鑑權快取、存放臨時資訊時,就必須做tomcat的session共享。
目前可參考到的session共享方式主要分為兩種。
1)利用tomcat自帶的組播機制,實現session複製。
對tomcat及應用的若干配置檔案進行配置即可實現,網上有很多資料可參考。但這種方式些弊端,看過一些資料,不建議用session複製的方式。在實際使用過程中,也發現有存在session莫名失蹤的現象。
2)利用第三方機制儲存session。
比較常見的是tomcat整合memcached伺服器來儲存session。實際專案中,我們採用過利用redis實現session儲存,redis高效的存取效能為高效的訪問提供了保障,但是目前redis的叢集功能似乎沒有釋出,如何解決redis的單點故障需要研究。
小結:是否實現session共享與nginx的負載策略有很大關係。比如採用輪詢策略,就必須實現session共享,因為客戶端會訪問到每臺伺服器;而如果採用ip_hash策略,就可以不用考慮session共享的問題了,但是ip_hash有些缺陷使它不能隨便使用(如多臺pc使用同一個外網ip)。
最近發現一個nginx的粘連模組(類似session粘連),可以看做nginx的第5種均衡策略。它利用客戶端cookie,對其寫入一個route引數,每次訪問可以根據route的值,固定的訪問一臺伺服器,解決的session共享的問題
四、總結
 誰能想到實現一個高效能的負載均衡叢集會如此簡單。Nginx的功能如此強大,配置卻如此簡單,我們還有什麼理由拒絕它呢?這比我們動不動就十多萬至幾十萬人民幣的F5 BIG-IP、NetScaler等硬體負載均衡交換機廉價了不知多少。此外,大家別忘了Nginx不僅僅是一個反向代理伺服器,它本身也可以託管網站,作為Web伺服器,進行Http服務處理。