首頁 类库下载 PHP类库 php使用tcp長連接的一種最佳化思路

php使用tcp長連接的一種最佳化思路

Oct 13, 2016 pm 02:53 PM

一、面向人群

如果站點架構滿足以下幾點,那麼本文的優化方案會非常適合:

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

2)需要連接後端服務,例如RPC服務、 memcache或redis等

3)流量非常大

二、解決的問題

php使用tcp長連接的一種最佳化思路

常見的web架構如上:

1)最前端是APP或web頁面

-server進行存取

3)php腳本語言呼叫後端數據,完成業務邏輯,拼接頁面

4)最後端是服務、快取、資料庫

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

php使用tcp長連接的一種最佳化思路

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

1)php建立tcp短連線

2)依照memcache協定傳送資料

3)接收memcache回傳的資料

4)php關閉tcp短連線

任何問題,當站點流量非常大,QPS很高的情況下,php對memcache的tcp建立+關閉tcp短連接的開銷便不能忽略了,有可能成為性能的瓶頸,如何進行優化是本文即將討論的核心。

三、UNIX Domain Socket介紹

話鋒一轉,先一起來看看UNIX Domain Socket技術。

UNIX Domain Socket是一種進程間IPC通訊機制,它不需要經過網路協定棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層資料從一個進程拷貝到另一個進程。它可以用於同一台主機上兩個沒有親緣關係的進程,並且是全雙工的,提供可靠消息傳遞(消息不丟失、不重複、不錯亂)的IPC機制。

四、最佳化方案

可以看到,UNIX Domain Socket的效率會遠高於tcp短連接,但它只能用於同一台主機間的進程通訊,而php應用和後端服務往往是部署在不同的機器上的,此時能否利用它來進行最佳化呢,答案是肯定的。

php使用tcp長連接的一種最佳化思路

化後的簡易架構圖如上,在php應用伺服器上部署一個local-proxy,php與local-proxy之間使用UNIX Domain Socket來通訊,而local-proxy與後端服務進行TCP長連線通訊,這樣就大大提升了通訊效率,免除了每次請求都要進行的建立+關閉tcp短連接的開銷。

五、local-proxy要點

要實現上述優化方案,local-proxy是實現要點,在實現local-proxy時,有這麼幾點需要注意

1)協議設計:local-proxy本身沒有任何業務邏輯,只負責請求轉發,上游發送過來memcache協議,透傳給後端的memcache,這樣的話,上游客戶端不需要進行任何代碼的修改

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

3)高效框架:這種方案是為了解決tcp短連接的效率損耗,這樣對local-proxy的效率要求就非常高,可以選用成熟高效的網路框架(例如libevent)和tcp長連接連接池技術來實作

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


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1654
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1225
24