應對高併發,解決方案大多從服務器級別和應用程序級別【硬件和軟件】兩個方向進行html
第一個方向:增大服務器的CPU,增長內存,或者直接購買高性能服務器。但隨着業務的不斷增長,服務器性能也達到瓶頸。前端
第二個方向:從應用程序級別也就是軟件設計編碼方向,如HTML靜態化、圖片服務器分離、分佈式緩存,減小客戶端訪問時併發請求的數據。 nginx
3種利用負載均衡解決高併發訪問的方案web
簡單理解:Domain Name System,域名系統是因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶更方便的訪問互聯網。例如咱們將程序發佈到192.168.55.145 和144兩臺服務器上,經過DNS能夠設置一個統一的訪問入口,如www.Max1209.com對這兩臺服務器上的服務進行訪問。用戶直接訪問www.Max1209.com主機名而不需記住機器IP,經過主機名,最終獲得該主機名進行域名解析獲得對應的IP地址進行訪問。算法
在DNS服務器中,能夠爲多個不一樣的IP配置同一個名字,這個數據被髮送給其餘名字服務器,而最終查詢這個名字的客戶機將在解析這個名字時隨機使用其中一個地址。所以,對於同一個名字,不一樣的客戶機會獲得不一樣的地址,所以不一樣的客戶訪問的也就是不一樣地址的Web服務器。數據庫
簡單說,也就是一個外觀,給部署了同一個網站的n多臺服務器設置同一個名字,不一樣地區或者不一樣特色的用戶訪問同一個名字,實際接收客戶請求的是外觀裏的不一樣ip的服務器,從而達到負載均衡的目的。後端
同時面對更高訪問量需求,DNS能夠以設置成樹狀,多個DNS服務器將請求分發給下一個DNS服務器,N層解析以後再訪問到應用服務器,這樣就能夠增長應用服務器的個數,應對更大併發數據請求。緩存
但使用DNS負載均衡的時候,若是服務器發生故障,DNS繼續把請求發送給故障機器,一直到把故障服務器從DNS中移走爲止,這樣用戶就只能等到DNS鏈接超時後才能訪問到目標網站。tomcat
解決方案即可以橫向擴充n臺應用服務器,而且客戶端訪問與應用服務器中間加上負載均衡配置,負載均衡能實現的效果主要有三個:服務器
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler使用。其特色是佔有內存少,併發能力強,中國大陸使用nginx網站用戶有:百度、新浪、網易、騰訊等。
Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服務器的身份接受客戶端發送過來的請求,而後將請求轉發給內部網絡上的應用服務器,並將從服務器上獲得的結果返回給客戶端,此時代理服務器對外就表現爲一個服務器,不過它只負責轉發請求,不負責處理。
Nginx轉發請求可按照調度規則經過輪詢、ip哈希、URL哈希、權重等多種方式對應用服務器作負載均衡,同時還支持後端服務器的健康檢查,也就是上面講的故障移除和恢復添加功能。
每一個請求按時間順序逐一分配到不一樣的應用服務器,若是應用服務器down掉,能自動剔除。
經過配置權重,指定輪詢概率,權重和訪問比率成正比,用於應用服務器性能不均的狀況。
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個應用服務器,能夠解決session共享的問題。
擴展知識點:Nginx配置4層負載
https://www.aliyun.com/jiaocheng/130203.html
https://blog.csdn.net/hu2010shuai/article/details/54668471
總結:
默認支持七層代理轉發:基於HTTP;--with-stream爲四層代理轉發:基於TCP,UDP;
Nginx TCP負載均衡原理上和LVS等是一致的,工做在更爲底層,性能會高於原來HTTP負載均衡很多。可是,不會比LVS更爲出色,LVS被置於內核模塊,而Nginx工做在用戶態,並且,Nginx相對比較重。
upstream tomcatserver1 { server 192.168.72.49:8080 weight=3; server 192.168.72.49:8081; } server { listen 80; server_name 8080.max.com; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcatserver1; index index.html index.htm; } }
經過以上配置,即可以實現,在訪問8080.max.com這個網站時,因爲配置了proxy_pass地址,全部請求都會先經過nginx反向代理服務器,在服務器將請求轉發給目的主機時,讀取upstream爲 tomcatsever1的地址,讀取分發策略,配置tomcat1權重爲3,因此nginx會將大部分請求發送給49服務器上的tomcat1,也就是8080端口;較少部分給tomcat2來實現有條件的負載均衡,固然這個條件就是服務器一、2的硬件指數處理請求能力。
upstream myServer { server 192.168.72.49:9090 down; server 192.168.72.49:8080 weight=2; server 192.168.72.49:6060; server 192.168.72.49:7070 backup; }
表示單前的server暫時不參與負載
默認爲1.weight越大,負載的權重就越大。
容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
max_fails 次失敗後,暫停的時間。
其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。
除了要實現網站的高可用,也就是提供n多臺服務器用於發佈相同的服務,添加負載均衡服務器分發請求以保證在高併發下各臺服務器能相對飽和的處理請求。一樣,負載均衡服務器也須要高可用,以防若是負載均衡服務器掛掉了,後面的應用服務器也紊亂沒法工做。
實現高可用的方案:添加冗餘。添加n臺nginx服務器以免發生上述單點故障。具體方案詳見下文:keepalive+nginx實現負載均衡高可用
Linux Virtual Server,Linux虛擬服務器,主要使用集羣技術實現和Linux操做系統實現一個高性能、高可用的服務器虛擬的服務器集羣系統。
它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(咱們可稱之爲虛擬IP地址)上的。簡單理解這個調度器跟Nginx的反向代理服務、DNS的域名解析實現的是一樣功能。對外提供統一虛擬IP,實際用戶訪問的是LVS經過轉發請求到指定服務器上的應用。
一組真正執行客戶請求的服務器,執行的服務通常有WEB、MAIL、FTP和DNS等。
它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。這也是LVS跟Nginx區別之處:LVS可經過共享存儲結構實現多個應用服務器間的session共享。
LVS主要經過IP負載均衡技術VS/NAT、VS/TUN、VS/DR實現負載均衡。簡單介紹第一個VS/NAT,它是一種最簡單的方式,全部的RealServer只須要將本身的網關指向Director便可。客戶端能夠是任意操做系統,但此方式下,一個Director可以帶動的RealServer比較有限。在VS/NAT的方式下,Director也能夠兼爲一臺RealServer。