導航:首頁 > 編程語言 > php什麼是高並發

php什麼是高並發

發布時間:2024-10-19 21:25:36

Ⅰ 用php 編寫支持高並發的網站,需要做什麼處理

PHP支持高並發很多時候不是光靠PHP的。具體根據你的業務邏輯,下面列一些例子:

  1. 資料庫層面,表結構必須合理,盡量避免聯表查詢,能夠縮短處理時間

  2. 配置額外圖片伺服器或使用cdn,降低伺服器壓力

  3. 使用緩存處理類似搶購、投票等高並發請求,如redis。

  4. 消息隊列處理耗時較久的請求,如發郵件等

  5. 必要時使用多台伺服器,後台使用一台,前台可將高並發的業務與其他分開,避免因其中一個業務導致全部崩潰

Ⅱ 高並發架構技術解決方案

高並發架構的難點是什麼?
高並發架構最大問題主要是由於網站PV訪問量大,單台伺服器承載大量訪問所帶來的壓力,所以會採用多台伺服器進行分流,採用伺服器集群技術,對於每個請求訪問會被 發送到不同的伺服器。
這樣架構的難點就在管理、維護、監控、負載等等都面臨很大的技術問題,同時還需要應對某些業務的突發流量,像秒殺、促銷等場景化使用什麼技術解決高並發?
互聯網分布式架構設計,提高系統並發能力的方式,方法論上主要有兩種:垂直擴展(Scale Up)與水平擴展(Scale Out)。
垂直擴展:提升單機處理能力。垂直擴展的方式又有兩種:
(1)增強單機硬體性能,例如:增加CPU核數如32核,升級更好的網卡如萬兆,升級更好的硬碟如SSD,擴充硬碟容量如2T,擴充系統內存如128G;
(2)提升單機架構性能,例如:使用Cache來減少IO次數,使用非同步來增加單服務吞吐量,使用無鎖數據結構來減少響應時間;
在互聯網業務發展非常迅猛的早期,如果預算不是問題,強烈建議使用「增強單機硬體性能」的方式提升系統並發能力,因為這個階段,公司的戰略往往是發展業務搶時間,而「增強單機硬體性能」往往是最快的方法。
不管是提升單機硬體性能,還是提升單機架構性能,都有一個致命的不足:單機性能總是有極限的。所以互聯網分布式架構設計高並發終極解決方案還是水平擴展。
水平擴展:只要增加伺服器數量,就能線性擴充系統性能。水平擴展對系統架構設計是有要求的,如何在架構各層進行可水平擴展的設計,以及互聯網公司架構各層常見的水平擴展實踐。
水平擴展要怎麼來做?首先是軟體服務拆分到不同的伺服器進行部署,全部堆積在一台上性能將會受限。例如:Redis 就只是部署在獨立的伺服器上,其它軟體都在這伺服器上出現增加各個軟體服務部署的服務後,採用技相關技術手段分擔到各個伺服器上。nginx反向代理層可以通過「DNS輪詢」的方式來進行水平擴展。dns-server對於一個域名配置了多個解析ip,每次DNS解析請求來訪問dns-server,會輪詢返回這些ip。PHP站點層可以通過修改nginx.conf實現負載均衡機制來進行水平擴展。從而設置多個web後端。服務層可以通過服務連接池來進行水平擴展;這里一部需要實現服務化,PHP像swoole tarsphp等資料庫可以按照數據范圍,或者數據哈希的方式來進行水平擴展;那高並發架構是什麼樣的?
常見互聯網分布式架構如上,分為:
(1)客戶端層:典型調用方是瀏覽器browser或者手機應用APP
(2)反向代理層:系統入口,反向代理
(3)站點應用層:實現核心應用邏輯,返回html或者json數據
(4)服務層:服務化,例如像Swoole
(5)數據-緩存層:緩存加速訪問存儲
(6)數據-資料庫層:資料庫固化數據存儲

Ⅲ 用PHP 編寫支持高並發的網站,需要做什麼處理

一般來說,解決WEB高並發的有效手段都是採用可線性擴展的多層分布式架構,
我生產項目的架構是這樣的,就在這里拋磚引玉一下。

Webserver (Nginx) :這一層是可以輕松分布式部署的,結合智能DNS解析可以簡易地防止單點故障、實現區域訪問加速,結合LVS很容易實現負載均衡。這一層主要是負責處理靜態請求和轉發PHP請求至第二層的PHP處理節點,至於靜態資源地址(http://misc.xxxx.com)可以單獨拿出來部署,或者直接使用商用的雲存儲服務(國內七牛不錯,國外有Amazon S3)
PHP處理節點:一個節點其實就是一個監聽特定埠的系統進程,webserver的請求通過負載均衡器(我用的AWS的loadbalancer)進行分發,很好實現分布式和負載均衡。我現在用的還是php自帶的php-fpm,其實facebook出的hhvm性能非常強悍,但是還不能100%通過我項目的單元測試,等hhvm成熟過後可以平滑替換

高速緩存:用的memcached,這一層的作用主要是減輕資料庫IO和加快熱數據訪問,緩存策略與程序耦合度較高,不贅述,但簡單地說有兩種方式,一種是在程序的全局層面加一個緩存處理,這種方法代碼耦合度低,但是有效命中率不高,有些項目不一定適應,另一種是在具體的數據存取處加緩存處理,這種辦法程序耦合度較高,但是緩存命中率非常高,幾乎沒有無效緩存存在,我用的是這種。
資料庫 :我現在的項目數據規模不大,暫時只用了單台資料庫,但是程序邏輯上已做好了資料庫線性擴展的准備。其實資料庫層的擴展是老生常談了,常用手段是分庫分表,這一塊需要在前期的代碼就打下基礎,另外更平滑地手段是使用中間件,比如360的Atlas,阿里巴巴的cobar,淘寶的TDDL,中間件可以在不大范圍變更代碼的情況下擴展,但是具體的使用場景還是有限的,具體項目還需單獨考察。
其他:根據不同的項目,架構還可以選擇性地使用隊列,我現在用的beantalkd,Redis也是一個很好的選擇。隊列常用的使用環境是郵件發送和站內消息推送上面,但是在某些場景下也可以作為核心資料庫的緩沖,對應對大並發或者突發性流量也是不錯的選擇

Ⅳ PHP高並發下單用事務可以解決嗎

事物不是解決高並發的。事物是為了一個操作的完整性才使用的。
php的高並發在我看主要以來php腳本的執行速度,以及對資料庫的數據訪問的次數,還有緩存系統的使用(包括數據緩存以及模板緩存),系統架構的優化。
還有就是web伺服器做負載均衡,域名cdn做負載均衡等。

Ⅳ 用PHP編寫支持高並發的網站,需要做什麼處理

PHP語言開發高並發的網站,需要加緩存,復雜邏輯走消息隊列非同步處理,mysql查詢必須走索引,還搞不定就加機器分流,mysql配置升高並且一主多從,使用codis集群,增加消息隊列的消費者,如果還搞不定就隨機拒絕請求,當然這是最後的退路。

緩存

緩存是避免業務查詢過多的請求mysql,導致業務不可用,段氏根據場景來判斷是否需要使用codis集群,如果並發量沒有達到某個級別,16G的redis也可以,但是要避免redis在高並發下容易發生的緩存穿透,盡量做成高可用,並保證緩存實現的命中率

消息隊列

這也是高並發情境下的殺手鐧,削峰填谷,將耗時的業務邏輯直接以隊列的形式非同步慢慢處理,防止請求過度積壓,導致的伺服器不可用。

mysql優化

有些場景下必須查詢mysql的,也應該走索引,避免多表聯合查詢,甚至mysql的事務隔離級別都盡量的降低,或者直接去掉事務,採用最終一致性的補償指明機制。升級mysql的配置,核心數和內存的提升對查詢速度的優化是顯而易見的,最好能一步到位的走一主多從,查詢路由到從伺服器上。

隨機拒絕請求

這不是開玩笑,我們必須保證伺服器可用,寧願拒絕掉一些請求,也不能讓伺服器大量請求阻塞握逗散,最終導致大家都用不了。

閱讀全文

與php什麼是高並發相關的資料

熱點內容
圖論經典演算法 瀏覽:818
室內定位常用演算法 瀏覽:794
正整數除小數演算法 瀏覽:797
程序員檸檬看網 瀏覽:357
程序員陸漓懷孕真相 瀏覽:416
xp系統如何配置支持伺服器身份驗證 瀏覽:772
蜜熊app聊天怎麼樣 瀏覽:307
楊命令 瀏覽:844
夏天解壓球圖片大全 瀏覽:851
怎麼將程序安裝在伺服器里 瀏覽:753
python刪除temp 瀏覽:601
快手怎麼傳長視頻安卓 瀏覽:226
阿里雲網路伺服器架構 瀏覽:768
VIX演算法本質 瀏覽:192
python蒙特卡洛模擬任務網路計劃 瀏覽:167
論python面向對象 瀏覽:181
sz59c1h壓縮機功率 瀏覽:693
eclipsepython中文亂碼 瀏覽:180
php什麼是高並發 瀏覽:164
原理圖編譯在哪 瀏覽:316