交換機(jī)是數(shù)據(jù)中心不可缺少的網(wǎng)絡(luò)設(shè)備,在數(shù)據(jù)中心里發(fā)揮著重要作用。在平時(shí)使用和采購(gòu)時(shí),大多數(shù)都關(guān)注交換機(jī)的背板帶寬、端口密度、單端口速度、協(xié)議特性等方面的性能指標(biāo),很少有人去關(guān)注緩存指標(biāo),這是一個(gè)常常被人所忽略的指標(biāo)。
其實(shí),緩存是數(shù)據(jù)中心交換機(jī)的重要性能參數(shù),是衡量一款交換機(jī)設(shè)備性能高低的重要指標(biāo)。交換機(jī)的緩存和通常的緩存概念不同,通常緩存指的是當(dāng)某一硬件要讀取數(shù)據(jù)時(shí),會(huì)首先從緩存中查找需要的數(shù)據(jù),如果找到了則直接執(zhí)行,找不到的話再?gòu)膬?nèi)存中找,顯然緩存中的數(shù)據(jù)查找速度比內(nèi)存中要快得多,這是一個(gè)處于CPU內(nèi)部的一塊內(nèi)存地址空間。
而在交換機(jī)上,緩存就是數(shù)據(jù)交換的緩沖區(qū),有時(shí)又叫做包緩沖區(qū)大小,是一種隊(duì)列結(jié)構(gòu),被交換機(jī)用來(lái)協(xié)調(diào)不同網(wǎng)絡(luò)設(shè)備之間的速度匹配問(wèn)題。突發(fā)數(shù)據(jù)可以存儲(chǔ)在緩沖區(qū)內(nèi),直到被慢速設(shè)備處理為止。
交換機(jī)有三種轉(zhuǎn)發(fā)模式:直通轉(zhuǎn)發(fā)、存儲(chǔ)轉(zhuǎn)發(fā)和無(wú)碎片轉(zhuǎn)發(fā),用的最廣泛的是存儲(chǔ)轉(zhuǎn)發(fā)模式。其實(shí)不管是哪種轉(zhuǎn)發(fā)模式,都要用到緩存,只不過(guò)直通轉(zhuǎn)發(fā)只解析報(bào)文的前幾個(gè)字節(jié)就進(jìn)行轉(zhuǎn)發(fā),存到緩存里的數(shù)據(jù)量小,轉(zhuǎn)發(fā)速度快,但因沒有對(duì)整體數(shù)據(jù)做校驗(yàn),容易轉(zhuǎn)發(fā)錯(cuò)誤報(bào)文。大部分交換機(jī)的片上緩存都不大,一般都是幾MB到幾十MB,雖然單端口帶寬在不到十年的時(shí)間里從1G發(fā)展到了100G,但緩存并沒有很大提升,如果一個(gè)100G端口出現(xiàn)突發(fā)流量,十幾MB就會(huì)出現(xiàn)丟包,顯然在實(shí)際應(yīng)用中會(huì)有限制,除非明確應(yīng)用流量上不要有突發(fā)流量。 那么有人會(huì)有疑問(wèn),既然緩存這么重要,那為何不做的大一些? 其實(shí)以現(xiàn)有的芯片集成技術(shù)應(yīng)該不難實(shí)現(xiàn)。的確,緩存理論上可以通過(guò)芯片工藝設(shè)計(jì)放大,但是過(guò)大的緩存會(huì)影響正常通信狀態(tài)下數(shù)據(jù)包的轉(zhuǎn)發(fā)速度,因?yàn)檫^(guò)大的緩沖空間需要相對(duì)多一點(diǎn)的尋址時(shí)間,并增加設(shè)備的成本,在一些對(duì)延遲要求比較高的應(yīng)用場(chǎng)景中,緩存過(guò)大反而會(huì)起反作用,所以不能簡(jiǎn)單地去擴(kuò)大緩存,要在緩存和延遲兩個(gè)方面做取舍,“魚和熊掌不可得兼”。 當(dāng)然,隨著技術(shù)的進(jìn)步,在盡量不增加延遲的情況下,也可以不斷提升交換機(jī)的緩存能力。受制于時(shí)鐘、總線帶寬的能力,緩存性能難以大幅提升,考慮到功耗、成本的平衡,緩存容量也不會(huì)大幅增加。 有的交換機(jī)還在交換芯片外部掛了一個(gè)DRAM緩存,用來(lái)提升交換機(jī)的緩存能力,這樣延遲可能會(huì)更大,但緩存可以做得很大,達(dá)到1G以上。 緩存十分重要,但我們究竟需要多大的緩存,卻沒有正確答案。巨大的緩存意味著網(wǎng)絡(luò)不會(huì)丟棄任何流量,同時(shí)也意味著網(wǎng)絡(luò)延遲的增加,具體要根據(jù)數(shù)據(jù)中心的業(yè)務(wù)來(lái)選擇。比如在搜索業(yè)務(wù)中,一次搜索要在海量數(shù)據(jù)庫(kù)里尋找結(jié)果,容易產(chǎn)生網(wǎng)絡(luò)突發(fā)流量,甚至造成網(wǎng)絡(luò)擁塞,在這樣的網(wǎng)絡(luò)業(yè)務(wù)中就需要部署緩存大的交換機(jī)設(shè)備;在金融領(lǐng)域,尤其是股票證券交易網(wǎng)絡(luò)中,差一個(gè)納秒都可以帶來(lái)巨大收益或者損失,這樣的領(lǐng)域?qū)W(wǎng)絡(luò)延遲要求非常高,不允許出現(xiàn)擁塞,也就不需要多少緩存,有的金融數(shù)據(jù)中心還要求使用低延遲交換機(jī),轉(zhuǎn)發(fā)延遲控制在納秒級(jí)。
緩存通常都是因?yàn)榫W(wǎng)絡(luò)接口速率不同造成的,流量突然爆發(fā)或者多對(duì)一的流量傳輸。最常見的問(wèn)題是多對(duì)一的流量突然變化。例如,某個(gè)應(yīng)用程序搭建在多個(gè)服務(wù)器集群結(jié)點(diǎn)上。如果其中某個(gè)結(jié)點(diǎn)同時(shí)請(qǐng)求來(lái)自其他所有結(jié)點(diǎn)的數(shù)據(jù),那么所有答復(fù)應(yīng)該在同一時(shí)間到達(dá)。這種情況發(fā)生時(shí),所有網(wǎng)絡(luò)流量洪水會(huì)涌向請(qǐng)求者的交換機(jī)端口。如果交換機(jī)沒有足夠的出口緩沖區(qū),那么它可能會(huì)拋棄一些流量,或者增加應(yīng)用程序延遲。足夠的網(wǎng)絡(luò)緩沖區(qū)可以防止因?yàn)榈图?jí)別協(xié)議造成的丟包或網(wǎng)絡(luò)延遲。 緩存對(duì)交換機(jī)來(lái)說(shuō)是一個(gè)整體的概念,整個(gè)交換芯片共享緩存,每個(gè)端口分多少都是可以調(diào)整的,交換機(jī)上對(duì)這些緩存是有管理的,于是就出現(xiàn)了兩種模式:QOS模式和FC模式。硬件上對(duì)每個(gè)報(bào)文都要存儲(chǔ)后,處理完再轉(zhuǎn)發(fā),但存儲(chǔ)空間都是有限的,因此當(dāng)緩存不足時(shí),就會(huì)出現(xiàn)丟包。 QOS模式下,發(fā)生擁塞時(shí)不會(huì)發(fā)出流控幀,但可以對(duì)端口上不同優(yōu)先級(jí)的流量進(jìn)行調(diào)度,一定要丟包,優(yōu)先丟掉優(yōu)先級(jí)低的包,通過(guò)設(shè)置相關(guān)配置,可以做到選擇性丟包。而在FC模式下,發(fā)生擁塞時(shí)會(huì)發(fā)出流控幀(需要手工配置,默認(rèn)一般設(shè)備都不開啟,若開啟對(duì)端設(shè)備擁塞也會(huì)發(fā)流控幀,設(shè)備要響應(yīng)處理流控幀,這將極大消耗設(shè)備端口的緩存)。 QOS模式所有緩存被所有端口共享,F(xiàn)C模式緩存被均勻固定的分配給每個(gè)端口,因此QOS模式單個(gè)端口可能會(huì)獲得更多的存儲(chǔ)能力,減少了丟包,但帶來(lái)的影響是可影響其它端口低優(yōu)先級(jí)報(bào)文的傳輸。 現(xiàn)在的交換機(jī)基本采用的是兩種模式的結(jié)合,即為每個(gè)端口固定分配一些緩存,保證一定的轉(zhuǎn)發(fā)帶寬,同時(shí)再留一部分緩存作為公共部分,當(dāng)有端口固定分配的部分不夠用時(shí),就可以使用公共部分,為防止一個(gè)端口擁塞將所有共享緩存占光,每個(gè)端口還可以設(shè)定一個(gè)最大允許占用的緩存,以此保證多端口擁塞時(shí),公共緩存部分依然有剩余,所以緩存容量雖然不大,但是管理上是比較靈活的。不過(guò),由于緩存管理是交換機(jī)非常底層的東西,調(diào)整不大對(duì)設(shè)備的轉(zhuǎn)發(fā)影響很大,所以這部分調(diào)整一般都是在設(shè)備出廠之前調(diào)好,默認(rèn)是最為通用的方式,有特殊應(yīng)用的場(chǎng)景,再根據(jù)實(shí)際情況由專業(yè)技術(shù)人員來(lái)調(diào)整。