对于负载均衡的理解
看了好多關(guān)于Nginx,LVS等的文章,跟很多朋友討論,自己的項(xiàng)目組也實(shí)現(xiàn)了一個(gè)demo,今天終于搞清了關(guān)系。
LVS是一個(gè)四層負(fù)載均衡,四層就是OSI模型的第四層,TCP/IP層,它是根據(jù)cip,cport,sip,sport等做負(fù)載均衡,并不理解HTTP等請求內(nèi)容(因?yàn)槟鞘堑谄邔討?yīng)用層管的事),所以對于海量請求,最前面比較適合搞個(gè)LVS做負(fù)載,分發(fā)請求
Nginx是一個(gè)有很多功能的Server,它首先是一個(gè)反向代理Web服務(wù)器,然后可以做七層負(fù)載均衡器,還有重寫URL,靜態(tài)緩存等功能。由于其工作在應(yīng)用層,因此能夠理解HTTP協(xié)議,因此可以通過URL做分發(fā),可以實(shí)現(xiàn)動(dòng)靜分離,比如把動(dòng)態(tài)請求轉(zhuǎn)給tomcat,相當(dāng)于apache服務(wù)器的mod_jk。其可以自己處理靜態(tài)內(nèi)容。當(dāng)然這都是因?yàn)槠淇梢酝ㄟ^指定location參數(shù)配置的,你想實(shí)現(xiàn)怎么樣的分發(fā)都可以。其還有內(nèi)置模塊基于ip分發(fā)。其還支持健康檢查,有機(jī)器掛了就自動(dòng)不再發(fā)到那臺機(jī)器了。
KeepAlived是用來心跳負(fù)載均衡器的,這只有當(dāng)負(fù)載均衡器是集群時(shí)才用到的,當(dāng)一個(gè)負(fù)載均衡器掛了,可以無縫切換到其他負(fù)載均衡器上。
Session保持依靠兩個(gè)機(jī)制,一個(gè)是session sticky,基于nginx使用它的一個(gè)插件jvm_route,LVS的看來應(yīng)該是采用source hash這種策略。另外就是當(dāng)后面的應(yīng)用服務(wù)器掛了,session怎么辦,一種方案是session復(fù)制,tomcat自己的方式;一種方案是共享存儲session,可以是memcache等,我們選用了Terracotta,優(yōu)點(diǎn)是對代碼沒有侵入性,不需要實(shí)現(xiàn)序列化接口,堆級復(fù)制,對變化同步,跟memcache比性能會差些,差多少沒測過。
Squid靜態(tài)緩存服務(wù)器,現(xiàn)在Nginx基本可以搞定這個(gè)事情了,效率甚至更高。
所以大網(wǎng)站的策略是 LVS+Squid+Nginx+Memcache+Tomcat+Terracotta
Memcache或是Redis這種東東來替代數(shù)據(jù)庫加速數(shù)據(jù)訪問。
LVS高效的負(fù)載均衡到各個(gè)Nginx上,Ngtinx再分發(fā),做動(dòng)靜分離。
對于大量讀的網(wǎng)站,大多數(shù)請求估計(jì)到不了Tomcat,都被Nginx轉(zhuǎn)到靜態(tài)頁面緩存的服務(wù)器上去了。
CDN技術(shù)可以幫助網(wǎng)站路由到離用戶最近的CDN節(jié)點(diǎn),讀取上面的內(nèi)容。
這些都是針對大量讀的網(wǎng)站,讀寫分離,對并發(fā)事務(wù)的鎖要求非常低,并發(fā)事務(wù)并不可怕,可怕的是鎖。
下面是一個(gè)大牛的blog,講了好多經(jīng)驗(yàn),人家都是處理數(shù)十億pv的
http://blog.sina.com.cn/s/blog_466c66400100hw0i.html
下面是將Redis的
http://timyang.net/data/redis-misunderstanding/
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/liuzhuqing/p/7480361.html
總結(jié)
- 上一篇: CentOS6.3安装MySQL5.5
- 下一篇: ShellCode的编写入门