ASP.NET負(fù)載均衡的設(shè)定
在ASP.NET站點(diǎn)里面實(shí)現(xiàn)負(fù)載均衡,其實(shí)和其他WEB的實(shí)現(xiàn)方式基本類似。同樣我們需要負(fù)載均衡器,之后是對(duì)會(huì)話狀態(tài)的設(shè)置,我們要保證會(huì)話寶石和遷移正常。其中需要的配置并不是很多,在這里,我們制作一個(gè)簡(jiǎn)要介紹。
ASP.NET站點(diǎn)中做負(fù)載均衡:
基于HTTP協(xié)議我們可能發(fā)現(xiàn)我們要解決兩點(diǎn)問(wèn)題:
***,做到負(fù)載均衡,我們需要一個(gè)負(fù)載均衡器。
可以通過(guò)DNS輪詢來(lái)做,在DNS服務(wù)器上配置為每次對(duì)我們做負(fù)載均衡的同一主機(jī)名的DNS查詢得到不同的IP地址。這樣的好處是配置簡(jiǎn)單投入較小,缺點(diǎn)是瀏覽器訪問(wèn)各個(gè)服務(wù)器的機(jī)會(huì)是均等的,不能根據(jù)服務(wù)器的負(fù)載程度自動(dòng)把請(qǐng)求路由到負(fù)載較小的服務(wù)器。
可以通過(guò)專用的負(fù)載均衡設(shè)備,通過(guò)監(jiān)測(cè)后臺(tái)數(shù)臺(tái)服務(wù)器的負(fù)載情況,自動(dòng)把HTTP請(qǐng)求轉(zhuǎn)發(fā)到負(fù)載較輕的服務(wù)器。另外必須監(jiān)測(cè)后臺(tái)服務(wù)器的IIS負(fù)載情況,而不是整臺(tái)服務(wù)器的CPU負(fù)載。同時(shí)可能需要在負(fù)載均衡器和后臺(tái)服務(wù)應(yīng)用之間建立心跳連接,以避免出現(xiàn)某臺(tái)服務(wù)器IIS進(jìn)程或者其中跑的應(yīng)用已經(jīng)down掉,負(fù)載均衡器反而監(jiān)測(cè)到這臺(tái)服務(wù)器的負(fù)載最小而把大量請(qǐng)求轉(zhuǎn)發(fā)的這臺(tái)服務(wù)器,達(dá)到相反的效果。
第二,Session狀態(tài)的保持和遷移。
由于HTTP協(xié)議的無(wú)狀態(tài)性,我們一般是在Session中保存客戶端的一些狀態(tài)數(shù)據(jù),負(fù)載均衡之后,前后兩次HTTP請(qǐng)求所到達(dá)的服務(wù)器可能不是同一臺(tái),這就造成可能出現(xiàn)這樣的情況,前一此請(qǐng)求處理中設(shè)置的session在第二次請(qǐng)求中變得不可用了,造成應(yīng)用程序出錯(cuò)。所以我們要把 session跟隨遷移。實(shí)現(xiàn)的方法就是session的統(tǒng)一存儲(chǔ)和服務(wù)器間共享。
在ASP.NET中服務(wù)器保存session有五種方式,Off不說(shuō)了,InProc是保存在服務(wù)器進(jìn)程的內(nèi)存中,顯然不能滿足要求。另外兩種能夠滿足:
StateServer是把session保存在專門的狀態(tài)服務(wù)器中。這樣各臺(tái)服務(wù)器都存取同一個(gè)StateServer,達(dá)到共享的目的。
SQLServer是把session保存在數(shù)據(jù)庫(kù)中。同樣能達(dá)到目的。
Custom自定制的存儲(chǔ)方案,我們自己寫(xiě)當(dāng)然能夠?qū)崿F(xiàn)。
比較一下,Custom這種自己實(shí)現(xiàn)比較麻煩一般不用,SQLServer可以利用數(shù)據(jù)庫(kù)的cluster達(dá)到高性能和高可用性的目的,StateServer當(dāng)然也可以通過(guò)手段達(dá)到高可用性,不過(guò)似乎不能實(shí)現(xiàn)集群所以性能也有所限制。
另外如果要做負(fù)載均衡在StateServer和SQLServer中配置session時(shí),必須在web.config中重寫(xiě) machineKey節(jié)點(diǎn):
- <machineKey
- validationKey="1234567890123456789012345678901234567890AAAAAAAAAA"
- decryptionKey="123456789012345678901234567890123456789012345678"
- validation="SHA1"
- decryption="Auto"
- />
否則各個(gè)應(yīng)用服務(wù)器拿到的session還是不一樣的。