“集群和負(fù)載均衡”在實(shí)戰(zhàn)當(dāng)中的運(yùn)用技巧
在“高并發(fā),海量數(shù)據(jù),分布式,NoSql,云計(jì)算......”概念滿天飛的年代,相信不少朋友都聽(tīng)說(shuō)過(guò)甚至常與人提起“集群,負(fù)載均衡”等,但不是所有人都有機(jī)會(huì)真正接觸到這些技術(shù),也不是所有人都真正理解了這些“聽(tīng)起來(lái)很牛的”技術(shù)名詞。下面簡(jiǎn)單解釋一下吧。
集群(Cluster)
所謂集群是指一組獨(dú)立的計(jì)算機(jī)系統(tǒng)構(gòu)成的一個(gè)松耦合的多處理器系統(tǒng),它們之間通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)進(jìn)程間的通信。應(yīng)用程序可以通過(guò)網(wǎng)絡(luò)共享內(nèi)存進(jìn)行消息傳送,實(shí)現(xiàn)分布式計(jì)算機(jī)。通俗一點(diǎn)來(lái)說(shuō),就是讓若干臺(tái)計(jì)算機(jī)聯(lián)合起來(lái)工作(服務(wù)),可以是并行的,也可以是做備份。
負(fù)載均衡(Load Balance)
網(wǎng)絡(luò)的負(fù)載均衡是一種動(dòng)態(tài)均衡技術(shù),常見(jiàn)的實(shí)現(xiàn)方式是通過(guò)一些工具實(shí)時(shí)地分析數(shù)據(jù)包,掌握網(wǎng)絡(luò)中的數(shù)據(jù)流量狀況,把任務(wù)合理均衡地分配出去。這種技術(shù)基于現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu),提供了一種擴(kuò)展服務(wù)器帶寬和增加服務(wù)器吞吐量的廉價(jià)有效的方法,加強(qiáng)了網(wǎng)絡(luò)數(shù)據(jù)處理能力,提高了網(wǎng)絡(luò)的靈活性和可用性。日常生活中到處都能看到“負(fù)載均衡”,一個(gè)超市的收營(yíng)員高峰期只能服務(wù)10位顧客,當(dāng)做活動(dòng)時(shí)有20位顧客需要服務(wù)的話可能就會(huì)排長(zhǎng)隊(duì),這樣購(gòu)物體驗(yàn)將會(huì)很差(就像客戶抱怨系統(tǒng)/網(wǎng)站訪問(wèn)太慢)。最簡(jiǎn)單的辦法就是再招個(gè)營(yíng)業(yè)員,重新開通一個(gè)出口。負(fù)載均衡的核心就是“分?jǐn)倝毫?rdquo;。
大規(guī)模集群,通常具備以下一些特點(diǎn):
(1)高可靠性(HA)。
利用集群管理軟件,當(dāng)主服務(wù)器故障時(shí),備份服務(wù)器能夠自動(dòng)接管主服務(wù)器的工作,并及時(shí)切換過(guò)去,以實(shí)現(xiàn)對(duì)用戶的不間斷服務(wù)。
(2)高性能計(jì)算(HP)。
即充分利用集群中的每一臺(tái)計(jì)算機(jī)的資源,實(shí)現(xiàn)復(fù)雜運(yùn)算的并行處理,通常用于科學(xué)計(jì)算領(lǐng)域,比如基因分析、化學(xué)分析等。
(3)負(fù)載平衡(LB)。
即把負(fù)載壓力根據(jù)某種算法合理分配到集群中的每一臺(tái)計(jì)算機(jī)上,以減輕主服務(wù)器的壓力,降低對(duì)主服務(wù)器的硬件和軟件要求。
當(dāng)然,以上的這些特點(diǎn),在某些適應(yīng)場(chǎng)合下是需要同時(shí)具備的。常用的集群又分以下幾種:
load balance cluster (負(fù)載均衡集群)
一共有四兄弟開裁縫鋪,生意特別多,一個(gè)人做不下來(lái),老是延誤工期,于是四個(gè)兄弟商量:老大接訂單, 三個(gè)兄弟來(lái)干活。 客戶多起來(lái)之后,老大根據(jù)一定的原則(policy) 根據(jù)三兄弟手上的工作量來(lái)分派新任務(wù)。
High availability cluster(高可用集群)
兩兄弟開早餐鋪,生意不大,但是每天早上7點(diǎn)到9點(diǎn)之間客戶很多并且不能中斷。為了保證2個(gè)小時(shí)內(nèi)這個(gè)早餐鋪能夠保證持續(xù)提供服務(wù),兩兄弟商量幾個(gè)方法:
方法一:平時(shí)老大做生意,老二這個(gè)時(shí)間段在家等候,一旦老大無(wú)法做生意了,老二就出來(lái)頂上,這個(gè)叫做 Active/Standby.(雙機(jī)熱備)
方法二:平時(shí)老大做生意,老二這個(gè)時(shí)候就在旁邊幫工,一旦老大無(wú)法做生意,老二就馬上頂上,這個(gè)叫做Active/Passive.(雙機(jī)雙工)
方法三:平時(shí)老大賣包子,老二也在旁邊賣豆?jié){,老大有問(wèn)題,老二就又賣包子,又賣豆?jié){,老二不行了,老大就又賣包子,又賣豆?jié){.這個(gè)叫做Active/Active (dual Active)(雙機(jī)互備)
包子= application package, 互相照應(yīng)叫做heartbeat, 頂替對(duì)方工作叫做 failover/takeover. 如果兩個(gè)兄弟突然都瞎了聾了,不知道現(xiàn)在對(duì)方到底是否正在干活,都認(rèn)為自己要頂對(duì)方的工作,這個(gè)叫做brain-split, 然后需要第三者,比如他們的老爹來(lái)解決問(wèn)題,這個(gè)叫做tier-breaker, 或者讓他們兩個(gè)的媳婦過(guò)來(lái)拉走其中一個(gè),這個(gè)叫做fency。
high computing clustering (高性能計(jì)算集群)
10個(gè)兄弟一起做手工家具生意,一個(gè)客戶來(lái)找他們的老爹要求做一套非常復(fù)雜的仿古家具,一個(gè)人做也可以做,不過(guò)要做很久很久,為了1個(gè)星期就交出這一套家具,10個(gè)兄弟決定一起做。
老爹把這套家具的不同部分分開交給兒子們作,然后每個(gè)兒子都在做木制家具的加工,***拼在一起叫貨.
老爹是scheduler任務(wù)調(diào)度器,兒子們是compute node. 他們做的工作叫做作業(yè)。
(其實(shí),還有一種,分布式存儲(chǔ)相關(guān)的集群,應(yīng)用于超大規(guī)模網(wǎng)站,云計(jì)算平臺(tái)等等。涉及點(diǎn)存儲(chǔ)方面的,這里就不介紹了)
嚴(yán)格來(lái)講,這些已經(jīng)超過(guò)了一般開發(fā)人員的知識(shí)范疇了,想真正理解和掌握這些并不太容易,有時(shí)候需要真正的實(shí)踐而不是閉門造車。從運(yùn)維人員和系統(tǒng)架構(gòu)師的角度來(lái)看,不僅需要具備豐富的操作系統(tǒng)配置和管理的經(jīng)驗(yàn),更要具備網(wǎng)絡(luò)協(xié)議、存儲(chǔ)等相關(guān)的知識(shí)(懂算法和底層的就更***了)。從開發(fā)人員和軟件架構(gòu)師的角度來(lái)看,需要考慮的重點(diǎn)又不同了。當(dāng)然,遠(yuǎn)遠(yuǎn)不止我所提到的這些。現(xiàn)在的Web應(yīng)用一般都比較依賴于基礎(chǔ)架構(gòu),而越來(lái)越脫離了”純軟件架構(gòu)“的本質(zhì)。集群不是***的,但有時(shí)候確實(shí)相當(dāng)有用。