欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Archive

如何實現(xiàn)一個連接池?一文帶你深入淺出,徹底搞懂!

[導讀]【2w1h 】是何實技術領域中 一種非常有效的思考和學習方式,即W hat 、連接W hy 和 H ow ; 堅持【 2 w1h 】,池文出徹可以快速提升我們的深底搞懂深度思考能力。今天我們通過【2w1h】方式來討論“連接池”:什么是入淺連接池(what)?為什么需要連接池(why)?

-? ? ?前言? ? ?-

如何實現(xiàn)一個連接池?一文帶你深入淺出,徹底搞懂!


【2w1h 】是技術領域中 一種非常有效的思考和學習方式,即W hat 、何實W hy 和 H ow ; 堅持【 2 w1h 】,連接可以快速提升我們的池文出徹深度思考能力。


今天我們通過【2w1h】方式來討論“連接池”:什么是深底搞懂連接池(what)?為什么需要連接池(why)?怎樣做一個連接池(how)?


-? ? ??什么是連接池???? ?-


深入思考連接池的本質(zhì),但不要思考的入淺過于復雜!


“池”是何實一種非常形象化的描述,它是連接一種容器,做儲存之用;在編程中我們往往使用數(shù)組、池文出徹鏈表、深底搞懂隊列、入淺map來表達。


“連接”是網(wǎng)絡中用于傳輸數(shù)據(jù)的通道;“連接”才是我們要真正去使用的對象,而“池”是用來管理“多個連接”的一種方式。


如果沒有用“池”來統(tǒng)一管理“連接”,“連接”將散布在程序各處;那為了使用方便,我們往往會在使用時建立連接,使用完畢后,就關閉連接。所以“連接池”給我們提供了使用“連接”的方便。


同時,池是做儲存之用的,所以“連接池”中的“連接”肯定是已經(jīng)建立好的長連接,比如tcp連接、websocket連接等,即取即用,用完放回。如果沒有真正理解“連接池”的本質(zhì),在面試中可能會出現(xiàn)“http連接池”的笑話!


根據(jù)下游類型,我們常見有數(shù)據(jù)庫連接池、緩存連接池、服務連接池,如下圖所示:


圖一 數(shù)據(jù)庫連接池


圖二 緩存連接池

?

圖三 服務連接池


在編程中,我們還經(jīng)常會碰到進程池、線程池、協(xié)程池、內(nèi)存池、對象池等。


-? ? ??為什么需要連接池???? ?-


除了連接池能非常方便的對連接進行管理外,一句話,在高吞吐時連接池大大提高了數(shù)據(jù)傳輸?shù)男省?/p>


從兩個方面說:


1、避免反復的三次握手和四次握手

長連接的建立需要進行三次握手,而連接的釋放需要進行四次握手,這是發(fā)生在系統(tǒng)層面的兩個動作,對于單條連接來說耗時微乎其微,但在高吞吐場景時,耗時則不能忽略。


所以連接池的即取即用和用完放回的特性,避免了大量三次握手和四次握手的無效耗時,節(jié)省了系統(tǒng)資源。


2、 增加并行車道,實現(xiàn)全雙工并行

數(shù)據(jù)通信包括單工、半雙工和全雙工。單工通信如下圖,數(shù)據(jù)只能從A到B,不符合訪問下游服務的場景。


圖四 單工通信


半雙工通信如下圖,數(shù)據(jù)可以從A到B,也可從B到A,但是同一時刻只能一個方向上進行數(shù)據(jù)傳輸,通道利用率是50%。

?

圖五 半雙工通信


全雙工通信如下圖,可同時存在從A到B和從B到A的數(shù)據(jù)傳輸,通道的利用率是100%。長連接就是全雙工通信。

?

圖六 全雙工通信


在IO密集型的互聯(lián)網(wǎng)應用中,一條全雙工通信通道仍然無法滿足數(shù)據(jù)吞吐的需求時,該如何解決?


在互聯(lián)網(wǎng)性能測試指標中有這樣一個公式:


QPS(吞吐量) =?并發(fā)數(shù) / 平均響應時間


在平均響應時間不變的情況下,適度增加并發(fā)數(shù)可以提升吞吐量;所以采用多條全雙工通信的方式可以在一定程度上(平均響應時間沒有大幅增加)提高吞吐量,而連接池則就最好的實現(xiàn)方式。


總結(jié)一下:為什么需要連接池?

(1)方便管理連接;

(2)避免反復三次握手和四次握手;

(3)更好地實現(xiàn)全雙工并行。

-? ? ??怎樣做一個連接池???? ?-


實現(xiàn)一個連接池,最關鍵的是均衡和保活,如下圖所示:


圖七 連接池實現(xiàn)原理


該連接池的“池”通過隊列數(shù)據(jù)結(jié)構(gòu)進行實現(xiàn),隊列先進先出的特性保證了使用連接的均衡性,每一條連接都可以均勻的被使用到。


連接池對外提供get()和free()兩個APIget()用于從隊首“出隊”獲取一條可用連接,free()用于將使用完的連接從對尾“入隊”釋放到隊列中


業(yè)務代碼在低峰時會降低get()動作,所以連接池中的連接在長時間不用時會導致失效,此時保活線程在監(jiān)測到get()的使用頻率較低時,會模擬業(yè)務程序調(diào)用get()獲取連接后發(fā)送心跳包,然后再通過free()將被保活的連接放回隊列中,達到連接池中所有連接保活的目的。

?

在充分理解上述內(nèi)容后,可以了解高級連接池的擴展知識!


-? ? ? 高級連接池??? ?-


高級連接池通常應用在微服務系統(tǒng)中,如下圖:連接池連接下游多個節(jié)點。


圖八 高級連接池


高級連接池具備這樣幾個特性:

1、?高可用:下游任意一個server 宕機時,連接池會關閉相關無效連接,防止被client訪問;

2、?高可擴展:下游增加一個server節(jié)點時,連接池會發(fā)現(xiàn)并建立到新server節(jié)點的連接,供client訪問;

3、?負載均衡:連接池會根據(jù)下游server的服務能力的高低分配數(shù)據(jù)請求;

4、?中間件:當下游server是類MySQL數(shù)據(jù)庫并分片時,連接池會將請求打在相應的數(shù)據(jù)節(jié)點上,并對數(shù)據(jù)進行聚合。

古之立大事者,不惟有超世之才,亦必有堅忍不拔之志!

堅持技術學習,必有所成!

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關注的小伙伴,可以長按關注一下:

長按訂閱更多精彩▼

如有收獲,點個在看,誠摯感謝

免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

Popular articles

主站蜘蛛池模板: 伊人免费在线观看高清版| 毛片在线高清免费观看| 开嫩苞破呦处| 波多野吉衣一区二区| 俺也去在线观看视频| 国产福利一区二区在线观看| 夜夜摸视频网| 国产精品久久久久免费视频| 乱中年女人伦av三区| 欧美精品亚洲精品 | 欧美a级完整在线观看| 再深点灬舒服了灬太大| 国产经典一区二区三区蜜芽 | 国产女合集| 永久免费无内鬼放心开车| 四虎永久地址4hu2019| 日韩毛片电影| 亚洲人成7777影视在线观看| 国色天香社区在线观看免费播放| 老司机福利在线观看| 台湾一级淫片高清视频| 国产va免费精品高清在线| 两个丫头稚嫩紧窄小说| 欧美日韩在线视频不卡一区二区三区| 思思久久99热只有频精品66| 国产无圣光| 宝宝才三根手指头就湿成这样| 超碰8| 国产在线一区二区杨幂| 国产一区二区三区久久精品| 久久精品国产亚洲精品2020| 无翼少无翼恶女漫画全彩app| 涩涩快播| 久久在精品线影院精品国产| 色丁香在线| 天天骑天天干| 色戒7分27秒大尺度在线| 午夜精品久久久久久| www.插插| 88国产精品欧美一区二区三区| 欧美特黄a级高清免费大片|