偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用云和NoSQL擴(kuò)展PHP應(yīng)用

云計(jì)算
作為最流行的Web應(yīng)用語(yǔ)言,PHP正在被繁重的負(fù)載所壓垮,除非你選擇云擴(kuò)展和NoSQL后臺(tái)。

   作為最流行的Web應(yīng)用語(yǔ)言,PHP正在被繁重的負(fù)載所壓垮,除非你選擇云擴(kuò)展和NoSQL后臺(tái)。

  PHP和傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的強(qiáng)大之處在于,它們能夠讓初級(jí)開發(fā)者快速找出應(yīng)用的主要特征。但不幸的是,PHP所使用的默認(rèn)運(yùn)行環(huán)境混亂并且無(wú)法擴(kuò)展。

  可能有很多人并不在意PHP的可維護(hù)性。他們的PHP應(yīng)用是拋棄型的,其負(fù)載繁重,并且常常并行運(yùn)行。例如,曾經(jīng)有一家公司開發(fā)了一款使用甲骨文后臺(tái)的PHP營(yíng)銷應(yīng)用??蛻艨梢酝ㄟ^(guò)這個(gè)應(yīng)用購(gòu)買商品,并用“點(diǎn)數(shù)”換取某款在線游戲的一些功能。這個(gè)應(yīng)用一直運(yùn)營(yíng)良好,但當(dāng)用戶數(shù)量達(dá)到了數(shù)百萬(wàn)之后局面就改變了。

  事實(shí)是,如果你有足夠的服務(wù)器和充足的數(shù)據(jù)庫(kù)服務(wù)器,那么不會(huì)出現(xiàn)什么問(wèn)題。但是由于PHP 的Web應(yīng)用在頂層,關(guān)系型數(shù)據(jù)庫(kù)無(wú)法以出色的費(fèi)效比(投入產(chǎn)出比)進(jìn)行擴(kuò)展,提供優(yōu)異的讀寫性能。實(shí)踐證明,應(yīng)對(duì)這一問(wèn)題的解決方案是:云與NoSQL的綜合運(yùn)用。云基礎(chǔ)設(shè)施讓我們能夠擁有充足的服務(wù)器,NoSQL數(shù)據(jù)庫(kù)讓我們能夠更加高效地分享數(shù)據(jù)。不過(guò)在這里,首先讓我們看看PHP運(yùn)行環(huán)境如此混亂的根本原因。

  PHP運(yùn)行環(huán)境有多糟糕?

  最常見的PHP運(yùn)行環(huán)境是Apache Web Server預(yù)派生模式(Prefork),指Web服務(wù)器運(yùn)行一系列獨(dú)立的子進(jìn)程,以支持并行請(qǐng)求。當(dāng)你將這一并行特征與MySQL、PostgreSQL或甲骨文等傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)結(jié)合在一起后,這樣的選擇意味著非池化數(shù)據(jù)庫(kù)連接,因?yàn)閿?shù)據(jù)庫(kù)連接池需要一個(gè)共享的內(nèi)存空間。

  另一方面,原生多線程有一個(gè)共享內(nèi)存空間作為其主進(jìn)程的一部分。而子進(jìn)程沒(méi)有一個(gè)共享內(nèi)存空間,除非你使用一款名為“共享內(nèi)存”(shared memory)的操作系統(tǒng)。其速度無(wú)法與根據(jù)索引傳遞內(nèi)存相媲美。此外,Apache Web Server的“預(yù)派生”模塊并不支持使用共享內(nèi)存。很多時(shí)候,PHP有可能與原生多線程共同運(yùn)行,即員工模式。但是,其嚴(yán)重依賴你使用的模塊,以及這些模塊是否帶有“線程安全”特性。

  

 

  在使用關(guān)系型數(shù)據(jù)庫(kù)時(shí),PHP并行模式會(huì)對(duì)垂直擴(kuò)展模式生產(chǎn)重要影響。盡管其能夠打開數(shù)以千計(jì)的非共享并行連接,以連接MySQL或Oracle數(shù)據(jù)庫(kù),但是這對(duì)大量的并行請(qǐng)求具有負(fù)面沖擊。典型的PHP應(yīng)用(實(shí)際上任何Web應(yīng)用),都是由以下邏輯所組成的:

  request -> getData -> doStuff -> getMoreData -> doMoreStuff -> WriteData -> sendReponse

  在此類代碼中,有一個(gè)相對(duì)長(zhǎng)的時(shí)間周期,期間應(yīng)用實(shí)際上無(wú)法與數(shù)據(jù)庫(kù)交互。另一個(gè)請(qǐng)求能夠“共享”相同的數(shù)據(jù)庫(kù)連接,前提是數(shù)據(jù)庫(kù)連接能夠被匯聚。自從PHP處理模式禁止了這一模式,你只能被迫做出決定:是為請(qǐng)求/響應(yīng)循環(huán)的持續(xù)而保持連接,還是每次在應(yīng)用執(zhí)行時(shí)運(yùn)行。

  但是問(wèn)題是其取決于打開的套接字連接的性能特點(diǎn)。TCP堆棧被用于防止先前連接生產(chǎn)的孤立數(shù)據(jù)包干擾新連接。這是保證TCP涵蓋IP的一部分。TCP/IP的工作機(jī)制是讓用戶等待重新使用相同的套接字連接。因此,一秒鐘內(nèi)你能夠打開的TCP套接字連接的數(shù)量受到了限制。擺脫這一限制的方法是,在多請(qǐng)求循環(huán)中重新使用連接。但是,PHP并行模式導(dǎo)致多數(shù)PHP應(yīng)用無(wú)法利用這樣的方式。

  在(在Unix/Linux服務(wù)器上,以netstat –na類型)運(yùn)行PHP應(yīng)用時(shí),如果檢查Web服務(wù)器或數(shù)據(jù)庫(kù)服務(wù)器上的活躍連接,你將看到在數(shù)據(jù)庫(kù)之間存在大量TIME_WAIT或CLOSE_WAIT狀態(tài)的連接。如果改為在允許池化連接的運(yùn)行環(huán)境上運(yùn)行應(yīng)用,你可以看到處于ESTABLISHED狀態(tài)的數(shù)量(根據(jù)數(shù)據(jù)庫(kù)連接池規(guī)模)。其本質(zhì)是,由于并行模式的限制,導(dǎo)致PHP應(yīng)用是一個(gè)位于數(shù)據(jù)庫(kù)上的負(fù)載。

  其中的原因是什么呢?Linux最初不支持多線程的,僅支持子進(jìn)程。Windows NT系的操作系統(tǒng)一直支持多線程,盡管與現(xiàn)代化的Linux原生多線程相比其要笨拙許多。因此,其與Linux相比具有較大的優(yōu)勢(shì)。但不幸的是,沒(méi)有人相信這些由微軟資助的研究成果。

  為了在關(guān)系型數(shù)據(jù)庫(kù)中擴(kuò)展PHP,你需要切分你的數(shù)據(jù)。這意味著要用合理的方式將數(shù)據(jù)拆解。這可能意味著位于不同地理位置的客戶需要訪問(wèn)不同的關(guān)系型數(shù)據(jù)庫(kù)。當(dāng)初正是由于所謂的“簡(jiǎn)單”和“免費(fèi)”,你才會(huì)選擇PHP。但是當(dāng)選擇了PHP后,卻將不得不面對(duì)大量錯(cuò)綜復(fù)雜的東西。

  云和NoSQL:游戲規(guī)則顛覆者

  在云計(jì)算模式中,如果你能夠換一個(gè)配備自動(dòng)分區(qū)(autoshard),并能平衡每個(gè)節(jié)點(diǎn)連接的數(shù)據(jù)庫(kù),那么PHP能夠進(jìn)行完美地?cái)U(kuò)展。你能夠在多個(gè)數(shù)據(jù)庫(kù)服務(wù)器中進(jìn)行平衡,而不是創(chuàng)建一系列與一臺(tái)或兩臺(tái)機(jī)器相連的非池化連接。

  越來(lái)越多的Web服務(wù)器限制了數(shù)據(jù)庫(kù)客戶端缺乏連接池化所產(chǎn)生的影響。更多的數(shù)據(jù)庫(kù)節(jié)點(diǎn)和分區(qū)減少了服務(wù)器節(jié)點(diǎn)的影響。趨勢(shì)已經(jīng)非常明顯,轉(zhuǎn)向NoSQL和云可以對(duì)現(xiàn)有運(yùn)行環(huán)境進(jìn)行擴(kuò)展。PHP取得如此成功要?dú)w功于其經(jīng)濟(jì)性,這一特性可能會(huì)促使它在云上取得更大的成功,不用再像以往那樣,要對(duì)PHP線程安全進(jìn)行修訂。

  

 

  總的來(lái)說(shuō),云與NoSQL相結(jié)合所產(chǎn)生的優(yōu)勢(shì)緩和了這些矛盾,或是讓應(yīng)用可以更容易地被部署。這意味著只要有一個(gè)完善的NoSQL方案和一個(gè)合理的云部署方案,我們或許能夠雇傭離岸的PHP程序員團(tuán)隊(duì),使其轉(zhuǎn)向NoSQL數(shù)據(jù)庫(kù)。

責(zé)任編輯:鳶瑋 來(lái)源: 網(wǎng)界網(wǎng)
相關(guān)推薦

2009-11-25 10:16:49

linuxphpizePHP

2009-12-08 13:18:17

2015-04-20 10:06:37

PHP Rust 創(chuàng)建PHP 擴(kuò)展

2009-12-25 15:02:01

php擴(kuò)展cURL

2015-06-02 10:36:42

大數(shù)據(jù)

2010-11-03 13:19:28

2022-08-31 11:46:46

物聯(lián)網(wǎng)

2015-03-27 18:01:58

云計(jì)算SaaS應(yīng)用渠道沖突

2009-12-04 15:43:03

PHP JSON擴(kuò)展

2009-10-16 09:42:06

2013-02-21 09:27:26

2009-11-27 10:32:35

2022-06-22 17:44:37

IBM自動(dòng)化人工智能

2016-07-25 17:12:18

2012-05-17 09:58:40

PHP

2010-03-30 09:04:41

2011-04-19 09:51:27

PythonNautilus

2010-02-04 09:10:04

Linux PHP

2009-12-04 12:51:27

PHP functio

2013-12-23 17:29:43

NewSQLNoSQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)