負載均衡分為兩種:一種是基于DNS溶诞,另一種基于IP報文驳遵。
作者:知乎用戶
鏈接:https://www.zhihu.com/question/22610352/answer/126894813
來源:知乎
著作權(quán)歸作者所有顷歌。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)瘟判,非商業(yè)轉(zhuǎn)載請注明出處恢总。
利用DNS實現(xiàn)負載均衡牡肉,就是在DNS服務器配置多個A記錄,不同的DNS請求會解析到不同的IP地址钻注。大型網(wǎng)站一般使用DNS作為第一級負載均衡蚂且。缺點是DNS生效時間略長,擴展性差幅恋。
基于IP的負載均衡杏死,早期比較有代表性并且被大量使用的的就是LVS了。原理是LVS在Linux內(nèi)核態(tài)獲取到IP報文后捆交,根據(jù)特定的負載均衡算法將IP報文轉(zhuǎn)發(fā)到整個集群的某臺服務器中去淑翼。缺點是LVS的性能依賴Linux內(nèi)核的網(wǎng)絡性能,但Linux內(nèi)核的網(wǎng)絡路徑過長導致了大量開銷品追,使得LVS單機性能較低玄括。
那么有沒有更好的負載均衡技術(shù)呢?當然有肉瓦。
Google于2016年3月最新公布的負載均衡Maglev就在此列遭京。Maglev是谷歌為自己的數(shù)據(jù)中心研發(fā)的解決方案,并于2008開始用于生產(chǎn)環(huán)境泞莉。在第十三屆網(wǎng)絡系統(tǒng)設計與實現(xiàn)USENIX研討會(NSDI ‘16)上哪雕, 來自谷歌、加州大學洛杉磯分校鲫趁、SpaceX公司的工程師們分享了這一商用服務器負載均衡器Maglev的詳細信息斯嚎。Maglev安裝后不需要預熱5秒內(nèi)就能應付每秒100萬次請求令人驚嘆不已。在谷歌的性能基準測試中挨厚,Maglev實例運行在一個8核CPU下堡僻,網(wǎng)絡吞吐率上限為12M PPS(數(shù)據(jù)包每秒),如果Maglev使用Linux內(nèi)核網(wǎng)絡堆棧則速度會小于4M PPS幽崩。
負載均衡產(chǎn)品
負載均衡可以通過負載均衡網(wǎng)絡硬件設備和Web服務器軟件來實現(xiàn)苦始,前者設備成本較高,小公司通常負擔不起慌申,所以后者一般是我們的首選陌选。實現(xiàn)負載均衡常用的Web服務器軟件有Nginx、HAProxy蹄溉、LVS咨油、Apache,
nginx負載均衡策略
https://blog.csdn.net/xyang81/article/details/51702900
- 輪循(默認)
Nginx根據(jù)請求次數(shù)柒爵,將每個請求均勻分配到每臺服務器 - 最少連接
將請求分配給連接數(shù)最少的服務器役电。Nginx會統(tǒng)計哪些服務器的連接數(shù)最少。 - IP Hash
綁定處理請求的服務器棉胀。第一次請求時法瑟,根據(jù)該客戶端的IP算出一個HASH值冀膝,將請求分配到集群中的某一臺服務器上。后面該客戶端的所有請求霎挟,都將通過HASH算法窝剖,找到之前處理這臺客戶端請求的服務器,然后將請求交給它來處理酥夭。
nginx高可用
1.阿里云SLB
2.硬件負載均衡器
3.軟件方式實現(xiàn)高可用或負載均衡:
keepalive,LVS,...
Keepalived+Nginx實現(xiàn)高可用Web負載均衡
搭建Keepalived + Nginx + Tomcat的高可用負載均衡架構(gòu)
Tomcat的性能與最大并發(fā)數(shù)
https://blog.csdn.net/java_best/article/details/54708690
Tomcat 默認配置的最大請求數(shù)是 150赐纱,也就是說同時支持 150 個并發(fā),當然了熬北,也可以將其改大疙描。
當某個應用擁有 250 個以上并發(fā)的時候,應考慮應用服務器的集群讶隐。
具體能承載多少并發(fā)起胰,需要看硬件的配置,CPU 越多性能越高巫延,分配給 JVM 的內(nèi)存越多性能也就越高待错,但也會加重 GC 的負擔。
操作系統(tǒng)對于進程中的線程數(shù)有一定的限制:
Windows 每個進程中的線程數(shù)不允許超過 2000
Linux 每個進程中的線程數(shù)不允許超過 1000
另外烈评,在 Java 中每開啟一個線程需要耗用 1MB 的 JVM 內(nèi)存空間用于作為線程棧之用。
Tomcat的最大并發(fā)數(shù)是可以配置的犯建,實際運用中讲冠,最大并發(fā)數(shù)與硬件性能和CPU數(shù)量都有很大關系的。更好的硬件适瓦,更多的處理器都會使Tomcat支持更多的并發(fā)竿开。
Tomcat 默認的 HTTP 實現(xiàn)是采用阻塞式的 Socket 通信,每個請求都需要創(chuàng)建一個線程處理玻熙。這種模式下的并發(fā)量受到線程數(shù)的限制否彩,但對于 Tomcat 來說幾乎沒有 BUG 存在了。
Tomcat 還可以配置 NIO 方式的 Socket 通信嗦随,在性能上高于阻塞式的列荔,每個請求也不需要創(chuàng)建一個線程進行處理,并發(fā)能力比前者高枚尼。但沒有阻塞式的成熟贴浙。
這個并發(fā)能力還與應用的邏輯密切相關,如果邏輯很復雜需要大量的計算署恍,那并發(fā)能力勢必會下降崎溃。如果每個請求都含有很多的數(shù)據(jù)庫操作,那么對于數(shù)據(jù)庫的性能也是非常高的盯质。
對于單臺數(shù)據(jù)庫服務器來說袁串,允許客戶端的連接數(shù)量是有限制的概而。
并發(fā)能力問題涉及整個系統(tǒng)架構(gòu)和業(yè)務邏輯。
系統(tǒng)環(huán)境不同囱修,Tomcat版本不同赎瑰、JDK版本不同、以及修改的設定參數(shù)不同蔚袍。并發(fā)量的差異還是滿大的乡范。
maxThreads="1000" 最大并發(fā)數(shù)
minSpareThreads="100"http:///初始化時創(chuàng)建的線程數(shù)
maxSpareThreads="500"http:///一旦創(chuàng)建的線程超過這個值,Tomcat就會關閉不再需要的socket線程啤咽。
acceptCount="700"http:// 指定當所有可以使用的處理請求的線程數(shù)都被使用時晋辆,可以放到處理隊列中的請求數(shù),超過這個數(shù)的請求將不予處理
nginx單機最大支持并發(fā)量
3w-4w
一般并發(fā)量到1w該用dns分流了宇整,
Google那樣直接從網(wǎng)卡驅(qū)動層分流了