亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 服務(wù)器 > 管理維護(hù) > 正文

如何配置web服務(wù)器 尤其是高性能的web服務(wù)器

2024-09-10 14:20:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

如何配置高性能的Web服務(wù)器,如何配置web服務(wù)器,配置web服務(wù)器的方法有哪些,配置web服務(wù)器需要哪些條件?

配置web服務(wù)器的條件:

1、CPU最好是E5-26XX系列

2、內(nèi)存在16G以上

3、核心:必須使用固態(tài)硬件

4、安裝護(hù)衛(wèi)神. 主機(jī)大師,一鍵安裝高性能web環(huán)境。

5、帶寬最好選擇BGP

十條服務(wù)器端優(yōu)化Web性能的技巧總結(jié)

提高 web 應(yīng)用的性能從來(lái)沒(méi)有比現(xiàn)在更重要過(guò)。網(wǎng)絡(luò)經(jīng)濟(jì)的比重一直在增長(zhǎng);全球經(jīng)濟(jì)超過(guò) 5% 的價(jià)值是在因特網(wǎng)上產(chǎn)生的(數(shù)據(jù)參見(jiàn)下面的資料)。這個(gè)時(shí)刻在線的超連接世界意味著用戶對(duì)其的期望值也處于歷史上的最高點(diǎn)。如果你的網(wǎng)站不能及時(shí)的響應(yīng),或者你的 app 不能無(wú)延時(shí)的工作,用戶會(huì)很快的投奔到你的競(jìng)爭(zhēng)對(duì)手那里。

舉一個(gè)例子,一份亞馬遜十年前做過(guò)的研究可以證明,甚至在那個(gè)時(shí)候,網(wǎng)頁(yè)加載時(shí)間每減少100毫秒,收入就會(huì)增加1%。另一個(gè)最近的研究特別強(qiáng)調(diào)一個(gè)事實(shí),即超過(guò)一半的網(wǎng)站擁有者在調(diào)查中承認(rèn)它們會(huì)因?yàn)閼?yīng)用程序性能的問(wèn)題流失用戶。

網(wǎng)站到底需要多快呢?對(duì)于頁(yè)面加載,每增加1秒鐘就有4%的用戶放棄使用。頂級(jí)的電子商務(wù)站點(diǎn)的頁(yè)面在第一次交互時(shí)可以做到1秒到3秒加載時(shí)間,而這是提供最高舒適度的速度。很明顯這種利害關(guān)系對(duì)于 web 應(yīng)用來(lái)說(shuō)很高,而且在不斷的增加。

想要提高效率很簡(jiǎn)單,但是看到實(shí)際結(jié)果很難。為了在你的探索之旅上幫助到你,這篇文章會(huì)給你提供10條最高可以提升10倍網(wǎng)站性能的建議。

Tip #1: 通過(guò)反向代理來(lái)提高性能和增加安全性

如果你的 web 應(yīng)用運(yùn)行在單個(gè)機(jī)器上,那么這個(gè)辦法會(huì)明顯的提升性能:只需要換一個(gè)更快的機(jī)器,更好的處理器,更多的內(nèi)存,更快的磁盤陣列,等等。然后新機(jī)器就可以更快的運(yùn)行你的 WordPress 服務(wù)器, Node.js 程序, Java 程序,以及其它程序。(如果你的程序要訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,那么解決方法依然很簡(jiǎn)單:添加兩個(gè)更快的機(jī)器,以及在兩臺(tái)電腦之間使用一個(gè)更快的鏈路。)

問(wèn)題是,機(jī)器速度可能并不是問(wèn)題。web 程序運(yùn)行慢經(jīng)常是因?yàn)橛?jì)算機(jī)一直在不同的任務(wù)之間切換:通過(guò)成千上萬(wàn)的連接和用戶交互,從磁盤訪問(wèn)文件,運(yùn)行代碼,等等。應(yīng)用服務(wù)器可能會(huì)抖動(dòng)thrashing-比如說(shuō)內(nèi)存不足、將內(nèi)存數(shù)據(jù)交換到磁盤,以及有多個(gè)請(qǐng)求要等待某個(gè)任務(wù)完成,如磁盤I/O。

你可以采取一個(gè)完全不同的方案來(lái)替代升級(jí)硬件:添加一個(gè)反向代理服務(wù)器來(lái)分擔(dān)部分任務(wù)。反向代理服務(wù)器 位于運(yùn)行應(yīng)用的機(jī)器的前端,是用來(lái)處理網(wǎng)絡(luò)流量的。只有反向代理服務(wù)器是直接連接到互聯(lián)網(wǎng)的;和應(yīng)用服務(wù)器的通訊都是通過(guò)一個(gè)快速的內(nèi)部網(wǎng)絡(luò)完成的。

使用反向代理服務(wù)器可以將應(yīng)用服務(wù)器從等待用戶與 web 程序交互解放出來(lái),這樣應(yīng)用服務(wù)器就可以專注于為反向代理服務(wù)器構(gòu)建網(wǎng)頁(yè),讓其能夠傳輸?shù)交ヂ?lián)網(wǎng)上。而應(yīng)用服務(wù)器就不需要等待客戶端的響應(yīng),其運(yùn)行速度可以接近于優(yōu)化后的性能水平。

添加反向代理服務(wù)器還可以給你的 web 服務(wù)器安裝帶來(lái)靈活性。比如,一個(gè)某種類型的服務(wù)器已經(jīng)超載了,那么就可以輕松的添加另一個(gè)相同的服務(wù)器;如果某個(gè)機(jī)器宕機(jī)了,也可以很容易替代一個(gè)新的。

因?yàn)榉聪虼韼?lái)的靈活性,所以反向代理也是一些性能加速功能的必要前提,比如:

負(fù)載均衡 (參見(jiàn) Tip #2) – 負(fù)載均衡運(yùn)行在反向代理服務(wù)器上,用來(lái)將流量均衡分配給一批應(yīng)用。有了合適的負(fù)載均衡,你就可以添加應(yīng)用服務(wù)器而根本不用修改應(yīng)用。

緩存靜態(tài)文件 (參見(jiàn) Tip #3) – 直接讀取的文件,比如圖片或者客戶端代碼,可以保存在反向代理服務(wù)器,然后直接發(fā)給客戶端,這樣就可以提高速度、分擔(dān)應(yīng)用服務(wù)器的負(fù)載,可以讓?xiě)?yīng)用運(yùn)行的更快。

網(wǎng)站安全 – 反向代理服務(wù)器可以提高網(wǎng)站安全性,以及快速的發(fā)現(xiàn)和響應(yīng)攻擊,保證應(yīng)用服務(wù)器處于被保護(hù)狀態(tài)。

NGINX 軟件為用作反向代理服務(wù)器而專門設(shè)計(jì),也包含了上述的多種功能。NGINX 使用事件驅(qū)動(dòng)的方式處理請(qǐng)求,這會(huì)比傳統(tǒng)的服務(wù)器更加有效率。NGINX plus 添加了更多高級(jí)的反向代理特性,比如應(yīng)用的健康度檢查,專門用來(lái)處理請(qǐng)求路由、高級(jí)緩沖和相關(guān)支持。

如何配置web服務(wù)器 尤其是高性能的web服務(wù)器_www.cuoXin.com

Tip #2: 添加負(fù)載平衡

添加一個(gè)負(fù)載均衡服務(wù)器 是一個(gè)相當(dāng)簡(jiǎn)單的用來(lái)提高性能和網(wǎng)站安全性的的方法。與其將核心 Web 服務(wù)器變得越來(lái)越大和越來(lái)越強(qiáng),不如使用負(fù)載均衡將流量分配到多個(gè)服務(wù)器。即使程序?qū)懙牟缓?,或者在擴(kuò)容方面有困難,僅是使用負(fù)載均衡服務(wù)器就可以很好的提高用戶體驗(yàn)。

負(fù)載均衡服務(wù)器首先是一個(gè)反向代理服務(wù)器(參見(jiàn)Tip #1)——它接受來(lái)自互聯(lián)網(wǎng)的流量,然后轉(zhuǎn)發(fā)請(qǐng)求給另一個(gè)服務(wù)器。特別是負(fù)載均衡服務(wù)器支持兩個(gè)或多個(gè)應(yīng)用服務(wù)器,使用分配算法將請(qǐng)求轉(zhuǎn)發(fā)給不同服務(wù)器。最簡(jiǎn)單的負(fù)載均衡方法是輪轉(zhuǎn)法round robin,每個(gè)新的請(qǐng)求都會(huì)發(fā)給列表里的下一個(gè)服務(wù)器。其它的復(fù)制均衡方法包括將請(qǐng)求發(fā)給活動(dòng)連接最少的服務(wù)器。NGINX plus 擁有將特定用戶的會(huì)話分配給同一個(gè)服務(wù)器的能力。

負(fù)載均衡可以很好的提高性能是因?yàn)樗梢员苊饽硞€(gè)服務(wù)器過(guò)載而另一些服務(wù)器卻沒(méi)有需要處理的流量。它也可以簡(jiǎn)單的擴(kuò)展服務(wù)器規(guī)模,因?yàn)槟憧梢蕴砑佣鄠€(gè)價(jià)格相對(duì)便宜的服務(wù)器并且保證它們被充分利用了。

可以進(jìn)行負(fù)載均衡的協(xié)議包括 HTTP、HTTPS、SPDY、HTTP/2、WebSocket、FastCGI、SCGI、uwsgi、 memcached 等,以及幾種其它的應(yīng)用類型,包括基于 TCP 的應(yīng)用和其它的第4層協(xié)議的程序。分析你的 web 應(yīng)用來(lái)決定你要使用哪些以及哪些地方性能不足。

相同的服務(wù)器或服務(wù)器群可以被用來(lái)進(jìn)行負(fù)載均衡,也可以用來(lái)處理其它的任務(wù),如 SSL 末端服務(wù)器,支持客戶端的 HTTP/1.x 和 HTTP/2 請(qǐng)求,以及緩存靜態(tài)文件。

Tip #3: 緩存靜態(tài)和動(dòng)態(tài)的內(nèi)容

緩存可以通過(guò)加速內(nèi)容的傳輸速度來(lái)提高 web 應(yīng)用的性能。它可以采用以下幾種策略:當(dāng)需要的時(shí)候預(yù)處理要傳輸?shù)膬?nèi)容,保存數(shù)據(jù)到速度更快的設(shè)備,把數(shù)據(jù)存儲(chǔ)在距離客戶端更近的位置,或者將這幾種方法結(jié)合起來(lái)使用。

有兩種不同類型數(shù)據(jù)的緩沖:

靜態(tài)內(nèi)容緩存。不經(jīng)常變化的文件,比如圖像(JPEG、PNG) 和代碼(CSS,JavaScript),可以保存在外圍服務(wù)器上,這樣就可以快速的從內(nèi)存和磁盤上提取。

動(dòng)態(tài)內(nèi)容緩存。很多 web 應(yīng)用會(huì)針對(duì)每次網(wǎng)頁(yè)請(qǐng)求生成一個(gè)新的 HTML 頁(yè)面。在短時(shí)間內(nèi)簡(jiǎn)單的緩存生成的 HTML 內(nèi)容,就可以很好的減少要生成的內(nèi)容的數(shù)量,而且這些頁(yè)面足夠新,可以滿足你的需要。

舉個(gè)例子,如果一個(gè)頁(yè)面每秒會(huì)被瀏覽10次,你將它緩存 1 秒,90%請(qǐng)求的頁(yè)面都會(huì)直接從緩存提取。如果你分開(kāi)緩存靜態(tài)內(nèi)容,甚至新生成的頁(yè)面可能都是由這些緩存構(gòu)成的。

下面由是 web 應(yīng)用發(fā)明的三種主要的緩存技術(shù):

1.縮短數(shù)據(jù)與用戶的網(wǎng)絡(luò)距離。把一份內(nèi)容的拷貝放的離用戶更近的節(jié)點(diǎn)來(lái)減少傳輸時(shí)間。

2.提高內(nèi)容服務(wù)器的速度。內(nèi)容可以保存在一個(gè)更快的服務(wù)器上來(lái)減少提取文件的時(shí)間。

3.從過(guò)載服務(wù)器上移走數(shù)據(jù)。機(jī)器經(jīng)常因?yàn)橐瓿赡承┢渌娜蝿?wù)而造成某個(gè)任務(wù)的執(zhí)行速度比測(cè)試結(jié)果要差。將數(shù)據(jù)緩存在不同的機(jī)器上可以提高緩存資源和非緩存資源的性能,而這是因?yàn)橹鳈C(jī)沒(méi)有被過(guò)度使用。

對(duì) web 應(yīng)用的緩存機(jī)制可以在 web 應(yīng)用服務(wù)器內(nèi)部實(shí)現(xiàn)。首先,緩存動(dòng)態(tài)內(nèi)容是用來(lái)減少應(yīng)用服務(wù)器加載動(dòng)態(tài)內(nèi)容的時(shí)間。其次,緩存靜態(tài)內(nèi)容(包括動(dòng)態(tài)內(nèi)容的臨時(shí)拷貝)是為了更進(jìn)一步的分擔(dān)應(yīng)用服務(wù)器的負(fù)載。而且緩存之后會(huì)從應(yīng)用服務(wù)器轉(zhuǎn)移到對(duì)用戶而言更快、更近的機(jī)器,從而減少應(yīng)用服務(wù)器的壓力,減少提取數(shù)據(jù)和傳輸數(shù)據(jù)的時(shí)間。

改進(jìn)過(guò)的緩存方案可以極大的提高應(yīng)用的速度。對(duì)于大多數(shù)網(wǎng)頁(yè)來(lái)說(shuō),靜態(tài)數(shù)據(jù),比如大圖像文件,構(gòu)成了超過(guò)一半的內(nèi)容。如果沒(méi)有緩存,那么這可能會(huì)花費(fèi)幾秒的時(shí)間來(lái)提取和傳輸這類數(shù)據(jù),但是采用了緩存之后不到1秒就可以完成。

舉一個(gè)在實(shí)際中緩存是如何使用的例子, NGINX 和 NGINX Plus 使用了兩條指令來(lái)設(shè)置緩存機(jī)制:proxy_cache_path 和 proxy_cache。你可以指定緩存的位置和大小、文件在緩存中保存的最長(zhǎng)時(shí)間和其它一些參數(shù)。使用第三條(而且是相當(dāng)受歡迎的一條)指令 proxy_cache_use_stale,如果提供新鮮內(nèi)容的服務(wù)器忙碌或者掛掉了,你甚至可以讓緩存提供較舊的內(nèi)容,這樣客戶端就不會(huì)一無(wú)所得。從用戶的角度來(lái)看這可以很好的提高你的網(wǎng)站或者應(yīng)用的可用時(shí)間。

NGINX plus 有個(gè)高級(jí)緩存特性,包括對(duì)緩存清除的支持和在儀表盤上顯示緩存狀態(tài)信息。

注意:緩存機(jī)制分布于應(yīng)用開(kāi)發(fā)者、投資決策者以及實(shí)際的系統(tǒng)運(yùn)維人員之間。本文提到的一些復(fù)雜的緩存機(jī)制從 DevOps 的角度來(lái)看很具有價(jià)值,即對(duì)集應(yīng)用開(kāi)發(fā)者、架構(gòu)師以及運(yùn)維操作人員的功能為一體的工程師來(lái)說(shuō)可以滿足它們對(duì)站點(diǎn)功能性、響應(yīng)時(shí)間、安全性和商業(yè)結(jié)果(如完成的交易數(shù))等需要。

Tip #4: 壓縮數(shù)據(jù)

壓縮是一個(gè)具有很大潛力的提高性能的加速方法。現(xiàn)在已經(jīng)有一些針對(duì)照片(JPEG 和PNG)、視頻(MPEG-4)和音樂(lè)(MP3)等各類文件精心設(shè)計(jì)和高壓縮率的標(biāo)準(zhǔn)。每一個(gè)標(biāo)準(zhǔn)都或多或少的減少了文件的大小。

文本數(shù)據(jù) —— 包括HTML(包含了純文本和 HTML 標(biāo)簽),CSS 和代碼,比如 Javascript —— 經(jīng)常是未經(jīng)壓縮就傳輸?shù)?。壓縮這類數(shù)據(jù)會(huì)在對(duì)應(yīng)用程序性能的感覺(jué)上,特別是處于慢速或受限的移動(dòng)網(wǎng)絡(luò)的客戶端,產(chǎn)生更大的影響。

這是因?yàn)槲谋緮?shù)據(jù)經(jīng)常是用戶與網(wǎng)頁(yè)交互的有效數(shù)據(jù),而多媒體數(shù)據(jù)可能更多的是起提供支持或者裝飾的作用。智能的內(nèi)容壓縮可以減少 HTML,Javascript,CSS和其它文本內(nèi)容對(duì)帶寬的要求,通常可以減少 30% 甚至更多的帶寬和相應(yīng)的頁(yè)面加載時(shí)間。

如果你使用 SSL,壓縮可以減少需要進(jìn)行 SSL 編碼的的數(shù)據(jù)量,而這些編碼操作會(huì)占用一些 CPU 時(shí)間而抵消了壓縮數(shù)據(jù)減少的時(shí)間。

壓縮文本數(shù)據(jù)的方法很多,舉個(gè)例子,在 HTTP/2 中,小說(shuō)文本的壓縮模式就特別調(diào)整了頭部數(shù)據(jù)。另一個(gè)例子是可以在 NGINX 里打開(kāi)使用 GZIP 壓縮。你在你的服務(wù)里預(yù)先壓縮文本數(shù)據(jù)之后,你就可以直接使用 gzip_static 指令來(lái)處理壓縮過(guò)的 .gz 版本。

Tip #5: 優(yōu)化 SSL/TLS

安全套接字(SSL) 協(xié)議和它的下一代版本傳輸層安全(TLS)協(xié)議正在被越來(lái)越多的網(wǎng)站采用。SSL/TLS 對(duì)從原始服務(wù)器發(fā)往用戶的數(shù)據(jù)進(jìn)行加密提高了網(wǎng)站的安全性。影響這個(gè)趨勢(shì)的部分原因是 Google 正在使用 SSL/TLS,這在搜索引擎排名上是一個(gè)正面的影響因素。

盡管 SSL/TLS 越來(lái)越流行,但是使用加密對(duì)速度的影響也讓很多網(wǎng)站望而卻步。SSL/TLS 之所以讓網(wǎng)站變的更慢,原因有二:

任何一個(gè)連接第一次連接時(shí)的握手過(guò)程都需要傳遞密鑰。而采用 HTTP/1.x 協(xié)議的瀏覽器在建立多個(gè)連接時(shí)會(huì)對(duì)每個(gè)連接重復(fù)上述操作。

數(shù)據(jù)在傳輸過(guò)程中需要不斷的在服務(wù)器端加密、在客戶端解密。

為了鼓勵(lì)使用 SSL/TLS,HTTP/2 和 SPDY(在下一章會(huì)描述)的作者設(shè)計(jì)了新的協(xié)議來(lái)讓瀏覽器只需要對(duì)一個(gè)瀏覽器會(huì)話使用一個(gè)連接。這會(huì)大大的減少上述第一個(gè)原因所浪費(fèi)的時(shí)間。然而現(xiàn)在可以用來(lái)提高應(yīng)用程序使用 SSL/TLS 傳輸數(shù)據(jù)的性能的方法不止這些。

web 服務(wù)器有對(duì)應(yīng)的機(jī)制優(yōu)化 SSL/TLS 傳輸。舉個(gè)例子,NGINX 使用 OpenSSL 運(yùn)行在普通的硬件上提供了接近專用硬件的傳輸性能。NGINX 的 SSL 性能 有詳細(xì)的文檔,而且把對(duì) SSL/TLS 數(shù)據(jù)進(jìn)行加解密的時(shí)間和 CPU 占用率降低了很多。

Tip #6: 使用 HTTP/2 或 SPDY

對(duì)于已經(jīng)使用了 SSL/TLS 的站點(diǎn),HTTP/2 和 SPDY 可以很好的提高性能,因?yàn)槊總€(gè)連接只需要一次握手。而對(duì)于沒(méi)有使用 SSL/TLS 的站點(diǎn)來(lái)說(shuō),從響應(yīng)速度的角度來(lái)說(shuō) HTTP/2 和 SPDY 將讓遷移到 SSL/TLS 沒(méi)有什么壓力(原本會(huì)降低效率)。

Google 在2012年開(kāi)始把 SPDY 作為一個(gè)比 HTTP/1.x 更快速的協(xié)議來(lái)推薦。HTTP/2 是目前 IETF 通過(guò)的標(biāo)準(zhǔn),是基于 SPDY 的。SPDY 已經(jīng)被廣泛的支持了,但是很快就會(huì)被 HTTP/2 替代。

SPDY 和 HTTP/2 的關(guān)鍵是用單一連接來(lái)替代多路連接。單個(gè)連接是被復(fù)用的,所以它可以同時(shí)攜帶多個(gè)請(qǐng)求和響應(yīng)的分片。

通過(guò)使用單一連接,這些協(xié)議可以避免像在實(shí)現(xiàn)了 HTTP/1.x 的瀏覽器中一樣建立和管理多個(gè)連接。單一連接在對(duì) SSL 特別有效,這是因?yàn)樗梢宰钚』?SSL/TLS 建立安全鏈接時(shí)的握手時(shí)間。

SPDY 協(xié)議需要使用 SSL/TLS,而 HTTP/2 官方標(biāo)準(zhǔn)并不需要,但是目前所有支持 HTTP/2 的瀏覽器只有在啟用了 SSL/TLS 的情況下才能使用它。這就意味著支持 HTTP/2 的瀏覽器只有在網(wǎng)站使用了 SSL 并且服務(wù)器接收 HTTP/2 流量的情況下才會(huì)啟用 HTTP/2。否則的話瀏覽器就會(huì)使用 HTTP/1.x 協(xié)議。

如何配置web服務(wù)器 尤其是高性能的web服務(wù)器_www.cuoXin.com

作為支持這些協(xié)議的一個(gè)樣例,NGINX 已經(jīng)從一開(kāi)始就支持了 SPDY,而且大部分使用 SPDY 協(xié)議的網(wǎng)站都運(yùn)行的是 NGINX。NGINX 同時(shí)也很早對(duì) HTTP/2 的提供了支持,從2015 年9月開(kāi)始,開(kāi)源版 NGINX 和 NGINX Plus 就支持它了。

經(jīng)過(guò)一段時(shí)間,我們 NGINX 希望更多的站點(diǎn)完全啟用 SSL 并且向 HTTP/2 遷移。這將會(huì)提高安全性,同時(shí)也會(huì)找到并實(shí)現(xiàn)新的優(yōu)化手段,簡(jiǎn)化的代碼表現(xiàn)的會(huì)更加優(yōu)異。

Tip #7: 升級(jí)軟件版本

一個(gè)提高應(yīng)用性能的簡(jiǎn)單辦法是根據(jù)軟件的穩(wěn)定性和性能的評(píng)價(jià)來(lái)選在你的軟件棧。進(jìn)一步說(shuō),因?yàn)楦咝阅芙M件的開(kāi)發(fā)者更愿意追求更高的性能和解決 bug ,所以值得使用最新版本的軟件。新版本往往更受開(kāi)發(fā)者和用戶社區(qū)的關(guān)注。更新的版本往往會(huì)利用到新的編譯器優(yōu)化,包括對(duì)新硬件的調(diào)優(yōu)。

穩(wěn)定的新版本通常比舊版本具有更好的兼容性和更高的性能。一直進(jìn)行軟件更新,可以非常簡(jiǎn)單的保持軟件保持最佳的優(yōu)化,解決掉 bug,以及提高安全性。

一直使用舊版軟件也會(huì)阻止你利用新的特性。比如上面說(shuō)到的 HTTP/2,目前要求 OpenSSL 1.0.1。在2016 年中期開(kāi)始將會(huì)要求1.0.2 ,而它是在2015年1月才發(fā)布的。

NGINX 用戶可以開(kāi)始遷移到 NGINX 最新的開(kāi)源軟件 或者 NGINX Plus;它們都包含了最新的能力,如 socket 分割和線程池(見(jiàn)下文),這些都已經(jīng)為性能優(yōu)化過(guò)了。然后好好看看的你軟件棧,把它們升級(jí)到你能升級(jí)到的最新版本吧。

Tip #8: Linux 系統(tǒng)性能調(diào)優(yōu)

Linux 是大多數(shù) web 服務(wù)器使用的操作系統(tǒng),而且作為你的架構(gòu)的基礎(chǔ),Linux 顯然有不少提高性能的可能。默認(rèn)情況下,很多 Linux 系統(tǒng)都被設(shè)置為使用很少的資源,以符合典型的桌面應(yīng)用使用。這就意味著 web 應(yīng)用需要一些微調(diào)才能達(dá)到最大效能。

這里的 Linux 優(yōu)化是專門針對(duì) web 服務(wù)器方面的。以 NGINX 為例,這里有一些在加速 Linux 時(shí)需要強(qiáng)調(diào)的變化:

緩沖隊(duì)列。如果你有掛起的連接,那么你應(yīng)該考慮增加 net.core.somaxconn 的值,它代表了可以緩存的連接的最大數(shù)量。如果連接限制太小,那么你將會(huì)看到錯(cuò)誤信息,而你可以逐漸的增加這個(gè)參數(shù)直到錯(cuò)誤信息停止出現(xiàn)。

文件描述符。NGINX 對(duì)一個(gè)連接使用最多2個(gè)文件描述符。如果你的系統(tǒng)有很多連接請(qǐng)求,你可能就需要提高sys.fs.file_max ,以增加系統(tǒng)對(duì)文件描述符數(shù)量整體的限制,這樣才能支持不斷增加的負(fù)載需求。

臨時(shí)端口。當(dāng)使用代理時(shí),NGINX 會(huì)為每個(gè)上游服務(wù)器創(chuàng)建臨時(shí)端口。你可以設(shè)置net.ipv4.ip_local_port_range 來(lái)提高這些端口的范圍,增加可用的端口號(hào)。你也可以減少非活動(dòng)的端口的超時(shí)判斷來(lái)重復(fù)使用端口,這可以通過(guò) net.ipv4.tcp_fin_timeout 來(lái)設(shè)置,這可以快速的提高流量。

Tip #9: web 服務(wù)器性能調(diào)優(yōu)

無(wú)論你是用哪種 web 服務(wù)器,你都需要對(duì)它進(jìn)行優(yōu)化來(lái)提高性能。下面的推薦手段可以用于任何 web 服務(wù)器,但是一些設(shè)置是針對(duì) NGINX 的。關(guān)鍵的優(yōu)化手段包括:

訪問(wèn)日志。不要把每個(gè)請(qǐng)求的日志都直接寫(xiě)回磁盤,你可以在內(nèi)存將日志緩存起來(lái)然后批量寫(xiě)回磁盤。對(duì)于NGINX 來(lái)說(shuō),給指令 access_log 添加參數(shù) buffer=size 可以讓系統(tǒng)在緩存滿了的情況下才把日志寫(xiě)到磁盤。如果你添加了參數(shù) flush=time ,那么緩存內(nèi)容會(huì)每隔一段時(shí)間再寫(xiě)回磁盤。

緩存。緩存會(huì)在內(nèi)存中存放部分響應(yīng),直到滿了為止,這可以讓與客戶端的通信更加高效。內(nèi)存放不下的響應(yīng)會(huì)寫(xiě)回磁盤,而這就會(huì)降低效能。當(dāng) NGINX 啟用了緩存機(jī)制后,你可以使用指令 proxy_buffer_size 和 proxy_buffers 來(lái)管理緩存。

客戶端?;?。?;钸B接可以減少開(kāi)銷,特別是使用 SSL/TLS 時(shí)。對(duì)于 NGINX 來(lái)說(shuō),你可以從 keepalive_requests 的默認(rèn)值 100 開(kāi)始增加最大連接數(shù),這樣一個(gè)客戶端就可以在一個(gè)指定的連接上請(qǐng)求多次,而且你也可以通過(guò)增加 keepalive_timeout 的值來(lái)允許?;钸B接存活更長(zhǎng)時(shí)間,這樣就可以讓后來(lái)的請(qǐng)求處理的更快速。

上游?;睢I嫌蔚倪B接——即連接到應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器等機(jī)器的連接——同樣也會(huì)受益于連接?;?。對(duì)于上游連接來(lái)說(shuō),你可以增加 keepalive,即每個(gè)工人進(jìn)程的空閑?;钸B接個(gè)數(shù)。這就可以提高連接的復(fù)用次數(shù),減少需要重新打開(kāi)全新連接的次數(shù)。

限制。限制客戶端使用的資源可以提高性能和安全性。對(duì)于 NGINX 來(lái)說(shuō),指令 limit_conn 和 limit_conn_zone 限制了給定來(lái)源的連接數(shù)量,而 limit_rate 限制了帶寬。這些限制都可以阻止合法用戶扒取資源,同時(shí)也避免了攻擊。指令 limit_req 和 limit_req_zone 限制了客戶端請(qǐng)求。對(duì)于上游服務(wù)器來(lái)說(shuō),可以在 upstream 的配置塊里的 server 指令使用 max_conns 參數(shù)來(lái)限制連接到上游服務(wù)器的連接數(shù)。 這樣可以避免服務(wù)器過(guò)載。關(guān)聯(lián)的 queue 指令會(huì)創(chuàng)建一個(gè)隊(duì)列來(lái)在連接數(shù)抵達(dá) max_connS 限制時(shí)在指定長(zhǎng)度的時(shí)間內(nèi)保存特定數(shù)量的請(qǐng)求。

工人進(jìn)程。工人進(jìn)程負(fù)責(zé)處理請(qǐng)求。NGINX 采用事件驅(qū)動(dòng)模型和操作系統(tǒng)特定的機(jī)制來(lái)有效的將請(qǐng)求分發(fā)給不同的工人進(jìn)程。這條建議推薦設(shè)置 worker_processes 為每個(gè) CPU 一個(gè) 。worker_connections 的最大數(shù)(默認(rèn)512)可以在大部分系統(tǒng)上根據(jù)需要增加,實(shí)驗(yàn)性地找到最適合你的系統(tǒng)的值。

套接字分割。通常一個(gè)套接字監(jiān)聽(tīng)器會(huì)把新連接分配給所有工人進(jìn)程。套接字分割會(huì)為每個(gè)工人進(jìn)程創(chuàng)建一個(gè)套接字監(jiān)聽(tīng)器,這樣一來(lái)以當(dāng)套接字監(jiān)聽(tīng)器可用時(shí),內(nèi)核就會(huì)將連接分配給它。這可以減少鎖競(jìng)爭(zhēng),并且提高多核系統(tǒng)的性能,要啟用套接字分隔需要在 listen 指令里面加上 reuseport 參數(shù)。

線程池。計(jì)算機(jī)進(jìn)程可能被一個(gè)單一的緩慢的操作所占用。對(duì)于 web 服務(wù)器軟件來(lái)說(shuō),磁盤訪問(wèn)會(huì)影響很多更快的操作,比如計(jì)算或者在內(nèi)存中拷貝。使用了線程池之后慢操作可以分配到不同的任務(wù)集,而主進(jìn)程可以一直運(yùn)行快速操作。當(dāng)磁盤操作完成后結(jié)果會(huì)返回給主進(jìn)程的循環(huán)。在 NGINX 里有兩個(gè)操作——read() 系統(tǒng)調(diào)用和 sendfile() ——被分配到了線程池

如何配置web服務(wù)器 尤其是高性能的web服務(wù)器_www.cuoXin.com

技巧。當(dāng)改變?nèi)魏尾僮飨到y(tǒng)或支持服務(wù)的設(shè)置時(shí),一次只改變一個(gè)參數(shù)然后測(cè)試性能。如果修改引起問(wèn)題了,或者不能讓你的系統(tǒng)更快,那么就改回去。

Tip #10: 監(jiān)視系統(tǒng)活動(dòng)來(lái)解決問(wèn)題和瓶頸

在應(yīng)用開(kāi)發(fā)中要使得系統(tǒng)變得非常高效的關(guān)鍵是監(jiān)視你的系統(tǒng)在現(xiàn)實(shí)世界運(yùn)行的性能。你必須能通過(guò)特定的設(shè)備和你的 web 基礎(chǔ)設(shè)施上監(jiān)控程序活動(dòng)。

監(jiān)視活動(dòng)是最積極的——它會(huì)告訴你發(fā)生了什么,把問(wèn)題留給你發(fā)現(xiàn)和最終解決掉。

監(jiān)視可以發(fā)現(xiàn)幾種不同的問(wèn)題。它們包括:

服務(wù)器宕機(jī)。

服務(wù)器出問(wèn)題一直在丟失連接。

服務(wù)器出現(xiàn)大量的緩存未命中。

服務(wù)器沒(méi)有發(fā)送正確的內(nèi)容。

應(yīng)用的總體性能監(jiān)控工具,比如 New Relic 和 Dynatrace,可以幫助你監(jiān)控到從遠(yuǎn)程加載網(wǎng)頁(yè)的時(shí)間,而 NGINX 可以幫助你監(jiān)控到應(yīng)用交付端。當(dāng)你需要考慮為基礎(chǔ)設(shè)施添加容量以滿足流量需求時(shí),應(yīng)用性能數(shù)據(jù)可以告訴你你的優(yōu)化措施的確起作用了。

為了幫助開(kāi)發(fā)者快速的發(fā)現(xiàn)、解決問(wèn)題,NGINX Plus 增加了應(yīng)用感知健康度檢查 ——對(duì)重復(fù)出現(xiàn)的常規(guī)事件進(jìn)行綜合分析并在問(wèn)題出現(xiàn)時(shí)向你發(fā)出警告。NGINX Plus 同時(shí)提供會(huì)話過(guò)濾功能,這可以阻止當(dāng)前任務(wù)完成之前接受新的連接,另一個(gè)功能是慢啟動(dòng),允許一個(gè)從錯(cuò)誤恢復(fù)過(guò)來(lái)的服務(wù)器追趕上負(fù)載均衡服務(wù)器群的進(jìn)度。當(dāng)使用得當(dāng)時(shí),健康度檢查可以讓你在問(wèn)題變得嚴(yán)重到影響用戶體驗(yàn)前就發(fā)現(xiàn)它,而會(huì)話過(guò)濾和慢啟動(dòng)可以讓你替換服務(wù)器,并且這個(gè)過(guò)程不會(huì)對(duì)性能和正常運(yùn)行時(shí)間產(chǎn)生負(fù)面影響。下圖就展示了內(nèi)建的 NGINX Plus 模塊實(shí)時(shí)活動(dòng)監(jiān)視的儀表盤,包括了服務(wù)器群,TCP 連接和緩存信息等 Web 架構(gòu)信息。

如何配置web服務(wù)器 尤其是高性能的web服務(wù)器_www.cuoXin.com

總結(jié): 看看10倍性能提升的效果

這些性能提升方案對(duì)任何一個(gè) web 應(yīng)用都可用并且效果都很好,而實(shí)際效果取決于你的預(yù)算、你能花費(fèi)的時(shí)間、目前實(shí)現(xiàn)方案的差距。所以你該如何對(duì)你自己的應(yīng)用實(shí)現(xiàn)10倍性能提升?

為了指導(dǎo)你了解每種優(yōu)化手段的潛在影響,這里是上面詳述的每個(gè)優(yōu)化方法的關(guān)鍵點(diǎn),雖然你的情況肯定大不相同:

反向代理服務(wù)器和負(fù)載均衡。沒(méi)有負(fù)載均衡或者負(fù)載均衡很差都會(huì)造成間歇的性能低谷。增加一個(gè)反向代理,比如 NGINX ,可以避免 web 應(yīng)用程序在內(nèi)存和磁盤之間波動(dòng)。負(fù)載均衡可以將過(guò)載服務(wù)器的任務(wù)轉(zhuǎn)移到空閑的服務(wù)器,還可以輕松的進(jìn)行擴(kuò)容。這些改變都可以產(chǎn)生巨大的性能提升,很容易就可以比你現(xiàn)在的實(shí)現(xiàn)方案的最差性能提高10倍,對(duì)于總體性能來(lái)說(shuō)可能提高的不多,但是也是有實(shí)質(zhì)性的提升。

緩存動(dòng)態(tài)和靜態(tài)數(shù)據(jù)。如果你有一個(gè)負(fù)擔(dān)過(guò)重的 web 服務(wù)器,那么毫無(wú)疑問(wèn)肯定是你的應(yīng)用服務(wù)器,只通過(guò)緩存動(dòng)態(tài)數(shù)據(jù)就可以在峰值時(shí)間提高10倍的性能。緩存靜態(tài)文件可以提高幾倍的性能。

壓縮數(shù)據(jù)。使用媒體文件壓縮格式,比如圖像格式 JPEG,圖形格式 PNG,視頻格式 MPEG-4,音樂(lè)文件格式 MP3 可以極大的提高性能。一旦這些都用上了,然后壓縮文件數(shù)據(jù)可以將初始頁(yè)面加載速度提高兩倍。

優(yōu)化 SSL/TLS。安全握手會(huì)對(duì)性能產(chǎn)生巨大的影響,對(duì)它們的優(yōu)化可能會(huì)對(duì)初始響應(yīng)產(chǎn)生2倍的提升,特別是對(duì)于大量文本的站點(diǎn)。優(yōu)化 SSL/TLS 下媒體文件只會(huì)產(chǎn)生很小的性能提升。

使用 HTTP/2 和 SPDY。當(dāng)你使用了 SSL/TLS,這些協(xié)議就可以提高整個(gè)站點(diǎn)的性能。

對(duì) Linux 和 web 服務(wù)器軟件進(jìn)行調(diào)優(yōu)。比如優(yōu)化緩存機(jī)制,使用?;钸B接,分配時(shí)間敏感型任務(wù)到不同的線程池可以明顯的提高性能;舉個(gè)例子,線程池可以加速對(duì)磁盤敏感的任務(wù)近一個(gè)數(shù)量級(jí)。

如何創(chuàng)建大型高性能Web站點(diǎn)

使用合適的會(huì)話管理

第一個(gè)想到的擴(kuò)展系統(tǒng)的方法就是添加更多硬件。例如,使用兩臺(tái)服務(wù)器而不是一臺(tái)。這聽(tīng)著合理,但會(huì)產(chǎn)生潛在問(wèn)題:會(huì)話管理。這對(duì)Java程序來(lái)說(shuō)是很嚴(yán)重的問(wèn)題,在PHP中也會(huì)產(chǎn)生可延展性問(wèn)題, 對(duì)于數(shù)據(jù)庫(kù)的負(fù)載尤其如此。

會(huì)話被定義為單獨(dú)的最終用戶登錄或者連接一 段時(shí)間,其中通常會(huì)包含多個(gè)TCP/IP的HTTP連接、幾個(gè)Web頁(yè)面,通常還包括幾十個(gè)甚至上百個(gè)頁(yè)面元素,如框架、菜單、Ajax更新等。所有這些 HTTP請(qǐng)求都需要知道用戶是誰(shuí),才能滿足安全的要求,并向用戶傳送適當(dāng)?shù)膬?nèi)容,因?yàn)檫@些都是會(huì)話的組成部分。通常每個(gè)會(huì)話都會(huì)包括相互關(guān)聯(lián)的會(huì)話數(shù)據(jù), 如用戶名、用戶ID、歷史、購(gòu)物車、統(tǒng)計(jì)資料等等信息。

問(wèn)題在于,在有兩臺(tái)Web服務(wù)器和多個(gè)HTTP連接的情況下,用戶流量會(huì)在兩臺(tái)服務(wù)器之間分配和移動(dòng),服務(wù)器很難知道用戶是誰(shuí),并對(duì)所有數(shù)據(jù)進(jìn)行跟蹤,因?yàn)槊總€(gè)頁(yè)面或者頁(yè)面的組成部分都可能來(lái) 自不同的服務(wù)器。在PHP中,通常是這樣解決的,在第一次連接或登錄的時(shí)候就創(chuàng)建一個(gè)會(huì)話ID并將其放在Cookie中,然后這個(gè)Cookie會(huì)和每個(gè) HTTP請(qǐng)求一起發(fā)送。

這樣做帶來(lái)一個(gè)問(wèn)題,接下來(lái)每段PHP腳本 都需要基于ID來(lái)查找會(huì)話數(shù)據(jù)。由于PHP無(wú)法在執(zhí)行過(guò)程之間保持狀態(tài)(這與Java不同),這個(gè)會(huì)話數(shù)據(jù)需要存儲(chǔ)在某個(gè)地方,通常是在數(shù)據(jù)庫(kù)中。但是, 如果復(fù)雜的頁(yè)面需要在每個(gè)頁(yè)面載入過(guò)程中對(duì)其進(jìn)行十次查找(這是經(jīng)常要做的),那就意味著每個(gè)頁(yè)面都要執(zhí)行10次SQL查詢,這會(huì)導(dǎo)致數(shù)據(jù)庫(kù)上很大的負(fù)載。

在前面所舉的中國(guó)Internet用戶 0.01%的例子中,可能很容易在每秒內(nèi)僅僅為了管理會(huì)話就生成上百個(gè)查詢。解決方法是一直使用位于Cookie中的會(huì)話ID,并且使用像Memcached之類的服務(wù)來(lái)緩存會(huì)話數(shù)據(jù)以獲得高性能。

還要注 意其中存在安全性的問(wèn)題,因?yàn)楹诳涂?以偽造另一個(gè)用戶的會(huì)話ID,這是很容易找到或看到的,特別是在公用的Wi-Fi中。解決方法是對(duì)會(huì)話ID進(jìn)行恰當(dāng)?shù)募用芑蛘吆灻?,并將其與時(shí)間區(qū)間、 IP地址以及其他關(guān)鍵信息 像瀏覽器或者其他細(xì)節(jié)相綁定。在Internet上有很多不錯(cuò)的關(guān)于良好的會(huì)話管理的例子,你可以根據(jù)需要找到最適合的。

總是要考慮安全性

盡管編寫(xiě)像防止SQL注入和登錄安全之類的 代碼涉及很多安全問(wèn)題,但不幸的是,幾乎沒(méi)有人考慮過(guò)安全性,而那些考慮到的人也沒(méi)有對(duì)其進(jìn)行很好地理解。而本文要關(guān)注的是操作性的系統(tǒng)安全。對(duì)于這類安 全,我們的焦點(diǎn)集中在三個(gè)安全領(lǐng)域:防火墻、運(yùn)行的用戶以及文件訪問(wèn)權(quán)限。

除了配置專門的硬件防火墻(像Cisco的 ASA)之外,所有服務(wù)器都還應(yīng)該運(yùn)行像Iptables之類的防火墻,它會(huì)保護(hù)服務(wù)器免受其他威脅和攻擊。這些威脅和攻擊可能來(lái)自公共的 Internet、其他服務(wù)器或本地服務(wù)器,也包括使用VPN或者SSH通道的開(kāi)發(fā)和操作人員。我們僅對(duì)指定的IP開(kāi)放確實(shí)需要的端口。Iptables 可能會(huì)很復(fù)雜,但是有很多不錯(cuò)的模板,我們通??梢允褂盟鼈儊?lái)幫助客戶創(chuàng)建Iptables。例如,默認(rèn)的RedHat或者CentOS防火墻的配置說(shuō)明 只有10行,顯然并不實(shí)用。我們最佳實(shí)踐的Iptables配置大概有5頁(yè),這其中包含了Linux所能提供的最高級(jí)的安全防范。

所有公用的服務(wù),都應(yīng)該運(yùn)行在專門的用戶 下,如Apache。切記永遠(yuǎn)都不要使用Root用戶運(yùn)行,因?yàn)檫@會(huì)讓任何闖入到Apache的用戶接管整個(gè)服務(wù)器。如果Apache只是運(yùn)行在 Apache用戶下或者運(yùn)行在Nobody下,那么闖入Apache就不是一件容易的事情了。

Web服務(wù)器運(yùn)行或者服務(wù)的文件 (像.php和.html文件)對(duì)于Web服務(wù)器的用戶應(yīng)該是不可寫(xiě)的。這意味著Apache或者Nginx用戶不應(yīng)該擁有Web目錄的寫(xiě)權(quán)限。有很多方 法都可以做到這一點(diǎn),而最簡(jiǎn)單的就是將這些文件為其他用戶所有,然后讓Apache/Nginx等用戶歸屬于能夠使用640權(quán)限讀取文件的組中。這會(huì)防范 幾乎所有的黑客和針對(duì)頁(yè)面的攻擊。

此外,永遠(yuǎn)不要使用Ftp來(lái)上傳文件,特別是在公用的Wi-Fi環(huán)境中,因?yàn)樵谄渲泻诳秃苋菀妆I取用戶名和密碼。取而代之的是使用Sftp會(huì)更加安全。另外,每個(gè)雇員都應(yīng)該擁有自己的用戶ID和隨機(jī)密碼。

使用標(biāo)準(zhǔn)的路徑和安裝配置

一個(gè)令人討厭的部署問(wèn)題是,開(kāi)發(fā)者很少考慮 他們的軟件會(huì)被部署到生產(chǎn)Web服務(wù)器的什么位置,以及如何部署。我們看到過(guò)許多大型的系統(tǒng)將它們的PHP代碼部署在/home/xiaofeng或者 /web/code路徑下。事實(shí)上,這兩個(gè)路徑都是非常不標(biāo)準(zhǔn)的,并且會(huì)帶來(lái)操作和安全性的問(wèn)題。當(dāng)這些系統(tǒng)從開(kāi)發(fā)環(huán)境轉(zhuǎn)移到測(cè)試環(huán)境再到生產(chǎn)環(huán)境中時(shí), 因?yàn)槊總€(gè)安裝配置都是非標(biāo)準(zhǔn)的,所以經(jīng)常會(huì)出現(xiàn)問(wèn)題,這時(shí)就需要開(kāi)發(fā)者調(diào)整才能夠正常工作。

你應(yīng)該總是使用標(biāo)準(zhǔn)的安裝包和二進(jìn)制文件來(lái) 安裝像Apache之類的服務(wù)器。不要從源代碼編譯或者安裝Tarball,因?yàn)檫@會(huì)導(dǎo)致長(zhǎng)期穩(wěn)定性和管理上的問(wèn)題,另外在服務(wù)器上安裝多個(gè)不同的版本也 會(huì)造成混淆。

Web 站點(diǎn)應(yīng)該總是在指定的平臺(tái)和 Linux發(fā)布的標(biāo)準(zhǔn)路徑下進(jìn)行測(cè)試和部署,像RedHat 或者CentOS下的/var/www/html路徑。這有助于對(duì)系統(tǒng)進(jìn)行有效的權(quán)限管 理、備份、配置、監(jiān)控以及其他操作。

Web 服務(wù)器的日志應(yīng)該存放在/var /logs或者/var/logs/app_name下,而不應(yīng)該位于主代碼區(qū)域。這樣做的原因不僅僅是因?yàn)檫@些標(biāo)準(zhǔn)的路徑很重要,更應(yīng)該關(guān)注的是,恰當(dāng) 地配置服務(wù)器會(huì)將/var配置為分離的文件系統(tǒng)。如果應(yīng)用程序突然寫(xiě)入了大量日志并占用所有磁盤空間,由于我們做了以上的配置就不會(huì)導(dǎo)致系統(tǒng)崩潰,或者其 他嚴(yán)重的問(wèn)題。如果日志位于其他位置,就可能會(huì)產(chǎn)生問(wèn)題。

總是使用日志

在Web系統(tǒng)中做多少日志都不為過(guò)。所有系統(tǒng)都應(yīng)該將重要的數(shù)據(jù)寫(xiě)入到日志中,不管是它們自己的日志還是系統(tǒng)的Syslog。Cron的Job以及其他Shell腳本或者C語(yǔ)言的程序,對(duì)日志都有 相應(yīng)標(biāo)準(zhǔn)以及簡(jiǎn)單的函數(shù)。在Shell腳本中,只需要使用 Logger命令就可以實(shí)現(xiàn)日志的寫(xiě)入。在腳本啟動(dòng)/停止、重要的腳本執(zhí)行以及實(shí)時(shí)數(shù)據(jù)產(chǎn)生的 情況下都要執(zhí)行寫(xiě)入日志操作。這樣出現(xiàn)問(wèn)題的時(shí)候,查看主要的系統(tǒng)日志就可以很容易地看到發(fā)生了什么。

大型系統(tǒng)經(jīng)常會(huì)使用專門的工具如 Local5來(lái)記錄日志,并配置Syslog或者Syslog-ng來(lái)將其存放在單獨(dú)的文件中,這樣會(huì)更容易使用。需要注意的是,Syslog工具和 Logger(以及任何Syslog調(diào)用)默認(rèn)優(yōu)先使用user.notice,如有必要,你可以對(duì)其進(jìn)行調(diào)整。

一個(gè)好的系統(tǒng)會(huì)對(duì)程序進(jìn)行配置,用來(lái)打開(kāi)或者關(guān)閉日志,并可以選擇在每模塊或者功能的級(jí)別上應(yīng)用不同級(jí)別的日志。這使得我們可以記錄非常詳細(xì)和強(qiáng)大的日志,用來(lái)分析和調(diào)試在生產(chǎn)操作中所發(fā)生的問(wèn)題。

使用良好的數(shù)據(jù)庫(kù)設(shè)計(jì)和SQL

在任何系統(tǒng)中,數(shù)據(jù)庫(kù)通常是最大的性能瓶 頸。而影響數(shù)據(jù)庫(kù)性能的最大兩個(gè)問(wèn)題是數(shù)據(jù)庫(kù)設(shè)計(jì)和SQL代碼質(zhì)量。很多系統(tǒng)都擁有良好的或者至少是可用的數(shù)據(jù)庫(kù)設(shè)計(jì),但由于沒(méi)有經(jīng)過(guò)適當(dāng)?shù)男阅軠y(cè) 試,SQL代碼質(zhì)量通常都會(huì)很差。這樣的SQL代碼在開(kāi)發(fā)環(huán)境中可能運(yùn)行很快,因?yàn)槠渲兄挥行?shù)據(jù)集和最小的負(fù)載。但是當(dāng)成千上萬(wàn)的用戶同時(shí)讀取數(shù)據(jù)庫(kù)中 上百萬(wàn)條記錄的時(shí)候,它就很可能會(huì)崩潰。

不幸的 是,這些問(wèn)題一開(kāi)始并不明顯,直到系統(tǒng)增大、突然開(kāi)始崩潰的時(shí)候才會(huì)顯現(xiàn)出來(lái)。在增大的過(guò)程中,數(shù)據(jù)庫(kù)系統(tǒng)看起來(lái)運(yùn)行得很快(因?yàn)閿?shù)據(jù)都位于內(nèi)存中,而且很少有并發(fā)的查詢),并且對(duì)用戶的響 應(yīng)也很快,但實(shí)際上它的內(nèi)部運(yùn)行效率很低。這并不重要,我們關(guān)注的是在系統(tǒng)增大并遇到性能問(wèn)題之前找到這些問(wèn)題并加以解決。

關(guān)于這個(gè)問(wèn)題有很多不錯(cuò)的書(shū)和站點(diǎn)進(jìn)行了解析,其中的關(guān)鍵工具包括慢查詢?nèi)罩?、INNODB狀態(tài)系統(tǒng),以及描述當(dāng)前性能的MySQL統(tǒng)計(jì)信息。我們見(jiàn)到過(guò)很多系統(tǒng)每秒會(huì)讀取500,000條數(shù)據(jù), 這是出現(xiàn)SQL問(wèn)題的明顯預(yù)兆,但公司往往對(duì)其一無(wú)所知直到服務(wù)器開(kāi)始崩潰。

MySQL系統(tǒng)應(yīng)該對(duì)所有數(shù)據(jù)使用 INNODB存儲(chǔ)引擎,因?yàn)镮NNODB與之前的MyISAM相比,運(yùn)行得更快、更穩(wěn)定,并且管理性能和備份工作也更加容易和快捷。在主配置文件 中,INNODB應(yīng)該被設(shè)置為默認(rèn)的數(shù)據(jù)庫(kù)引擎,并且系統(tǒng)應(yīng)該不時(shí)地進(jìn)行檢查,看是否意外創(chuàng)建了MyISAM的表。

總要擁有良好的DB配置和備份

很多公司都沒(méi)有良好的備份機(jī)制,也不知道如 何恰當(dāng)?shù)赝瓿蛇@項(xiàng)工作。MySQL的Dump是不夠的,因?yàn)樽詈玫膫浞莘椒ㄊ鞘褂肔VM快照和INNODB對(duì)系統(tǒng)進(jìn)行熱備份,從而得到超快的速度和超高的 可靠性。

另外,在將所有備份文件從服務(wù)器上轉(zhuǎn)移出來(lái) 之前要進(jìn)行壓縮和加密。另外還要確保擁有設(shè)計(jì)合理的MySQL配置。MySQL默認(rèn)安裝使用說(shuō)明中只有5~10行關(guān)于配置的說(shuō)明,這根本不適合開(kāi)發(fā)使用。 而我們提供給客戶的最佳實(shí)踐文檔足足有10頁(yè)那么長(zhǎng)。文檔中大約有100種有用的關(guān)于安全、性能和穩(wěn)定性問(wèn)題的設(shè)定,包括防止數(shù)據(jù)敗壞,其中很多設(shè)定都是非常重要的。

使用讀/寫(xiě)數(shù)據(jù)庫(kù)分離

隨著系統(tǒng)變得越來(lái)越龐大,特別是當(dāng)它們擁有 很差的SQL時(shí),一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器通常不足以處理負(fù)載。但是多個(gè)數(shù)據(jù)庫(kù)意味著重復(fù),除非你對(duì)數(shù)據(jù)進(jìn)行了分離。更一般地,這意味著建立主/從副本系統(tǒng),其中程序會(huì)對(duì)主庫(kù)編寫(xiě)所有的Update、Insert和Delete變更語(yǔ)句,而所有Select的數(shù)據(jù)都讀取自從數(shù)據(jù)庫(kù)(或者多個(gè)從數(shù)據(jù)庫(kù))。

盡管概念上很簡(jiǎn)單,但是想要合理、精確地實(shí) 現(xiàn)并不容易,這可能需要大量的代碼工作。因此,即便在開(kāi)始時(shí)使用同一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,也要盡早計(jì)劃在PHP中使用分離的DB連接來(lái)進(jìn)行讀寫(xiě)操作。如果正確 地完成該項(xiàng)工作,那么系統(tǒng)就可以擴(kuò)展到2臺(tái)、3臺(tái)甚至12臺(tái)服務(wù)器,并具備高可用性和穩(wěn)定性。

使用類似Memcached,Redis之類的數(shù)據(jù)庫(kù)緩存

即便有了好的數(shù)據(jù)庫(kù)設(shè)計(jì)、SQL和讀寫(xiě)分離,大型的系統(tǒng)仍然需要更快的性能,特別是對(duì)會(huì)話狀態(tài)、好友列表以及BBS文字之類的東西。為了達(dá)到這個(gè)目的,我們可以使用像MemCached之類的數(shù) 據(jù)緩存,它是一個(gè)高性能的簡(jiǎn)單數(shù)據(jù)緩存,已經(jīng)被所有最大型的站點(diǎn)使用。但是要小心的是,不要100%依賴于一臺(tái)Memcache服務(wù)器來(lái)提高性能,因?yàn)槿?果那臺(tái)服務(wù)器崩潰了,就會(huì)破壞整個(gè)系統(tǒng)的性能。在這種情況下,應(yīng)該使用2~3臺(tái)Memcache服務(wù)器形成簇集架構(gòu),并且有選擇地包含一個(gè)緩存準(zhǔn)備過(guò)程, 如果緩存服務(wù)器重啟,需要重新載入數(shù)據(jù),它能夠快速地載入緩存。

構(gòu)建測(cè)試和開(kāi)發(fā)環(huán)境

很多公司只有開(kāi)發(fā)者的桌面系統(tǒng)和他們的生產(chǎn) 服務(wù)器。當(dāng)系統(tǒng)變得越來(lái)越大、越來(lái)越復(fù)雜時(shí),測(cè)試和管理代碼就會(huì)導(dǎo)致嚴(yán)重的問(wèn)題。最佳的實(shí)踐是擁有兩個(gè)測(cè)試系統(tǒng),一個(gè)用于開(kāi)發(fā)者的代碼和功能的整合測(cè)試, 另一個(gè)要與生產(chǎn)環(huán)境完全一致,從而更容易向生產(chǎn)環(huán)境平滑地過(guò)渡。幸運(yùn)的是,現(xiàn)在使用云計(jì)算(或者私有云)可以輕松達(dá)到這一點(diǎn)。一個(gè)5~10臺(tái)服務(wù)器的生產(chǎn) 環(huán)境,可以很容易地在辦公室或者IDC中使用一臺(tái)服務(wù)器來(lái)復(fù)制,從而用于測(cè)試,而這臺(tái)服務(wù)器我們可以用于多個(gè)客戶的項(xiàng)目。

使用版本控制

要對(duì)一切使用版本控制,包括測(cè)試和生產(chǎn)環(huán)境的部署。很多開(kāi)發(fā)者都使用SVN或者類似的方法。在理想狀態(tài)下,這些方法可以被用于所有代碼、腳本、HTML、圖片、配置、文檔和測(cè)試。版本控制應(yīng)該是代碼轉(zhuǎn)移到測(cè)試環(huán)境的必經(jīng)之路,而不是簡(jiǎn)單地復(fù)制或者使用tar文件,因?yàn)檫@二者都是不可靠的。開(kāi)發(fā)者應(yīng)該將所有一切都簽入,打上標(biāo)簽,然后將它們簽 出到測(cè)試系統(tǒng)。如果所有都沒(méi)問(wèn)題,那么它們會(huì)將該版本簽出到生產(chǎn)環(huán)境。

分布式集群

過(guò)去當(dāng)運(yùn)行一個(gè)大的web應(yīng)用時(shí)候意味著需要運(yùn)行一個(gè)大型的web服務(wù)器。因?yàn)槟愕膽?yīng)用吸引了大量的用戶,你將不得不在你的服務(wù)器里增加更多的內(nèi)存和處理器。今天,“大型服務(wù)器”模式已經(jīng)過(guò)去,取而代之的是大量的小服務(wù)器,使用各種各樣的負(fù)載均衡技術(shù)。

“更多小服務(wù)器”的優(yōu)勢(shì)超過(guò)過(guò)去的“大型服務(wù)器”模式體現(xiàn)在兩個(gè)方面:

1. 如果服務(wù)器宕機(jī),那么負(fù)載均衡系統(tǒng)將停止請(qǐng)求到宕機(jī)的服務(wù)器,轉(zhuǎn)而分發(fā)負(fù)載到其他正常運(yùn)行的服務(wù)器上。

2. 擴(kuò)展你的服務(wù)器更加容易。你要做的僅僅是加入新的服務(wù)器到負(fù)載均衡系統(tǒng)。不需要中斷你的應(yīng)用運(yùn)行。

所以,把握住這個(gè)機(jī)會(huì)。當(dāng)然,代價(jià)就是這要求你的應(yīng)用開(kāi)發(fā)時(shí)增加一點(diǎn)復(fù)雜度。這就是本文要覆蓋的內(nèi)容。

這時(shí)你可能對(duì)自己說(shuō):“但是我怎么知道我正在使用負(fù)載均衡呢?”。最誠(chéng)實(shí)的回答是,如果你正在問(wèn)這個(gè)問(wèn)題,那么答案是你多半沒(méi)有在使用負(fù)載均衡系統(tǒng)并且你的系統(tǒng)不需要考慮這個(gè)問(wèn)題。大多數(shù)情況,當(dāng)應(yīng)用成長(zhǎng)足夠大的規(guī)模時(shí),負(fù)載均衡就需要明確提出和設(shè)置了。然而,我也偶爾看見(jiàn)虛擬主機(jī)公司為客戶的應(yīng)用做這個(gè)負(fù)載均衡,或者像下面描述的那樣要自己來(lái)做。

注意,我一直提“web應(yīng)用”而不是website,這是想?yún)^(qū)分“web應(yīng)用”是那些復(fù)雜的站點(diǎn)往往涉及服務(wù)器端編程和數(shù)據(jù)庫(kù),而不是website那樣只顯示簡(jiǎn)單的靜態(tài)內(nèi)容。

1. PHP文件

第一個(gè)問(wèn)題是,如果你有大量的小型服務(wù)器,你怎么把你的php文件上傳到所有的服務(wù)器上?有如下的方法供你參考:

◆分別上傳所有的文件到每一個(gè)服務(wù)器 , 這種方法帶來(lái)的問(wèn)題是:想像一下你有20個(gè)服務(wù)器,那么上傳過(guò)程中這將很容易導(dǎo)致錯(cuò)誤,并且更新時(shí)極有可能導(dǎo)致不同服務(wù)器上有不同版本的文件。

◆使用 ‘rsync ‘ (或類似的軟件) . 這樣的工具能同步本地目錄和多個(gè)遠(yuǎn)程主機(jī)目錄上的文件。

◆使用版本控制軟件(如subversion ) . 這是我最喜歡的方法。用它可以很好地維護(hù)我得代碼,當(dāng)發(fā)布我的應(yīng)用時(shí),可以在每一個(gè)服務(wù)器上運(yùn)行svn update命令同步。這種方法也使切換服務(wù)器得代碼到過(guò)去的某一個(gè)版本更加容易。

◆使用一個(gè)文件服務(wù)器(你可能發(fā)現(xiàn)NFS 非常適合做這件事情). 這種方式是使用一個(gè)文件服務(wù)器來(lái)存放你的web應(yīng)用. 當(dāng)然,如果你的文件服務(wù)器宕機(jī),那么多所有你的站點(diǎn)將不能使用。這時(shí),你就需要花費(fèi)更多的開(kāi)支來(lái)恢復(fù)它。

選擇哪種方式依賴于你的需求和你掌握的技能。如果你使用版本控制系統(tǒng),那么你可能得計(jì)劃一個(gè)方法如果同時(shí)執(zhí)行一個(gè)更新命令更新所有服務(wù)器上的代碼。然而,如果使用文件服務(wù)器,你就要實(shí)現(xiàn)一些失敗恢復(fù)機(jī)制,防止萬(wàn)一服務(wù)器宕機(jī)導(dǎo)致請(qǐng)求失敗。

2. 文件上傳

當(dāng)只有一臺(tái)服務(wù)器時(shí),文件上傳不是一個(gè)問(wèn)題。但是當(dāng)我們有多臺(tái)服務(wù)器時(shí),那么上傳的文件應(yīng)該怎么存放呢?上傳文件的問(wèn)題和跨服務(wù)器php文件存儲(chǔ)是類似的。下面是幾種可能的方案:

◆把文件存儲(chǔ)到數(shù)據(jù)庫(kù)中。大多數(shù)數(shù)據(jù)允許存儲(chǔ)二進(jìn)制數(shù)據(jù)。當(dāng)你請(qǐng)求文件下載時(shí),訪問(wèn)數(shù)據(jù)把二進(jìn)制數(shù)據(jù)和相應(yīng)的文件名和類型輸出給用戶。在使用這種方案前應(yīng)該考慮數(shù)據(jù)庫(kù)怎樣存儲(chǔ)你的文件。該方法的問(wèn)題在于如果數(shù)據(jù)庫(kù)服務(wù)器宕機(jī)將使文件不可用。

◆在一個(gè)文件服務(wù)器上存儲(chǔ)上傳的文件 . 與前面的介紹一樣,你要安裝一個(gè)文件服務(wù)器讓所有web服務(wù)器共享,把所有上傳的文件上傳到這里,上傳后所有的web服務(wù)器就都可以使用它。但是,如果文件服務(wù)器宕機(jī),那么可能發(fā)生圖像文件下載中斷。

◆設(shè)計(jì)你自己的上傳機(jī)制傳輸文件到服務(wù)器到每一個(gè)服務(wù)器 . 這個(gè)方法沒(méi)有單個(gè)文件服務(wù)器或者數(shù)據(jù)庫(kù)方案的缺陷,但是將增加你代碼的復(fù)雜度。例如,如果上傳到多個(gè)服務(wù)器過(guò)程中,服務(wù)器宕機(jī),你要怎么處理?

用數(shù)據(jù)庫(kù)存儲(chǔ)上傳文件但是設(shè)計(jì)一個(gè)文件緩存機(jī)制是一個(gè)不錯(cuò)的方案。當(dāng)服務(wù)器接收一個(gè)文件下載請(qǐng)求時(shí),首先檢查緩存系統(tǒng)中是否有該文件,如果發(fā)現(xiàn)那么從緩存系統(tǒng)下載,否則從數(shù)據(jù)庫(kù)讀取并把它緩存到文件系統(tǒng)中。

3. 會(huì)話(Sessions)

如果你熟悉php的session 處理,你將可能知道默認(rèn)情況下,它存儲(chǔ)session數(shù)據(jù)在服務(wù)器的臨時(shí)文件里。而且,這個(gè)文件僅僅在你請(qǐng)求處理的那個(gè)服務(wù)器上,但是接下來(lái)的請(qǐng)求可能被另外一個(gè)服務(wù)器處理,這將在另一個(gè)服務(wù)器上生成新的session。這導(dǎo)致session頻繁地不被識(shí)別,如登錄用戶總是要求重新登錄。

我推薦的方案是,要么重新php內(nèi)建的session處理機(jī)制存儲(chǔ)session數(shù)據(jù)到數(shù)據(jù)庫(kù),或者實(shí)現(xiàn)你自己的機(jī)制保證發(fā)送一個(gè)用戶的請(qǐng)求到同一臺(tái)服務(wù)器。

4. 配置(Configuration)

盡管這個(gè)話題不是和php特別相關(guān),我感覺(jué)還是有必要提及。當(dāng)運(yùn)行集群服務(wù)器時(shí),用某種方法保持服務(wù)器之間的配置文件同步是一個(gè)好主意。如果配置文件不一致,可能導(dǎo)致一些非常奇怪的斷斷續(xù)續(xù)的行為導(dǎo)致很難排查這些問(wèn)題。

我推薦使用版本控制系統(tǒng)單獨(dú)管理他們。這樣你可以為不同的項(xiàng)目安裝存儲(chǔ)不同的php配置文件,也可以保持所有服務(wù)器配置文件同步。

5. 日志(Logging)

像配置問(wèn)題一樣,logging不是僅僅和php相關(guān)。但是對(duì)于保持服務(wù)器健康運(yùn)行它仍然是非常重要的。沒(méi)有正確的logging系統(tǒng),你怎么知道如果PHP代碼開(kāi)始產(chǎn)生錯(cuò)誤(在系統(tǒng)正式運(yùn)行時(shí),你總是關(guān)閉display_errors 設(shè)置,不是嗎?)

有幾種方法你可以實(shí)現(xiàn)logging:

1. 在每一個(gè)服務(wù)器上記錄日志。 這是最簡(jiǎn)單的方法。每一個(gè)機(jī)器僅僅記錄一個(gè)文件。好處是簡(jiǎn)單,可能只要很少的配置。但是,隨著服務(wù)器數(shù)量的增多,監(jiān)控每臺(tái)服務(wù)器上的日志文件將變得非常困難。

2. 記錄日志到一個(gè)共享 這種方法每一個(gè)服務(wù)器仍然有這個(gè)日志文件,但是他們通過(guò)共享機(jī)制被存儲(chǔ)在一個(gè)中央文件服務(wù)器上,這將使監(jiān)控日志變得更簡(jiǎn)單。該方案的問(wèn)題在于,如果文件服務(wù)器不可用將導(dǎo)致一個(gè)簡(jiǎn)單的日志不能寫(xiě)入問(wèn)題最終導(dǎo)致整個(gè)應(yīng)用崩潰。

3. 記錄日志到logging服務(wù)器 你可以使用一個(gè)logging軟件,如syslog 來(lái)把所有的日志寫(xiě)到一個(gè)中央服務(wù)器。盡管這個(gè)方法要求更多的配置,但是他也提供了最健壯的方案。

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
精品成人免费自拍视频| 欧美图片第一页| jizz免费视频| 国产视频手机在线观看| 九一在线免费观看| 日本午夜大片a在线观看| 国产精品日本欧美一区二区三区| 久久精品视频中文字幕| 欧美69xxxxx| 性欧美hd调教| 中文字幕你懂得| bdsm精品捆绑chinese| 亚洲国产美女视频| 久久久国产一级片| 日韩电影网1区2区| 正在播放91九色| 日本新janpanese乱熟| 天天做天天爱天天爽综合网| 秋霞视频一区二区| 国产福利影院在线观看| 天堂在线中文在线| 国产麻豆天美果冻无码视频| 久久影院中文字幕| 永久免费在线观看视频| 亚洲国产成人久久综合| 8×8x拔擦拔擦在线视频网站| 97久久人人超碰caoprom欧美| bl视频在线免费观看| 嫩草影院发布页| 黄网av在线| 欧美日韩成人| 欧美亚洲一区三区| 亚洲美女自拍视频| 91在线你懂的| 国产h片在线观看| www.四虎影视.com| 成人午夜激情av| 日韩激情视频在线观看| 国产不卡高清在线观看视频| 国产女人18毛片水真多| 白白色在线观看| 欧美精品一区二区性色a+v| 国产精品传媒在线| 欧美午夜电影一区二区三区| 日本乱人伦a精品| 亚洲欧美日韩一区二区三区在线观看| 欧美主播一区二区三区美女| 国产美女亚洲精品7777| 亚洲综合最新在线| 五月激情婷婷在线| 亚洲人成精品久久久| 日韩国产高清一区| 精品人妻一区二区三区蜜桃视频| 久久久久国产一区二区三区| 国产对白在线播放| 欧洲精品中文字幕| www.成人黄色| 成年女人免费视频| jizzjizz日本少妇| 国产精品丝袜视频| 欧美性生交xxxxx久久久| 色婷婷av一区二区三区丝袜美腿| 四虎永久免费| 蜜臀av性久久久久蜜臀av| 中文字幕中文字幕在线中文字幕三区| 日本一区二区免费在线| 7777精品久久久大香线蕉| 国产伦精品一区二区三区免费迷| 精品一区二区三区影院在线午夜| 青青草成人影院| 中文xxx视频| 国精产品一区一区三区四川| 欧美最猛性xxxxx(亚洲精品)| 免费永久在线观看黄网| 天堂va在线高清一区| asian性开放少妇pics| 俺去亚洲欧洲欧美日韩| 久久久成人免费视频| 日韩视频在线观看免费视频| 国产熟女一区二区| 狠狠入ady亚洲精品经典电影| 成人资源www网在线最新版| 欧美精品一区二区三区一线天视频| 九色porny丨首页入口在线| 精品国偷自产在线| 久久精品国产亚洲AV无码男同| 亚洲成人不卡| 午夜欧美视频在线观看| 久久精品一区四区| 亚洲美女在线国产| 亚洲午夜免费视频| 精品国产一区二区三区久久| 欧美mv和日韩mv的网站| 久久久久久久综合狠狠综合| 亚洲欧美高清视频| 久久电影网站| 中文字幕日韩精品在线| 天天摸夜夜操| 最新理论片影院| 久久久久久久久丰满| 欧美在线国产精品| 中文资源在线网| 亚洲人成电影网站色xx| 粉嫩aⅴ一区二区三区四区五区| 国产精品第100页| 97影院理论| 久久久久久免费毛片精品| 免费污污网站| 久久www人成免费看片中文| 国产亚洲高清在线观看| 人人狠狠综合久久亚洲婷婷| 亚洲高清福利视频| jizzjizzjizz孕妇| 欧美色精品天天在线观看视频| 两个人看的无遮挡免费视频| 美女性感视频久久久| 一二三中文字幕在线| 天天久久综合| 欧美成人精品一区二区三区| 国产精品国产三级国产普通话对白| 亚洲男人天天操| 婷婷激情五月网| 日本高清中文字幕二区在线| 91蝌蚪精品视频| 中文字幕亚洲综合| 在线观看免费中文字幕| 免费黄色国产视频| 欧美变态xxxx| 久久亚洲国产| 蜜桃视频一区二区三区| 精品无人区乱码1区2区3区免费| xx免费视频| 一区二区三区四区不卡| 99精品视频免费| 日韩精品一区二区不卡| 中文字幕在线观看一区二区| 天天躁日日躁成人字幕aⅴ| 96精品视频| 黄色免费影视| 国产无套内射久久久国产| 免费影视亚洲| 日韩成人av一区二区| 欧美在线短视频| 国产精品18| 夜夜亚洲天天久久| 欧美日韩亚洲一区二| 国产.com| 久久一区中文字幕| 91亚洲精品一区| 日韩精彩视频在线观看| 国产午夜精品一区在线观看| 风流少妇一区二区三区91| 亚洲三区在线观看无套内射| 亚洲不卡1卡2卡三卡2021麻豆| 日本三级欧美三级| 久久久久国产精品一区二区| 亚洲七七久久综合桃花剧情介绍| 蜜桃视频免费观看一区| 中文字幕av影院| 中文字幕在线观看| 精品少妇人妻一区二区黑料社区| 国产亚洲精品7777| 老师我好爽再深一点的视频| 精品美女视频在线观看免费软件| 亚洲色欲色欲www在线观看| 色婷婷av一区二区三区之e本道| 99视频精品全部免费看| 欧美性xxxxx极品娇小| 欧美日韩成人高清| 牛牛在线精品视频| 亚洲国产成人av在线| 5g成人永久免费影院| av电影一区二区三区| 黄色影片网站| 亚洲国产日韩av| 毛片一级免费一级| 美国黄色片视频| 成人在线视频国产| 日韩大片一区二区| 欧美精品国产精品| 超碰97av在线| 日产精品一线二线三线芒果| 欧美性受xxxx黑人猛交| 狠狠v欧美ⅴ日韩v亚洲v大胸| 欧美性感美女一区二区| 亚洲精品美女在线观看| www中文字幕在线观看| 精品91久久久久| 成人免费高清完整版在线观看| 久久精品午夜一区二区福利| 亚洲欧美一级二级三级| 99re视频在线播放| 欧美片在线播放| 欧洲午夜精品久久久| 精品国产一区二区三区四| 精品无码一区二区三区在线| 日韩高清国产一区在线观看| 欧美最猛黑人xxxx黑人猛叫黄| av在线播放国产| 中文字幕一区综合| 亚洲欧美一区二区激情| 国产三区在线播放| 成人免费影院| 美腿丝袜亚洲色图| 欧美又大又硬又粗bbbbb| 中文字幕第四页| 久久一区亚洲| 亚洲高清不卡在线观看| 欧美久久久久久久久久久久久久| 亚洲国产精品女人| 免费成人美女在线观看| 成人一区二区电影| 最近2019免费中文字幕视频三| 小明看看成人免费视频| 久久久影视传媒| 亚洲免费视频播放| 亚洲成人一品| 亚洲成人免费在线| 国产在线观看18| 超碰成人在线观看| 综合视频一区| 日韩欧美在线免费观看| 精品人妻中文无码av在线| 一本之道久久| 九义人在线观看完整免费版电视剧| 毛片大全在线观看| 日韩 欧美 高清| 看亚洲a级一级毛片| av手机在线观看| 国产1区2区3区中文字幕| 成人精品福利视频| 亚洲欧美综合一区二区| 国产精品久久久久久久久久10秀| 亚洲国产999| 国产一区二区三区免费在线| 国产日韩欧美综合在线| 亚洲日本在线看| 国产丝袜一区视频在线观看| 日韩一区视频在线| 国产精品视频九色porn| 久久影视免费观看| 美女张开让男人捅| jizz免费观看| 亚洲一级影院| 黄色网页在线| 97在线观看免费高清| 欧美午夜美女看片| 三级a三级三级三级a十八发禁止| 亚洲精品少妇一区二区| 91精品国产福利| 国产精品99蜜臀久久不卡二区| 亚洲女同中文字幕| 亚洲精品wwww| 国内国产精品天干天干| 色涩成人影视在线播放| 亚洲影院在线播放| 欧美老年两性高潮| 欧美xxx视频| 欧美sm视频| 亚洲欧美丝袜中文综合| 成人免费看片39| 久久久久久久久亚洲精品| 日本精品一区在线观看| 日韩激情文学| 国产免费一区二区三区最新6| 色偷偷亚洲女人天堂观看欧| 老牛嫩草一区二区三区日本| 免费看日本一区二区| 亚洲色图欧洲色图婷婷| 波多野结衣一区二区在线| 懂色av蜜臀av粉嫩av永久| 中文字幕另类日韩欧美亚洲嫩草| 日韩一区二区三区视频| 日本公妇乱淫免费视频一区三区| 91麻豆精品国产91久久久久久久久| 成人午夜国产| 国产aⅴ精品一区二区三区久久| 欧美最猛性xxxxx(亚洲精品)| 亚洲精品国产高清久久伦理二区| 污污视频网站在线| 国产成人生活片| 美女扒开尿口让男人操| 欧美精品一区三区| 97香蕉超级碰碰久久免费的优势| 欧美亚洲国产一区在线观看网站| 国产亚洲第一的欧洲日产| 国产美女www爽爽爽| 成人午夜小视频| 欧美视频xxxx| 一级片aaaa| 亚洲av人人澡人人爽人人夜夜| 欧美日韩国产美| 美女精品导航| 91香蕉国产线在线观看| 91欧美国产| 欧美又粗又大又爽| 91蜜桃网站免费观看| 久久精品在线免费视频| 国产成人av在线影院| 久艹视频在线免费观看| 女人黄色免费在线观看| 午夜精品久久久内射近拍高清| 性xxxfllreexxx少妇| 日韩欧美久久一区| 色琪琪原网站亚洲香蕉| 久久精品123| 精品调教chinesegay| 日产国产精品精品a∨| 91久久精品www人人做人人爽| 97在线观看免费观看| 国产精品人成电影| 天天操中文字幕视频| 欧美在线一卡| aaa在线免费观看| 女同互添互慰av毛片观看| 中文字幕av无码一区二区三区| 97热精品视频官网| 免费成人直播| 16—17女人毛片毛片| 亚洲天堂男人网| 国产亚洲一区二区三区在线播放| 91国语精品自产拍| 91婷婷韩国欧美一区二区| 欧美福利视频在线观看| 欧美精品午夜| 国产精品热久久久久夜色精品三区| 蜜桃色一区二区三区| 自拍偷拍在线视频|