php使用tcp長連接的一種優(yōu)化思路

php使用tcp長連接的一種優(yōu)化思路

一得院、面向人群

如果站點架構(gòu)滿足以下幾點梭灿,那么本文的優(yōu)化方案會非常適合:

1)使用php等腳本語言作為開發(fā)語言

2)需要連接后端服務(wù)阴汇,例如RPC服務(wù)、memcache或redis等

3)流量非常大

二尼桶、解決的問題

常見的web架構(gòu)如上:

1)最前端是APP或者web頁面

2)服務(wù)器上層是web-server進行接入

3)php腳本語言調(diào)用后端數(shù)據(jù)操灿,完成業(yè)務(wù)邏輯,拼接頁面

4)最后端是服務(wù)泵督、緩存趾盐、數(shù)據(jù)庫

php是一種腳本語言,不像C++/Java那樣進程能夠常駐,所以它連接后端的服務(wù)都是使用短連接:

上圖是一種典型場景谤碳,站點php部署在機器A上溃卡,緩存memcache部署在機器B上,之間通過短連接通信蜒简,過程為:

1)php建立tcp短連接

2)按照memcache協(xié)議發(fā)送數(shù)據(jù)

3)接收memcache返回的數(shù)據(jù)

4)php關(guān)閉tcp短連接

在站點流量小時瘸羡,上述過程沒有任何問題,當(dāng)站點流量非常大搓茬,QPS很高的情況下犹赖,php對memcache的tcp建立+關(guān)閉tcp短連接的開銷便不能忽略了,有可能成為性能的瓶頸卷仑,如何進行優(yōu)化是本文即將討論的核心峻村。

三、UNIX Domain Socket介紹

話鋒一轉(zhuǎn)锡凝,先一起來看看UNIX Domain Socket技術(shù)粘昨。

UNIX Domain Socket是一種進程間IPC通訊機制,它不需要經(jīng)過網(wǎng)絡(luò)協(xié)議棧窜锯,不需要打包拆包张肾、計算校驗和、維護序號和應(yīng)答等锚扎,只是將應(yīng)用層數(shù)據(jù)從一個進程拷貝到另一個進程吞瞪。它可以用于同一臺主機上兩個沒有親緣關(guān)系的進程,并且是全雙工的驾孔,提供可靠消息傳遞(消息不丟失芍秆、不重復(fù)、不錯亂)的IPC機制翠勉。

四妖啥、優(yōu)化方案

可以看到,UNIX Domain Socket的效率會遠高于tcp短連接眉菱,但它只能用于同一臺主機間的進程通訊迹栓,而php應(yīng)用和后端服務(wù)往往是部署在不同的機器上的,此時能否利用它來進行優(yōu)化呢俭缓,答案是肯定的克伊。

優(yōu)化后的簡易架構(gòu)圖如上,在php應(yīng)用服務(wù)器上部署一個local-proxy华坦,php與local-proxy之間使用UNIX Domain Socket來通訊愿吹,而local-proxy與后端服務(wù)進行TCP長連接通訊,這樣就大大提升了通訊效率惜姐,免除了每次請求都要進行的建立+關(guān)閉tcp短連接的開銷犁跪。

五椿息、local-proxy要點

要實現(xiàn)上述優(yōu)化方案,local-proxy是實現(xiàn)要點坷衍,在實現(xiàn)local-proxy時寝优,有這么幾點需要注意

1)協(xié)議設(shè)計:local-proxy本身沒有任何業(yè)務(wù)邏輯,只負責(zé)請求轉(zhuǎn)發(fā)枫耳,上游發(fā)送過來memcache協(xié)議乏矾,透傳給后端的memcache,這樣的話迁杨,上游客戶端不需要進行任何代碼的修改

2)通訊方式:如上文所述钻心,local-proxy與上游使用UNIX Domain Socket進行通訊,與下游使用tcp長連接進行通信

3)高效框架:這種方案是為了解決tcp短連接的效率損耗铅协,這樣對local-proxy的效率要求就非常高捷沸,可以選用成熟高效的網(wǎng)絡(luò)框架(例如libevent)和tcp長連接連接池技術(shù)來實現(xiàn)

4)請求映射:需要將上游發(fā)過來的請求與發(fā)往下游的請求一一映射起來,這樣才能正確的對應(yīng)上請求包與響應(yīng)包

==【完】==

回【可靠】微信為什么不丟消息狐史?

回【http】http如何像tcp一樣實時的收消息痒给?

回【分區(qū)】互聯(lián)網(wǎng)公司為啥不使用mysql分區(qū)表?

回【過載】如何實施異構(gòu)服務(wù)器的負載均衡及過載保護预皇?

回【接入】lvs為何不能完全替代DNS輪詢

回【均衡】一分鐘了解負載均衡的一切

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侈玄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吟温,更是在濱河造成了極大的恐慌,老刑警劉巖突颊,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲁豪,死亡現(xiàn)場離奇詭異,居然都是意外死亡律秃,警方通過查閱死者的電腦和手機爬橡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棒动,“玉大人糙申,你說我怎么就攤上這事〈遥” “怎么了柜裸?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粱锐。 經(jīng)常有香客問我疙挺,道長,這世上最難降的妖魔是什么怜浅? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任铐然,我火速辦了婚禮蔬崩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀暑。我一直安慰自己沥阳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布自点。 她就那樣靜靜地躺著沪袭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪樟氢。 梳的紋絲不亂的頭發(fā)上冈绊,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音埠啃,去河邊找鬼死宣。 笑死,一個胖子當(dāng)著我的面吹牛碴开,可吹牛的內(nèi)容都是我干的毅该。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼潦牛,長吁一口氣:“原來是場噩夢啊……” “哼眶掌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巴碗,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤朴爬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后橡淆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召噩,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年逸爵,在試婚紗的時候發(fā)現(xiàn)自己被綠了具滴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡师倔,死狀恐怖构韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情趋艘,我是刑警寧澤疲恢,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站致稀,受9級特大地震影響冈闭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抖单,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一萎攒、第九天 我趴在偏房一處隱蔽的房頂上張望遇八。 院中可真熱鬧,春花似錦耍休、人聲如沸刃永。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斯够。三九已至,卻和暖如春喧锦,著一層夾襖步出監(jiān)牢的瞬間读规,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工燃少, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留束亏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓阵具,卻偏偏與公主長得像碍遍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阳液,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_閱讀 1,824評論 0 3
  • 1怕敬、memcache的概念? Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng)帘皿,通過在內(nèi)存里維護一個統(tǒng)一的巨...
    桖辶殤閱讀 2,241評論 2 12
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成东跪,其中,內(nèi)核的設(shè)計非常微小和簡潔矮烹,完成的工作也非常簡單...
    rosekissyou閱讀 10,215評論 5 124
  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 6,763評論 3 64
  • 毎個人都是生而孤獨的越庇,從離開母體的那一刻,就開始了孤獨而漫長的一生奉狈。哪怕是雙胞胎,也是各走各的路涩惑。那些看起來合眾的...
    瑞雪飄飄Maggie閱讀 189評論 0 0