網(wǎng)站負(fù)載能力和訪問(wèn)速度優(yōu)化的常用技術(shù)總結(jié)
來(lái)源:易賢網(wǎng) 閱讀:1151 次 日期:2016-07-07 09:14:54
溫馨提示:易賢網(wǎng)小編為您整理了“網(wǎng)站負(fù)載能力和訪問(wèn)速度優(yōu)化的常用技術(shù)總結(jié)”,方便廣大網(wǎng)友查閱!

組件分離

DNS負(fù)載均衡

不同的web內(nèi)容分布到不同的服務(wù)器上,并劃分子域,利用DNS將請(qǐng)求自然轉(zhuǎn)移到不同的服務(wù)器上。主要可以分為兩大內(nèi)容:

1.動(dòng)態(tài)內(nèi)容,CPU、IO密集型

2.靜態(tài)內(nèi)容,IO密集型

通過(guò)在DNS中配置多個(gè)A記錄,將請(qǐng)求轉(zhuǎn)移到集群中不同的服務(wù)器,這有助于具有地域性問(wèn)題的大型web站點(diǎn)上,DNS可以使用戶就近訪問(wèn)相應(yīng)的web服務(wù)器。像BIND這樣的DNS服務(wù)軟件提供豐富的調(diào)度策略。但是,如果集群中的主機(jī)出現(xiàn)故障的話,需要更新DNS緩存,這通常需要一定的時(shí)間。另外,客戶端也可以通過(guò)設(shè)置host來(lái)繞開(kāi)DNS調(diào)度。

跨域共享cookie:將cookie的范圍擴(kuò)大到父域。

HTTP重定向

通過(guò)使客戶端重定向,來(lái)分散和轉(zhuǎn)移請(qǐng)求壓力,比如一些下載服務(wù)通常都有幾個(gè)鏡像服務(wù)器。

分布式緩存

無(wú)法使用頁(yè)面級(jí)別緩存時(shí),需要考慮直接緩存數(shù)據(jù),比如使用memcached作為緩存。此時(shí),需要考慮并發(fā)寫(xiě)memcached的問(wèn)題。 另外,當(dāng)memcached橫向規(guī)模擴(kuò)大,服務(wù)器數(shù)量增加時(shí),需要一種對(duì)應(yīng)算法,能夠使應(yīng)用程序知道應(yīng)該鏈接哪個(gè)memcached服務(wù)器(比如,取模運(yùn)算)。分布式緩存能夠自動(dòng)重建緩存,不必?fù)?dān)心down機(jī)。

負(fù)載均衡

負(fù)載均衡就是將請(qǐng)求分散,這涉及到應(yīng)當(dāng)如何設(shè)計(jì)調(diào)度策略,以讓集群發(fā)揮最大的性能。當(dāng)集群中的主機(jī)能力相當(dāng)時(shí)應(yīng)當(dāng)盡量平均調(diào)度,能力不均時(shí)應(yīng)當(dāng)能者多勞。隨著問(wèn)題的復(fù)雜,要時(shí)刻關(guān)注調(diào)度的性能,不要讓調(diào)度成為性能瓶頸。

反向代理負(fù)載均衡

反向代理服務(wù)器工作在HTTP層,類似代理服務(wù)器,與普通的代理服務(wù)器不同的是,服務(wù)器在代理的后端,而不是客戶端在代理的后端,這類似于NAT,只是NAT工作在網(wǎng)絡(luò)層。同樣是負(fù)載均衡,反向代理服務(wù)器強(qiáng)調(diào)“轉(zhuǎn)發(fā)”而不是“轉(zhuǎn)移”,因?yàn)樗粌H要轉(zhuǎn)發(fā)客戶端的請(qǐng)求,還要轉(zhuǎn)發(fā)服務(wù)端的響應(yīng)??梢杂米鞣聪虼矸?wù)器的軟件有Nginx、lighttp、Apache,另外目前也有一些專業(yè)的代理轉(zhuǎn)發(fā)設(shè)備能夠工作在應(yīng)用層,例如A10。

使用代理轉(zhuǎn)發(fā)要注意以下問(wèn)題:

由于反向代理的轉(zhuǎn)發(fā)特性,使得代理本身很可能成為性能瓶頸。一般對(duì)于CPU密集型請(qǐng)求,使用代理比較合適,如果是IO密集型的話,這種集群方式很可能無(wú)法發(fā)揮最大性能

在代理上要開(kāi)啟健康檢查,及時(shí)發(fā)現(xiàn)集群中的故障機(jī),從而調(diào)整轉(zhuǎn)發(fā)策略,這通常比DNS方式實(shí)時(shí)性更好

黏滯會(huì)話:對(duì)于啟動(dòng)session保存用戶信息,或者后端服務(wù)器使用動(dòng)態(tài)內(nèi)容緩存的應(yīng)用,必須將用戶在一段會(huì)話中的的請(qǐng)求保持在同一臺(tái)服務(wù)器上。代理服務(wù)器一般支持類似的配置。然而,盡量不要使應(yīng)用過(guò)于本地化,比如可以使用cookie保存用戶數(shù)據(jù),或者分布式Session或分布式緩存。

IP負(fù)載均衡

字面上看,便是利用網(wǎng)絡(luò)層進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),類似NAT網(wǎng)關(guān)。然而,使用網(wǎng)關(guān)轉(zhuǎn)發(fā)在帶寬上可能出現(xiàn)瓶頸,因?yàn)槌隹谥挥幸粋€(gè),所以出口的帶寬要求較高。Linux中的Netfilter模塊可以通過(guò)iptables的配置。比如:對(duì)外網(wǎng)端口8001的請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)某臺(tái)服務(wù)器,而對(duì)外網(wǎng)端口8002的請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)另一臺(tái)服務(wù)器。這種方式簡(jiǎn)單易行,但是無(wú)法對(duì)調(diào)度做太多配置。LVS-NAT同樣是Linux中的在網(wǎng)絡(luò)層進(jìn)行轉(zhuǎn)發(fā)的方式,與Netfilter不同,它支持一些動(dòng)態(tài)調(diào)度算法,比如最小鏈接、帶權(quán)重的最小鏈接、最短期望延遲等。

直接路由

直接路由是通過(guò)調(diào)度器修改數(shù)據(jù)包的目的MAC地址,轉(zhuǎn)發(fā)請(qǐng)求數(shù)據(jù)包,但是響應(yīng)數(shù)據(jù)包可以直接發(fā)送給外網(wǎng)的方式。這樣做顯而易見(jiàn)的好處就是無(wú)需擔(dān)心網(wǎng)關(guān)瓶頸,但是實(shí)際的服務(wù)器和調(diào)度服務(wù)器都需要鏈接在WAN交換機(jī)上,并且擁有獨(dú)立的外網(wǎng)IP地址。

這種方式的工作原理略微復(fù)雜:

首先每臺(tái)服務(wù)器都需要設(shè)置一個(gè)IP別名,這個(gè)IP別名是面向客戶端的一個(gè)虛擬IP,只有代理服務(wù)器對(duì)這個(gè)IP別名的ARP請(qǐng)求做出響應(yīng),這樣客戶端發(fā)給這個(gè)IP的請(qǐng)求包首先會(huì)到代理服務(wù)器。然后代理服務(wù)器將這個(gè)請(qǐng)求包的目的MAC地址填寫(xiě)為實(shí)際服務(wù)器的MAC地址(通過(guò)某種調(diào)度算法決定目的服務(wù)器),由于目標(biāo)服務(wù)器也具有這個(gè)IP別名,因此,轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)包能夠被實(shí)際的服務(wù)器接收并處理。最后由于數(shù)據(jù)包的源IP地址還是客戶端請(qǐng)求的IP地址,因此,實(shí)際的服務(wù)器將通過(guò)交換機(jī)直接將響應(yīng)包轉(zhuǎn)發(fā)給客戶端而無(wú)需通過(guò)代理服務(wù)器。

Linux下可以通過(guò)LVS-DR實(shí)現(xiàn)直接路由方式

IP隧道

IP隧道的意思是,調(diào)度器將原始的IP數(shù)據(jù)包封裝在新的IP數(shù)據(jù)包中,以實(shí)現(xiàn)調(diào)度,實(shí)際的服務(wù)器可以將響應(yīng)數(shù)據(jù)包直接轉(zhuǎn)發(fā)給用戶端。

共享文件系統(tǒng)

對(duì)于一些簡(jiǎn)單的提供文件下載的服務(wù)(包括html中靜態(tài)資源等),自然要考慮利用集群來(lái)減壓,但是如何使這些資源在集群中的主機(jī)上同步呢。

NFS

一種方案是讓這些主機(jī)從同一個(gè)地方取數(shù)據(jù)。比如采用NFS(Network File System),基于PRC。這種方式簡(jiǎn)單易行,但是由于NFS服務(wù)器本身的磁盤(pán)吞吐率,或者并發(fā)處理能力以及帶寬等問(wèn)題,往往很有局限性。

冗余分發(fā)

另一個(gè)方案就是在主機(jī)上冗余存儲(chǔ)資源,這樣主機(jī)無(wú)需訪問(wèn)共享文件系統(tǒng),只需讀取本地磁盤(pán)上的資源即可。但是這也帶來(lái)了一個(gè)同步的問(wèn)題,如何同步這些數(shù)據(jù)呢:

主動(dòng)分發(fā)式,還分為單級(jí)分發(fā)和多級(jí)分發(fā),分發(fā)可以借助SCP、SFTP、HTTP擴(kuò)展協(xié)議WebDAV

單級(jí)分發(fā):通過(guò)一次分發(fā),就達(dá)到目的,這樣的方案簡(jiǎn)單易行,但是性能瓶頸會(huì)出現(xiàn)在磁盤(pán)壓力和網(wǎng)絡(luò)帶寬,難以擴(kuò)展

多級(jí)分發(fā):通過(guò)多次分發(fā),才達(dá)到目的地,這樣的方案能夠分散磁盤(pán)壓力和網(wǎng)絡(luò)帶寬壓力,而且容易擴(kuò)展,壞處是成本高

被動(dòng)同步式容易理解,可以使用rsync,rsync同步時(shí)是根據(jù)最后更新時(shí)間進(jìn)行判定是否需要同步的條件的,因此,如果一個(gè)文件夾中有的文件數(shù)量太多的話,rsync掃描的時(shí)間就很長(zhǎng)了,可以通過(guò)給文件夾設(shè)置最后更新時(shí)間,并合理的規(guī)劃文件目錄,來(lái)加快rsync的掃描時(shí)間。即使不使用rsync,自己開(kāi)發(fā)同步程序也可以借助這樣的思想來(lái)提升性能。

分布式文件系統(tǒng)

分布式文件系統(tǒng)工作在用戶進(jìn)程層面上,它是一個(gè)管理文件的平臺(tái),內(nèi)部維護(hù)冗余,檢索,追蹤、調(diào)度等工作,通常包含一個(gè)物理層面的組織結(jié)構(gòu)和邏輯層面的組織結(jié)構(gòu)。物理層面的組織結(jié)構(gòu)由分布式文件系統(tǒng)自行維護(hù),邏輯層面的組織結(jié)構(gòu)面向用戶。其中“追蹤器”起到了關(guān)鍵的作用。

MogileFS就是一個(gè)開(kāi)源分布式文件系統(tǒng),用Perl編寫(xiě),包含追蹤器、存儲(chǔ)節(jié)點(diǎn)、管理工具,它使用MySQL分布式文件系統(tǒng)的所有信息、使用WebDAV實(shí)現(xiàn)文件復(fù)制。其他著名的還有Hadoop。

每個(gè)文件由一個(gè)key定義,需要讀取文件時(shí),指定一個(gè)key,追蹤器會(huì)返回一個(gè)實(shí)際的路徑,在訪問(wèn)這個(gè)地址即可獲得文件。甚至可以將這個(gè)key對(duì)應(yīng)的path用分布式緩存緩存起來(lái),這樣可以減少追蹤器的查詢開(kāi)銷,但這樣也會(huì)失去分布式文件系統(tǒng)的調(diào)度策略的優(yōu)越性。另外,可以利用支持reproxy的反向代理服務(wù)器(比如:Perlbal)讓路徑重定向的工作由反向代理服務(wù)器完成。

數(shù)據(jù)庫(kù)擴(kuò)展

1.主從復(fù)制,讀寫(xiě)分離

這種方式是指利用數(shù)據(jù)庫(kù)的復(fù)制或鏡像功能,同時(shí)在多臺(tái)數(shù)據(jù)庫(kù)上保存相同的數(shù)據(jù),并且將讀操作和寫(xiě)操作分開(kāi),寫(xiě)操作集中在一臺(tái)主數(shù)據(jù)庫(kù)上,讀操作集中在多臺(tái)從數(shù)據(jù)庫(kù)上,對(duì)于讀取比寫(xiě)更多的站點(diǎn)適合使用這種方式。如果不想在應(yīng)用程序?qū)用婢S護(hù)這種分離映射,那么可以使用數(shù)據(jù)庫(kù)反向代理來(lái)自動(dòng)完成對(duì)讀寫(xiě)的分離。

2.垂直分區(qū)

對(duì)于不需要進(jìn)行聯(lián)合查詢的數(shù)據(jù)表可以分散到不同的數(shù)據(jù)庫(kù)服務(wù)器上,這稱為垂直分區(qū);當(dāng)然每個(gè)分區(qū)自身也可以使用讀寫(xiě)分離。

3.水平分區(qū)

將同一個(gè)表的記錄拆分到不同的表甚至是服務(wù)器上,稱為水平分區(qū),這往往需要一個(gè)穩(wěn)定的算法來(lái)保證讀取時(shí)能正確從不同的服務(wù)器上取得數(shù)據(jù),比如簡(jiǎn)單的對(duì)ID取模、范圍劃分、亦或者是保存映射關(guān)系。 也可以使用類似代理的產(chǎn)品spock。

緩存

構(gòu)建高性能web站點(diǎn)時(shí),拋開(kāi)基礎(chǔ)架構(gòu)(數(shù)據(jù)庫(kù)分區(qū)的問(wèn)題也包括在基礎(chǔ)架構(gòu)中了),在應(yīng)用程序、編碼層面主要要考慮的問(wèn)題就是緩存的設(shè)計(jì),合理的緩存設(shè)計(jì)可以使提供動(dòng)態(tài)網(wǎng)頁(yè)服務(wù)的網(wǎng)站性能大幅度提高。當(dāng)然,在架構(gòu)階段設(shè)計(jì)緩存解決方案,絕非簡(jiǎn)單的技術(shù)問(wèn)題,需要從業(yè)務(wù)出發(fā),再結(jié)合各種技術(shù)。下面按照一次HTTP請(qǐng)求的順序,對(duì)每個(gè)環(huán)節(jié)的緩存設(shè)計(jì)從技術(shù)角度進(jìn)行討論。

1.客戶端緩存

可以利用客戶端瀏覽器的緩存機(jī)制,來(lái)減少瀏覽器對(duì)服務(wù)端的請(qǐng)求次數(shù)(當(dāng)然在服務(wù)端進(jìn)行圖片等資源合并,并結(jié)合css圖片定位技術(shù),也可以減少HTTP請(qǐng)求),利用好HTTP的緩存協(xié)商,可以設(shè)計(jì)出靈活的客戶端緩存方案。在HTTP頭中下面的內(nèi)容與緩存協(xié)商有關(guān):

Last-Modified:動(dòng)態(tài)頁(yè)面通過(guò)主動(dòng)推送該值,暗示瀏覽器在下次請(qǐng)求同一個(gè)url的時(shí)候,優(yōu)先使用If-Modified-Since值與服務(wù)端進(jìn)行緩存協(xié)商,如果緩存沒(méi)有過(guò)期,那么服務(wù)端可以不用重新計(jì)算動(dòng)態(tài)網(wǎng)頁(yè),通過(guò)返回304通知瀏覽器。網(wǎng)站的靜態(tài)資源往往使用這種方法。但是該方法有一個(gè)缺點(diǎn):有時(shí),文件的最后更改時(shí)間雖然改了,但是內(nèi)容卻沒(méi)有變,這樣無(wú)法充分發(fā)揮瀏覽器緩存的能力。

ETag:Web服務(wù)器為每個(gè)url生成一個(gè)散列值,增加在HTTP頭的ETag標(biāo)記中,瀏覽器會(huì)優(yōu)先使用If-None-Match加上這個(gè)散列值來(lái)協(xié)商緩存過(guò)期。通過(guò)對(duì)靜態(tài)文件的內(nèi)容進(jìn)行md5變換,可以生成散列值,這樣可以彌補(bǔ)Last-Modified的不足。但是隨之帶來(lái)的是服務(wù)端md5變換的計(jì)算開(kāi)銷。

Expires:上述兩種方式,雖然可以使服務(wù)端多少避免了反復(fù)的動(dòng)態(tài)網(wǎng)頁(yè)解析和計(jì)算,但瀏覽器還是必須通過(guò)HTTP請(qǐng)求來(lái)進(jìn)行協(xié)商,并沒(méi)有真正意義上減少請(qǐng)求的次數(shù)。通過(guò)在HTTP頭中添加Expires標(biāo)記可以明確的告知瀏覽器過(guò)期形式,瀏覽器會(huì)徹底減少請(qǐng)求的次數(shù)。

2.反向代理緩存

在web服務(wù)器前端,還有反向代理服務(wù)器緩存。反向代理服務(wù)器本質(zhì)上就是代理服務(wù)器,只是將外網(wǎng)的請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)的web服務(wù)器處理,他們都工作在應(yīng)用層,能夠理解HTTP協(xié)議。正向代理服務(wù)器具有HTTP緩存、HTTP過(guò)濾等功能,反向代理服務(wù)器同樣具有HTTP緩存的能力,而且還具備一定程度上的安全性。一切HTTP友好的動(dòng)態(tài)程序同樣能夠很好的在反向代理服務(wù)器上實(shí)現(xiàn)緩存。重量級(jí)的squid、輕量級(jí)的varnish、甚至是Nginx這樣的web服務(wù)器軟件,都可以勝任反向代理服務(wù)。

上述的代理服務(wù)器軟件產(chǎn)品,通過(guò)各種配置可以緩存基于HTTP協(xié)議的web響應(yīng)。

3.Web服務(wù)器緩存

Web服務(wù)器有可能支持基于url的緩存(基于key-value對(duì)),這類似反向代理緩存。緩存通??梢酝ㄟ^(guò)配置存儲(chǔ)在內(nèi)存或磁盤(pán)上,在緩存有效期的問(wèn)題上,通常是基于HTTP協(xié)議中的頭部信息判斷。但是使用這樣的機(jī)制需要注意:

動(dòng)態(tài)程序會(huì)可能變得依賴于特定的web服務(wù)器 注意編寫(xiě)面向HTTP緩存友好的動(dòng)態(tài)程序,會(huì)使你的動(dòng)態(tài)程序更有生命力 web 服務(wù)器還具有緩存文件描述符(類似句柄)的能力,這樣可以減少文件的open操作,同樣是一種減少系統(tǒng)調(diào)用的措施,這對(duì)于一些小文件有些效果,因?yàn)槲募叫』ㄔ趏pen上的開(kāi)銷將越來(lái)越占有重要的比例。

4.應(yīng)用程序緩存

應(yīng)用程序本身可以對(duì)動(dòng)態(tài)內(nèi)容進(jìn)行緩存,這可以體現(xiàn)在三個(gè)層面:

動(dòng)態(tài)腳本緩存:每次腳本解析都需要消耗一定的時(shí)間,為了加快這個(gè)速度,一些服務(wù)器端腳本語(yǔ)言都支持動(dòng)態(tài)腳本的預(yù)編譯,比如我們熟悉的ASP.NET、JSP都有所謂的中間語(yǔ)言,解析這些中間語(yǔ)言會(huì)快很多。

動(dòng)態(tài)腳本框架支持的緩存:一些動(dòng)態(tài)腳本框架支持緩存,同樣在選型的時(shí)候要關(guān)注一下這些框架的緩存機(jī)制和原理,比如緩存如何存放,過(guò)期如何設(shè)置,是否支持局部緩存等。

應(yīng)用程序自身實(shí)現(xiàn)緩存:應(yīng)用程序根據(jù)特定的業(yè)務(wù)需求獨(dú)立設(shè)計(jì)緩存。

在緩存設(shè)計(jì)的具體技術(shù)上有以下幾點(diǎn):

緩存在內(nèi)存,這種方式的優(yōu)點(diǎn)就是減少了磁盤(pán)的讀寫(xiě),但是內(nèi)存有限,單機(jī)不易擴(kuò)展。

緩存在分布式緩存,這種方式的優(yōu)點(diǎn)是減少了磁盤(pán)讀寫(xiě),并提高了可靠性和擴(kuò)展性,但是由于需要網(wǎng)絡(luò)IO,性能稍遜于單機(jī)緩存。

局部頁(yè)面緩存,對(duì)于一些頁(yè)面無(wú)法完整緩存的,可以考慮局部緩存。

靜態(tài)化,將網(wǎng)站靜態(tài)化可以極大的提高性能,因?yàn)橛脩舻恼?qǐng)求不需要?jiǎng)討B(tài)腳本處理。

服務(wù)器系統(tǒng)能力的制約因素:

這部分內(nèi)容對(duì)于所有的服務(wù)器(無(wú)論是代理服務(wù)器、web服務(wù)器還是其他),都具有普遍適用的意義。

多進(jìn)程、多線程的選擇和調(diào)度:進(jìn)程切換和線程切換都需要一定的系統(tǒng)開(kāi)銷,通常使用多線程模型的web服務(wù)器軟件比使用多進(jìn)程,具備更優(yōu)的性能。

系統(tǒng)調(diào)用:一些需要從用戶模式切換到內(nèi)核模式的函數(shù)調(diào)用可以稱為系統(tǒng)調(diào)用,比如:打開(kāi)文件。系統(tǒng)調(diào)用會(huì)有一定程度上的開(kāi)銷,減少系統(tǒng)調(diào)用是可以加快處理速度的程序設(shè)計(jì)細(xì)節(jié)。

TCP鏈接保持:可以通過(guò)保持TCP鏈接來(lái)減少服務(wù)端和客戶端之間的創(chuàng)建和關(guān)閉TCP鏈接的操作。HTTP中的Connection:Keep-Alive就有這樣的功能

IO模型:由于CPU的速度遠(yuǎn)遠(yuǎn)比IO快,IO延遲往往成為性能瓶頸,因此,IO模型十分重要。

各種IO模型:

PIO:CPU直接干預(yù)磁盤(pán)和內(nèi)存的數(shù)據(jù)交互,即無(wú)論是數(shù)據(jù)從內(nèi)存到磁盤(pán)還是磁盤(pán)到內(nèi)存都要經(jīng)過(guò)CPU寄存器。這樣的模型,可想而知,CPU有很多時(shí)間都需要等待慢速設(shè)備。

DMA(Direct Memory Access):CPU通過(guò)向DMA控制器發(fā)送指令來(lái)控制處理數(shù)據(jù),數(shù)據(jù)處理完之后通知CPU,這可以很大程度上釋放CPU資源。

同步阻塞I/O:對(duì)于進(jìn)程來(lái)說(shuō),一些系統(tǒng)調(diào)用為了同步IO,會(huì)不同程度上阻塞進(jìn)程,比如accept、send、read等。

同步非阻塞I/O:對(duì)于進(jìn)程來(lái)說(shuō),一些系統(tǒng)調(diào)用可以在調(diào)用完之后立即返回,告知進(jìn)程IO是否就緒,避免阻塞進(jìn)程。

多路I/O就緒通知:對(duì)于同步非阻塞I/O的方式,進(jìn)程仍然需要輪詢文件描述符(句柄)來(lái)得知哪些IO就緒了,而多路I/O就緒通知將這個(gè)過(guò)程改成回調(diào)通知。

內(nèi)存映射:將文件與內(nèi)存的某塊地址空間相映射,這樣可以想寫(xiě)內(nèi)存一樣寫(xiě)文件。當(dāng)然這種方式本質(zhì)上跟寫(xiě)文件沒(méi)有什么區(qū)別。

直接I/O:在用戶進(jìn)程地址空間和磁盤(pán)中間通常都會(huì)有操作系統(tǒng)管轄的內(nèi)核緩沖區(qū),當(dāng)寫(xiě)入文件時(shí),一般是寫(xiě)入這個(gè)緩沖區(qū),然后由一些延遲策略來(lái)寫(xiě)入磁盤(pán)。這樣做可以提高寫(xiě)效率。但是對(duì)于諸如數(shù)據(jù)庫(kù)這樣的應(yīng)用來(lái)說(shuō),往往希望自己管理讀寫(xiě)緩存,避免內(nèi)核緩沖區(qū)的無(wú)畏內(nèi)存浪費(fèi)。Linux的open函數(shù)支持O_DIRECT參數(shù)來(lái)進(jìn)行直接IO。

sendfile:如果web服務(wù)器想發(fā)送一個(gè)文件,將會(huì)經(jīng)歷如下過(guò)程:打開(kāi)文件,從磁盤(pán)中讀取文件內(nèi)容(這通常涉及到內(nèi)核緩沖區(qū)數(shù)據(jù)復(fù)制到用戶進(jìn)程),然后進(jìn)程通過(guò)socket發(fā)送文件內(nèi)容(這通常設(shè)計(jì)到用戶進(jìn)程數(shù)據(jù)復(fù)制到網(wǎng)卡內(nèi)核緩沖區(qū)),可以看到重復(fù)的數(shù)據(jù)復(fù)制是可以避免的。sendfile可以支持直接從文件內(nèi)核緩沖區(qū)復(fù)制到網(wǎng)卡內(nèi)核緩沖區(qū)。

更多信息請(qǐng)查看網(wǎng)站運(yùn)營(yíng)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)