内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

redis在高并發(fā)下的性能講解-創(chuàng)新互聯(lián)

這篇文章主要介紹“redis在高并發(fā)下的性能講解”,在日常操作中,相信很多人在redis在高并發(fā)下的性能講解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”redis在高并發(fā)下的性能講解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

成都創(chuàng)新互聯(lián)公司服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行成都做網(wǎng)站、成都網(wǎng)站建設(shè)、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

前言:

最近上手了一個項目,我負責該項目的架構(gòu)設(shè)計與實現(xiàn)。本來公司做了很多給公司以外的人使用的API,但是在外人使用的時候,接口的鏈接是怎樣就給別人怎么樣,沒有加密也沒有做并發(fā)控制,接口程序所在的機器在哪,給別人的IP就在哪,而且沒有平臺進行管理。因此我清楚地知道,這些接口的價值很難被發(fā)現(xiàn)(哪個接口別人用的比較多,哪個接口別人用的比較少)。

僅僅針對”監(jiān)控“的這一需求,我們引入了redis作為中間層,首先我們完善了用戶使用接口的注冊流程,通過用戶信息和地址,hash出一個key,這個key是對應(yīng)著一個地址的,把這個(key - 地址)對存在了redis里面。其次是nginx,nginx在我們的項目里面的流程大概是這樣:

1、用戶注冊之后獲取到他的key,通過包含了key的跟原本的url完全不同的url來訪問

2、nginx捕獲到用戶特殊的key,然后程序根據(jù)這個key從redis中取出目標地址,再由nginx代替用戶訪問真正的地址,繼而返回。

(這個過程好處是很多的)

(1)、隱藏了真實的地址,程序可以在上游服務(wù)器之外的地方干預(yù)用戶的訪問,提高安全性,干預(yù)過程可以很復雜

(2)、獲取用戶的信息,并將其存回redis,上游服務(wù)器通過定時程序?qū)⒋嬖趓edis中的日志持久化進oracle并刪除,然后進一步分析和可視化

問題來了

這個項目還處于測試階段,資源是一臺window server 服務(wù)器,和centos6.5服務(wù)器,測試階段10秒內(nèi)大概有10萬的并發(fā)量,剛部署上去的一兩天還是沒有問題的,接下來卻出現(xiàn)了redis連接不上的情況。查看進程訪問,會出現(xiàn)下面的情況。(window server 下)

redis在高并發(fā)下的性能講解

出現(xiàn)很多FiN_WAIT_2的TCP鏈接。

(學習視頻分享:redis視頻教程)

分析

一、redis是使用單線程處理連接的,意味著它絕對會出現(xiàn)下面二所說的情況。

二、很明顯這是由于nginx和redis之間有很多沒有釋放的資源造成的,查看這個TCP的狀態(tài)FIN_WAIT_2,解釋一下:

在HTTP應(yīng)用中,存在一個問題,SERVER由于某種原因關(guān)閉連接,如KEEPALIVE的超時,這樣,作為主動關(guān)閉的SERVER一方就會進入 FIN_WAIT2狀態(tài),但TCP/IP協(xié)議棧有個問題,F(xiàn)IN_WAIT2狀態(tài)是沒有超時的(不象TIME_WAIT狀態(tài)),所以如果CLIENT不關(guān)閉,這個FIN_WAIT_2狀態(tài)將保持到系統(tǒng)重新啟動,越來越多的FIN_WAIT_2狀態(tài)會致使內(nèi)核crash。

好吧,大學沒有好好念書,下面是http連接的狀態(tài)變化

客戶端狀態(tài)遷移

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSEDb.

服務(wù)器狀態(tài)遷移

CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

有缺陷的客戶端與持久連接

有一些客戶端在處理持久連接(akakeepalives)時存在問題。當連接空閑下來服務(wù)器關(guān)閉連接時(基于KeepAliveTimeout指令),

客戶端的程序編制使它不發(fā)送FIN和ACK回服務(wù)器。這樣就意味著這個連接 將停留在FIN_WAIT_2狀態(tài)直到以下之一發(fā)生:

客戶端為同一個或者不同的站點打開新的連接,這樣會使它在該個套接字上完全關(guān)閉以前的連接。

用戶退出客戶端程序,這樣在一些(也許是大多數(shù)?)客戶端上會使操作系統(tǒng)完全關(guān)閉連接。

FIN_WAIT_2超時,在那些具有FIN_WAIT_2狀態(tài)超時設(shè)置的服務(wù)器上。

如果你夠幸運,這樣意味著那些有缺陷的客戶端會完全關(guān)閉連接并釋放你服務(wù)器的資源。

然而,有一些情況下套接字永遠不會完全關(guān)閉,比如一個撥號客戶端在關(guān)閉客戶端程序之前從ISP斷開。

此外,有的客戶端有可能空置好幾天不創(chuàng)建新連接,并且這樣在好幾天里保持著套接字的有效即使已經(jīng)不再使用。這是瀏覽器或者操作系統(tǒng)的TCP實現(xiàn)的Bug。

產(chǎn)生原因有:

1、長連接并且當連接一直處于IDLE狀態(tài)導致SERVERCLOSE時,CLIENT編程缺陷,沒有向SERVER 發(fā)出FIN和ACK包

2、APACHE1.1和APACHE1.2增加了linger_close()函數(shù),前面的帖子有介紹,這個函數(shù)可能引起了這個問題(為什么我也不清楚)

解決辦法:

1。對FIN_WAIT_2狀態(tài)增加超時機制,這個特性在協(xié)議里沒有體現(xiàn),但在一些OS中已經(jīng)實現(xiàn)

如:LINUX、SOLARIS、FREEBSD、HP-UNIX、IRIX等

2。不要用linger_close()編譯

3。用SO_LINGER代替,這個在某些系統(tǒng)中還能很好地處理

4。增加用于存儲網(wǎng)絡(luò)連接狀態(tài)的內(nèi)存mbuf,以防止內(nèi)核crash

5。DISABLE KEEPALIVE

針對這種情況,我們做了幾次討論,有些結(jié)論,分別是:

1、設(shè)置nginx與redis的連接池,keepalive的時間,分別設(shè)為10秒,5秒,但是結(jié)果還是一樣

2、不用keepalive,即不使用連接池,即每次用完就close()掉,你可以看到連接少了,但是不使用連接池,意味著10秒內(nèi)要打開關(guān)閉10萬次,開銷太大

3、redis集群,在原本集群的體系上添加redis的集群,這或許能解決問題,但是10秒內(nèi)10萬實際上并不多,這樣做了或許是取巧,并沒有找到問題

4、設(shè)置redis的idle(空閑)時間限制,結(jié)果一樣。

解決方案:

實際上不算解決方案,因為放棄了redis的內(nèi)存機制,而是使用nginx本身的內(nèi)存技術(shù)。網(wǎng)上關(guān)于redis的優(yōu)化大部分不適用,這個問題有待分析解決。


到此,關(guān)于“redis在高并發(fā)下的性能講解”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)站欄目:redis在高并發(fā)下的性能講解-創(chuàng)新互聯(lián)
當前URL:http://www.rwnh.cn/article20/djppco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣動態(tài)網(wǎng)站、微信小程序定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
汾阳市| 白玉县| 河间市| 张家川| 株洲县| 荥阳市| 巴林左旗| 牟定县| 凤台县| 仪征市| 安福县| 东山县| 肇州县| 蒙阴县| 柯坪县| 方山县| 万盛区| 德保县| 襄垣县| 枞阳县| 海城市| 岑溪市| 长顺县| 泸西县| 八宿县| 福贡县| 封开县| 阿尔山市| 特克斯县| 永春县| 遵义县| 无为县| 庆云县| 德化县| 大理市| 钟山县| 敦化市| 开远市| 蓬莱市| 尚志市| 米林县|