簡(jiǎn)述:給大家分享下關(guān)于CDN的東西,總共分為2個(gè)大部分:原理、詳解。首先說(shuō)一下CDN的基本原理部分,主要分4塊來(lái)描述:CDN的由來(lái)、調(diào)度是怎么做的、緩存是什么、關(guān)于安全。什么是CDN?這是一個(gè)做過(guò)CDN之后的拓?fù)鋱D,里面有幾個(gè)概念需要明確一下:O
和大家分享一下CDN總共分為兩部分:原理、詳解。
首先說(shuō)一下CDN基本原理部分主要分為四部分:CDN原因,如何調(diào)度,什么是緩存,什么是安全。
什么是CDN?
這是一個(gè)做過(guò)CDN在拓?fù)鋱D之后,有幾個(gè)概念需要澄清:
OriginServer:源站,也就是做CDN以前的客戶真正的服務(wù)器;
User:訪問(wèn)者,即想要訪問(wèn)網(wǎng)站的網(wǎng)民;
EdgeServer:CDN不僅僅是服務(wù)器“邊緣服務(wù)器”,之后再細(xì)說(shuō);s/指/;
LastMile:最后一公里,網(wǎng)民訪問(wèn)了他CDN服務(wù)器之間的路徑。
我們平時(shí)用的DNS一般稱為服務(wù)器LDNS,在分析域名時(shí),通常有兩種情況,一種是域名DNS有記錄,另一種情況是沒(méi)有記錄,處理過(guò)程不同。
如果您訪問(wèn)163域名,LDNS上面有緩存記錄,會(huì)直接記錄IP地址直接給你。如果沒(méi)有緩存記錄,它將一步一步地要求后面的服務(wù)器,然后將所有數(shù)據(jù)匯總給最終客戶。
當(dāng)您訪問(wèn)163地址時(shí),事實(shí)上,如果沒(méi)有內(nèi)容,它將不得不在后面獲取數(shù)據(jù)。這個(gè)過(guò)程術(shù)語(yǔ)被稱為遞歸。它將首先要求世界上13個(gè)根域服務(wù)器com域名在哪里,然后根域服務(wù)器一步一步回答。這個(gè)過(guò)程比較復(fù)雜。如果你感興趣,你可以查看相關(guān)信息,這里就不贅述了。
DNS調(diào)度
很多人一定很好奇如何調(diào)度和定位。
其實(shí)也是通過(guò)的LDNS例如,如果您是廣東電信客戶,請(qǐng)查看具體地址。DNS當(dāng)服務(wù)器進(jìn)行遞歸時(shí),訪問(wèn)某個(gè)服務(wù)器CDN廠商的GRB,他可以看到來(lái)自世界各地的調(diào)度系統(tǒng)的來(lái)源LDNS。假設(shè)用戶和LDNS使用同一區(qū)域的服務(wù)器,他會(huì)間接認(rèn)為用戶也是廣東電信。
再舉一個(gè)例子,的用戶使用它DNS地址一般由北京聯(lián)通的服務(wù)器自動(dòng)分配。當(dāng)該服務(wù)器進(jìn)行遞歸時(shí),調(diào)度服務(wù)器將看到該請(qǐng)求來(lái)自北京聯(lián)通LDNS服務(wù)器將分配北京聯(lián)通的服務(wù)器地址,然后讓北京聯(lián)通的用戶直接訪問(wèn)北京聯(lián)通的服務(wù)器地址,實(shí)現(xiàn)準(zhǔn)確的區(qū)域調(diào)度。
從這個(gè)調(diào)度理論來(lái)看,我們可以發(fā)現(xiàn)假設(shè)用戶使用的問(wèn)題LDNS地址和你在同一個(gè)區(qū)域,所以此時(shí)我們的調(diào)度可能是正確的。但例如,如果你是北京聯(lián)通的用戶,但使用廣東電信LDNS如果是,就會(huì)讓GRB系統(tǒng)誤以為你是廣東電信的客戶,所以會(huì)誤調(diào)度過(guò)去。
我以前在社區(qū)上網(wǎng)過(guò)。因?yàn)槲业穆酚善饔袉?wèn)題,我設(shè)置了202年.106.0.北京聯(lián)通20DNS服務(wù)器地址,后來(lái)去深圳出差,訪問(wèn)大網(wǎng)站發(fā)現(xiàn)比較慢。經(jīng)過(guò)分析,我發(fā)現(xiàn)我設(shè)置的原始地址DNS地址是北京聯(lián)通,而我在廣東和深圳使用的網(wǎng)絡(luò)都是電信接入的,但分配給我的是北京聯(lián)通的地址,然后我用電信線訪問(wèn)北京聯(lián)通的地址,肯定會(huì)很慢。
因?yàn)閯偛耪f(shuō)的DNS調(diào)度機(jī)制存在一些問(wèn)題,因此在某些情況下,我們將使用第二種調(diào)度機(jī)制,稱為HTTP的調(diào)度。
了解http協(xié)議的人知道,在http協(xié)議中有一個(gè)叫做302跳轉(zhuǎn)的功能,它的實(shí)現(xiàn)并不意味著你訪問(wèn)一個(gè)URL,然后立即吐出你想要的數(shù)據(jù),而是吐出一個(gè)302返回信令,頭部會(huì)告訴你,有一個(gè)location目標(biāo),這個(gè)location告訴你下一步該怎么辦,具體的調(diào)度是通過(guò)location來(lái)實(shí)現(xiàn)的。
即使是我用的DNS和我不在同一個(gè)區(qū)域,但是當(dāng)我訪問(wèn)的時(shí)候httpserver的時(shí),這個(gè)server是由CDN公司提供的??蛻粼L問(wèn)server雖然通過(guò)了DNS這種方式無(wú)法獲得客戶的真實(shí)性IP但是如果你訪問(wèn)地址,httpserver,他一定能直接看到客戶的真實(shí)IP,用這種方法可以調(diào)度糾偏,可以直接給你302,然后location攜帶真正離你最近的一個(gè)CDNserver。
這種調(diào)度的優(yōu)點(diǎn)是準(zhǔn)確的,但也有缺點(diǎn),需要一次TCP三次握手建連,他不像DNS然后直接要求數(shù)據(jù)包給出反饋OK他需要一次TCP三次握手建連。
第二,你是如何訪問(wèn)的?http的服務(wù)器?假如你以前通過(guò)了DNS調(diào)度過(guò)去的,其實(shí)前面的那個(gè)DNS也是省不了,國(guó)內(nèi)沒(méi)有辦法做到anycast也就是說(shuō),沒(méi)有辦法直接訪問(wèn)一個(gè)眾所周知的大人物IP所以,一般都是通過(guò)的DNS來(lái)進(jìn)行第一次調(diào)度,然后用http第二次糾偏。在這種情況下,你可以想象,如果你下載了一個(gè)大文件,比如一部電影,但你訪問(wèn)了一個(gè)頁(yè)面元素,例如,這張照片只有幾張k,所以,其實(shí)你的調(diào)度時(shí)間已經(jīng)占用了很多成分。事實(shí)上,這種302調(diào)度是一種不誤砍柴的計(jì)劃。如果你以后有很多工作要做,比如下載一部電影需要很長(zhǎng)時(shí)間,那么你的調(diào)度是準(zhǔn)確的,即使你花一點(diǎn)時(shí)間。但如果你的后續(xù)訪問(wèn)結(jié)束了,那么你的調(diào)度就沒(méi)有多大意義了。
除了DNS調(diào)度和http除了302調(diào)度,還有一種調(diào)度方式,叫做httpDNS調(diào)度的原理是通過(guò)正常調(diào)度http請(qǐng)求,發(fā)一個(gè)get請(qǐng)求,然后以參數(shù)的形式攜帶一個(gè)我想分析的域名,然后通過(guò)數(shù)據(jù)庫(kù)查詢服務(wù)器,然后通過(guò)http正常響應(yīng),你要求的IP通過(guò)http協(xié)議給你,這個(gè)協(xié)議的一個(gè)特點(diǎn)是雙方都必須支持,因?yàn)檫@個(gè)模式是非標(biāo)準(zhǔn)的。沒(méi)有人RFC文的客戶端或您的操作系統(tǒng)自然支持這種機(jī)制。沒(méi)有人RFC文據(jù)文檔,您的客戶端或您的操作系統(tǒng)自然支持這種機(jī)制。這有點(diǎn)像一個(gè)API這樣,如果要實(shí)現(xiàn),雙端都必須支持。
一般來(lái)說(shuō),手機(jī)上有第三種調(diào)度應(yīng)用場(chǎng)景APP端,在APP在軟件中,如果你想訪問(wèn)一些可能被運(yùn)營(yíng)商劫持的問(wèn)題,那么在這個(gè)劫持問(wèn)題之后還有很長(zhǎng)的時(shí)間要談。這種劫持可能用于避免劫持httpDNS調(diào)度方法APP程序是你自己寫的,所以實(shí)現(xiàn)這么簡(jiǎn)單API借口很容易。
CDN的接入
有人可能會(huì)問(wèn),你說(shuō)了這么多DNS和具體CDN調(diào)度有什么關(guān)系?
因?yàn)槲以谡f(shuō)你得到了一個(gè)具體的DNS當(dāng)域名地址時(shí),他給你的是一個(gè)IP地址CDN他以前給你的IP原來(lái)沒(méi)有做地址CDN原始服務(wù)器地址。但是如果你做過(guò)的話CDN如果你發(fā)現(xiàn)你最終得到了這個(gè)IP地址是CDN節(jié)點(diǎn),而不是真正的原始服務(wù)器。
我們通常說(shuō)得到一個(gè)IP這實(shí)際上是地址DNS的A記錄。DNS有很多不同的記錄,比如A記錄,負(fù)責(zé)給你一個(gè)IP比如像CNAME記錄給你的是域名的別名。當(dāng)然還有很多其他記錄,比如TXT的記錄、MX記錄等等。這個(gè)跟著CDN沒(méi)關(guān)系,這里就不細(xì)說(shuō)了,有興趣查一下DNS相關(guān)文件。
上圖很明顯。CDN介入后的效果圖。linux里有一個(gè)命令叫dig,它可以直接列出要訪問(wèn)域名的具體分析。然后,通過(guò)這張圖,你可以看到,當(dāng)你想訪問(wèn)的時(shí)候www.mubashirfilms.com雖然他最終給出了一個(gè)IP但實(shí)際上,它經(jīng)歷了兩次地址CNAME記錄。第一次CNAEM記錄就是我們之前說(shuō)的。CDN的GRB,他拿到了這個(gè)數(shù)據(jù),就可以間接知道你的這個(gè)LOCODNS從哪里來(lái),然后間接給你定位。以這張圖為例,他實(shí)際上第一次跳到網(wǎng)速地址,第二次跳是一個(gè)分配網(wǎng)速的平臺(tái),其他平臺(tái)分開(kāi)IP給最終客戶。
Cache系統(tǒng)——緩存系統(tǒng)
除DNS除了調(diào)度,在CDN還有一個(gè)很大的重頭戲Cache系統(tǒng),即緩存系統(tǒng)。它用來(lái)緩存可以緩存的東西CDN邊緣節(jié)點(diǎn),當(dāng)?shù)诙€(gè)人訪問(wèn)同一節(jié)點(diǎn),同一特定電影或MP3點(diǎn)不用再經(jīng)過(guò)了CDN鏈路回到真正的源站去拿數(shù)據(jù),而是由邊緣節(jié)點(diǎn)直接給數(shù)據(jù)。
在Cache該系統(tǒng)包含許多技術(shù),如高效的數(shù)據(jù)結(jié)構(gòu)和算法,用空間換時(shí)間,多級(jí)緩存用熱量區(qū)分,前端是SSD后面是機(jī)械硬盤等等。很多細(xì)節(jié)就不說(shuō)了。如果你感興趣,以后可以交流。
對(duì)于Cache就系統(tǒng)而言,有兩種不同的工作狀態(tài)。第一種工作狀態(tài)是所謂的命中(hit),二是沒(méi)有命中(miss)。如果命中,通過(guò)檢索直接找到磁盤或內(nèi)存上的數(shù)據(jù),直接將數(shù)據(jù)吐出給客戶,而不是從后面獲取數(shù)據(jù)。這樣,它就有了完美的加速效果。
第二種是在miss時(shí),其實(shí),miss的時(shí)候跟hit唯一的區(qū)別是,當(dāng)我發(fā)現(xiàn)我的機(jī)器上沒(méi)有這樣的資源時(shí),我會(huì)去我的upstream(上游)拿數(shù)據(jù)。拿完這個(gè)數(shù)據(jù),除了第一時(shí)間給客戶,還會(huì)在硬盤上緩存一個(gè)。如果硬盤空間滿了,會(huì)用一系列替換方法替換最舊最冷的數(shù)據(jù)。
提到了upstream,原因不是原始服務(wù)器,因?yàn)楫?dāng)客戶訪問(wèn)時(shí)CDN在節(jié)點(diǎn)中,他發(fā)現(xiàn)上面沒(méi)有數(shù)據(jù),不是直接從原始服務(wù)器上拿走,而是通過(guò)他的另一個(gè)CDN節(jié)點(diǎn),然后通過(guò)middlemell一些數(shù)據(jù)傳輸?shù)姆绞健H缓髐pstream這一層,從原始服務(wù)器中獲取數(shù)據(jù),通過(guò)一系列加速手段,快速向我們的邊緣節(jié)點(diǎn)發(fā)送數(shù)據(jù),然后向最終客戶發(fā)送數(shù)據(jù)。在過(guò)程當(dāng)中upstream和downstream這兩層將緩存數(shù)據(jù)。通過(guò)這種樹形結(jié)構(gòu),如多個(gè)邊緣節(jié)點(diǎn),然后匯總到一個(gè)或多個(gè)副層結(jié)點(diǎn),流量可以逐漸收斂。
提到Cache我相信這里的很多朋友都來(lái)自同一個(gè)行業(yè)。有些人會(huì)說(shuō),這并不難。只要你有網(wǎng)絡(luò)和運(yùn)維人員。事實(shí)上,我不這么認(rèn)為,因?yàn)槿绻阆氚阉龊?,那就很難了。例如,你在考慮我列出的許多技術(shù)嗎?
舉幾個(gè)例子,你有多個(gè)隊(duì)列和網(wǎng)卡嗎?CPU親和綁定的親和綁定您是否改進(jìn)了磁盤調(diào)度算法?另外,你存放的時(shí)候還是用的?等等都很講究。內(nèi)核調(diào)整包括結(jié)構(gòu)和CPU的綁定,CPU使用多級(jí)緩存,然后使用你的處理,或者使用標(biāo)準(zhǔn)的機(jī)制。再比如編譯程序是用英特爾編譯還是用英特爾編譯,然后你會(huì)做很多調(diào)用。例如,一個(gè)非常簡(jiǎn)單的字符串副本,然后你使用,你仍然使用匯編寫,你仍然使用很多細(xì)節(jié)等等。
還有很多關(guān)于高性能的研究。如果你感興趣,你可以以后和我進(jìn)一步溝通。我想表達(dá)的一點(diǎn)是,它似乎是這樣做的CDN很簡(jiǎn)單,入門真的很簡(jiǎn)單,但真的很難做好。
安全問(wèn)題
在沒(méi)有做CDN你的網(wǎng)站以前可能會(huì)遭受各種攻擊。然后攻擊通常分為兩種,第一種是蠻力攻擊,大量的帶寬無(wú)法抵抗,最終導(dǎo)致拒絕服務(wù),另一種是技能攻擊。
作為CDN就你的原始服務(wù)器而言,你已經(jīng)使用了IP隱藏。這樣,當(dāng)攻擊者訪問(wèn)你的域名時(shí),并不是你真正的服務(wù)器。當(dāng)他訪問(wèn)時(shí)CDN沒(méi)有辦法控制節(jié)點(diǎn)CDN換句話說(shuō),即使你有能力倒節(jié)點(diǎn),CDN的比如10g節(jié)點(diǎn)或40g所有的大節(jié)點(diǎn)都被打倒了,但是因?yàn)镃DN自然分布式部署也難以同時(shí)快速將全國(guó)所有分布式部署方式CDN所有邊緣節(jié)點(diǎn)都癱瘓了。
另外,還有一種攻擊是針對(duì)你的DNS假如你的GRB癱瘓會(huì)導(dǎo)致整個(gè)調(diào)度系統(tǒng)失靈。如果調(diào)動(dòng)系統(tǒng)失靈,即使你CDN的Cacheserver請(qǐng)求仍然可以正常接受,但由于流量無(wú)法調(diào)度。所以,你需要DNS層做很多保護(hù)機(jī)制,比如高性能DNS或分布式部署等。
技能攻擊可以打倒你的原針或者讓你的網(wǎng)頁(yè)出錯(cuò),而不需要大量的流量。比如注入、掛馬甚至更嚴(yán)重的會(huì)直接拖走你的數(shù)據(jù)庫(kù)等等。那么作為CDN例如,許多制造商實(shí)際上已經(jīng)開(kāi)始具備這種技能保護(hù)能力,例如WAF(WebApplicationFierwall),就是應(yīng)用層防火墻,他可以直接去解析你的請(qǐng)求內(nèi)容,分析內(nèi)容是否有惡意性,如有惡意性的話去進(jìn)行過(guò)濾,報(bào)警等一系列措施來(lái)保證你的原始服務(wù)器的安全。
第二部分主要是優(yōu)化網(wǎng)絡(luò)層和架構(gòu)Cache選擇、性能分析等。CDN深入分析了基本原理。
原始的CDN其實(shí)是ContentDeliveryNetwork這三個(gè)詞的縮寫,即內(nèi)容分發(fā)網(wǎng)絡(luò)。但我認(rèn)為應(yīng)該是candosomethingonNetwork。CDN概念是加速,所以我們盡一切可能做各種優(yōu)化,從一層到七層優(yōu)化,以達(dá)到最終的優(yōu)化效果。
為什么說(shuō)一層是優(yōu)化,其實(shí)是硬件,你的服務(wù)器選擇是優(yōu)化。ssd,還是用saker你應(yīng)該用硬盤pce卡是應(yīng)該用卡ssd。你的CPU要考慮應(yīng)該用到最強(qiáng)還是阿童木等。
至于二樓,鏈路層的優(yōu)化是指資源。例如,如何選擇機(jī)房。
三層路由層指你middlemell以下是真正選擇道路的具體細(xì)節(jié)。
四層是指?jìng)鬏攲拥膬?yōu)化,我們的一般業(yè)務(wù)都是TCP,所以說(shuō)這里面就可以明確的說(shuō)這里是指TCP優(yōu)化。七層也可以優(yōu)化。比如你強(qiáng)行壓縮內(nèi)容,甚至改變壓縮水平壓縮。
作為CDN基本上,我列出了一些可能使用的技術(shù),大約10種。例如,附近的分布、戰(zhàn)略緩存、傳輸優(yōu)化、鏈路層優(yōu)化,包括內(nèi)容提取和合并回源。然后持續(xù)連接池,主動(dòng)壓縮,當(dāng)您的原始服務(wù)器掛斷時(shí),您如何確??蛻裟軌蚩吹皆S多細(xì)節(jié),如數(shù)據(jù)。
事實(shí)上,我們可以把路徑優(yōu)化抽象成解決真正問(wèn)題的最短路徑最佳解決方案的想法。當(dāng)你需要從a點(diǎn)傳輸數(shù)據(jù)到b點(diǎn)時(shí),你通常會(huì)經(jīng)過(guò)一個(gè)c點(diǎn),而不是直接從a到b更快?;ヂ?lián)網(wǎng)上有一個(gè)三角形原理,不同于地理位置原理。雖然有一定的相關(guān)性,但還是有區(qū)別的,可能從a經(jīng)過(guò)c到b直接到b比a快。
在數(shù)據(jù)傳輸中,有許多綜合因素需要考慮。到目前為止,包括阿克麥在內(nèi)的完全系統(tǒng)自動(dòng)化很難進(jìn)行鏈路選擇和切換。在調(diào)度過(guò)程中,許多公司都有專門的團(tuán)隊(duì)來(lái)管理流量調(diào)度。很多系統(tǒng)可能只起到支撐和參考的作用,真正需要決策的是人。因?yàn)槟阈枰紤]太多的元素,比如帶寬成本、帶寬節(jié)點(diǎn)冗余、服務(wù)器承載能力、客戶敏感性應(yīng)該切割什么等等。
剛才談到了傳輸層的優(yōu)化TCP優(yōu)化,在現(xiàn)今的互聯(lián)網(wǎng)里,TCP優(yōu)化是實(shí)現(xiàn)客戶體驗(yàn)最直接的方式。
騰佑科技(www.mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個(gè)國(guó)家版權(quán)局認(rèn)證。公司自成立以來(lái),一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計(jì)算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開(kāi)發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產(chǎn)品推薦