日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

从奥运订票系统说起——谈FastCGI 与IT 架构

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从奥运订票系统说起——谈FastCGI 与IT 架构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2008年,對(duì)于首都人民來(lái)說(shuō),沒(méi)有什么比奧運(yùn)會(huì)更大的事情了。如何買(mǎi)到一張稱(chēng)心如意的比賽門(mén)票,也成了很多人的一個(gè)夢(mèng)想。然而,在奧運(yùn)官網(wǎng)搶票購(gòu)買(mǎi)的時(shí)候,這個(gè)夢(mèng)想?yún)s輕易地被網(wǎng)上購(gòu)票系統(tǒng)的當(dāng)機(jī)擊成碎片,很多充滿(mǎn)熱情的老百姓們也因此郁悶無(wú)比。由于搜狐承擔(dān)了奧運(yùn)的官網(wǎng),我又在那里工作過(guò)相當(dāng)長(zhǎng)一段時(shí)間,很多兄弟搶票失敗,于是便認(rèn)定是搜狐開(kāi)發(fā)的系統(tǒng)太爛,而找我抱怨。其實(shí)當(dāng)時(shí)我也很是郁悶:首先這個(gè)系統(tǒng)并非搜狐開(kāi)發(fā);其次我也不在搜狐了。雖然如此,和我同行的一些朋友,又開(kāi)始問(wèn)我如何解決類(lèi)似問(wèn)題。我也反反復(fù)復(fù)講了很多次,為了讓廣大讀者能夠深入了解背后的原因和機(jī)制,寫(xiě)出來(lái),大家一起討論可能效果會(huì)更好。當(dāng)然,這并不是我說(shuō)的架構(gòu)就一定能解決問(wèn)題,僅僅是拋磚引玉而已。

??? 在說(shuō)架構(gòu)之前,我先說(shuō)一個(gè)老的技術(shù),FastCGI。因?yàn)檫@個(gè)技術(shù)在后面的結(jié)構(gòu)闡述中將起到非常重要的用處,原以為應(yīng)該會(huì)有不少人會(huì)知道,但后來(lái)發(fā)現(xiàn)好像并非如此。

???關(guān)于FastCGI的歷史我就不再贅述,好像自1993年便有了。目前最熱門(mén)的視頻網(wǎng)站YouTube體系結(jié)構(gòu)中,就有fast-cgi的模塊。它支持很多httpd服務(wù)器,在官方網(wǎng)站上列了很多,如apache,aXesW3 ,MicrosoftIIS,Zeus,近幾年才出的lighttpd沒(méi)寫(xiě),其實(shí)這個(gè)新的httpd也支持,但我個(gè)人覺(jué)得,支持最好的,可能還是Apache。

??? 先講講FastCGI的原理,它和現(xiàn)在常用的運(yùn)行請(qǐng)求不同,維基百科上有一個(gè)術(shù)語(yǔ)形容它,這里借用一下:

◆? 短生存期應(yīng)用程序

◆? 長(zhǎng)生存期應(yīng)用程序

??? CGI技術(shù)的機(jī)制是:每次當(dāng)客戶(hù)請(qǐng)求一個(gè)CGI的時(shí)候,Web服務(wù)器就請(qǐng)求操作系統(tǒng)生成一個(gè)新的CGI進(jìn)程;當(dāng)CGI滿(mǎn)足要求后,服務(wù)器就殺死這個(gè)進(jìn)程。并且服務(wù)器對(duì)客戶(hù)端的每個(gè)請(qǐng)求都要重復(fù)這樣的過(guò)程。

??? 而FastCGI技術(shù)的機(jī)制為:FastCGI程序一旦產(chǎn)生后,它可以持續(xù)工作,一直保持滿(mǎn)足客戶(hù)的請(qǐng)求直到自己被明確終止。如果你希望通過(guò)協(xié)同處理來(lái)提高程序的性能,你可以請(qǐng)求Web服務(wù)器運(yùn)行多個(gè)FastCGI 應(yīng)用程序。

??? 由此CGI就是所謂的短生存期應(yīng)用程序,FastCGI就是所謂的長(zhǎng)生存期應(yīng)用程序。

??? 由于FastCGI程序并不需要不斷產(chǎn)生新進(jìn)程,可以大大降低服務(wù)器的壓力。并且產(chǎn)生較高的應(yīng)用效率。如今,流行的Java語(yǔ)言Servlet技術(shù),在設(shè)計(jì)上就是參考FastCGI技術(shù)。

FastCGI 配置運(yùn)行一般來(lái)說(shuō)分三種,這三種都需要Apache的mod_fastcgi 進(jìn)行處理。

1、Standalone FastCGI Server, 應(yīng)該是獨(dú)立的服務(wù)器。首先是需要把fastcgi作為單獨(dú)的守護(hù)進(jìn)程:

?

$ script/myapp_fastcgi.pl -l /tmp/myapp.socket -n 5

?

以下是這個(gè)fastcgi的守護(hù)進(jìn)程的參數(shù):

-d -daemon #作為守護(hù)進(jìn)程

-p -pidfile #管理進(jìn)程的PID寫(xiě)入到到文件的名稱(chēng)

-l -listen #SOCKET的路徑,機(jī)器名:端口, 或者端口

-n -nproc #起始接受請(qǐng)求的進(jìn)程數(shù)

然后把下面的代碼加入Apache的HTTPD.CONF:

?

FastCgiExternalServer /tmp/myapp -socket /tmp/myapp.socket

Alias /myapp/ /tmp/myapp/

# Or,? 可以使用root的身份運(yùn)行?????

Alias / /tmp/myapp/

# Optionally,(使用rewrite模塊)?????

RewriteRule ^/myapp$ myapp/ [R]

然后重啟Apache就OK了

?

2、Static mode:靜態(tài)模式, 一般是用于單一確定的模式,就是在Apache 的httpd.conf 中間加上:

?

FastCgiServer /usr/local/apache/count/count.fcg -processes 1

?

Alias /c /usr/local/apache/count/count.fcg

?

此處建議再使用REWRITE的方式 重寫(xiě)整個(gè)的URL匹配, 使之看起來(lái)像一個(gè)靜態(tài)頁(yè)面。

?

RewriteRule read-(.+)-(.+)-(.+).html$ /c?id=$1&sid=$2&port=$3 [L]?

?

3、Dynamic mode:動(dòng)態(tài)模式,可以使用各種各樣的fastcgi,加入到httpd.conf中間去,比如:

AddHandler fastcgi-script .fcgi

還有一個(gè)關(guān)鍵的設(shè)置:

?

<Directory /path/to/MyApp>

?????? Options +ExecCGI

</Directory>

?

?這個(gè)配置建議放在cgi-bin? 這種類(lèi)似的目錄里面。

?? 請(qǐng)注意第二種,服務(wù)器起幾個(gè)進(jìn)程,是由-processes 1 這個(gè)參數(shù)來(lái)控制的,所以起多少你可以自己來(lái)定,我們?cè)谙旅娴囊粋€(gè)關(guān)鍵模塊中將使用這個(gè)模式。

?? 下面放一段FastCGI程序的C代碼,來(lái)說(shuō)明一下:

?

#include <fcgi_stdio.h>

#include <string.h>

?

void main(void){

int count = 0;

while(FCGI_Accept() >= 0) {

printf("Content-type:text/html ");

printf(" ");

printf("<HTML> "

"<HEAD>?

"<TITLE>FastCGI</TITLE> "

"<META http-equiv="Content-Type" "

"content="text/html;?? charset=utf-8"> <body> "?"Hello world!<br> ");

printf("Request number %d.",count++);

printf("</body></html> ”);

}

exit(0);

}

?

這是一個(gè)很簡(jiǎn)單的例子,就是簡(jiǎn)單的計(jì)數(shù), 大家可以注意這一句:while(FCGI_Accept() >= 0)

???這就是它和普通的短周期程序最大的不同,一般CGI都是運(yùn)行完就退出了,這個(gè)FastCGI,在處理完一個(gè)請(qǐng)求完畢后,會(huì)回到初始狀態(tài)等待下一次請(qǐng)求;如果這個(gè)程序被設(shè)置成為只能啟動(dòng)一個(gè),那么無(wú)論是否訪(fǎng)問(wèn)這個(gè)頁(yè)面,都是在前一個(gè)的基礎(chǔ)上加一,而不會(huì)又產(chǎn)生新的進(jìn)程;從而后來(lái)者是從零開(kāi)始。當(dāng)然,很多人也都注意到,此處就是一個(gè)死循環(huán)在不斷處理;如果程序比較復(fù)雜,存在內(nèi)存泄露的問(wèn)題,此處產(chǎn)生的問(wèn)題也要比普通CGI要嚴(yán)重得多,所以使用它對(duì)于程序員的要求也更高。

??? 上述方案應(yīng)該是所有的Web應(yīng)用解決方案中,執(zhí)行效率和速度最高的。官方數(shù)據(jù)是說(shuō)比一般的高15倍左右,在我的機(jī)器上測(cè)試,基本上每秒能夠處理大概2400次請(qǐng)求。

???再回到我們說(shuō)的正題:奧運(yùn)訂票系統(tǒng)的癱瘓,關(guān)于訪(fǎng)問(wèn)量,當(dāng)時(shí)的說(shuō)法是800萬(wàn)/小時(shí),那么平均到每秒就是超過(guò)2200次。這對(duì)于訂票系統(tǒng)來(lái)說(shuō),確實(shí)是一個(gè)非常大的考驗(yàn)。畢竟這種狀況下,數(shù)據(jù)庫(kù)是肯定承擔(dān)不住這個(gè)量級(jí)的訪(fǎng)問(wèn)了。如何進(jìn)行架構(gòu)設(shè)計(jì),是我們都需要面對(duì)的問(wèn)題。

??? 如果設(shè)計(jì)要應(yīng)對(duì)這種高負(fù)載、高訪(fǎng)問(wèn)量的結(jié)構(gòu),首先考慮這個(gè)系統(tǒng)的需求。其實(shí)具體過(guò)程比較簡(jiǎn)單:

1.用戶(hù)認(rèn)證

2.查看所有可以訂票的項(xiàng)目和票的數(shù)量

3.選擇項(xiàng)目,放入購(gòu)物車(chē)

4.確認(rèn)并提交訂單

5.訂單成功扣款

過(guò)程雖然簡(jiǎn)單,但其實(shí)里面的東西也不少。

???由于用戶(hù)的數(shù)據(jù)量很大,注冊(cè)用戶(hù)數(shù)百萬(wàn)以上;而且這種系統(tǒng),登錄用戶(hù)在操作時(shí)應(yīng)該不存在普通應(yīng)用的2/8原則。在搶票的當(dāng)天,絕大部分注冊(cè)用戶(hù)都會(huì)登錄,而且時(shí)間會(huì)非常集中,所以并發(fā)會(huì)非常大。你如果預(yù)算充足,放一萬(wàn)臺(tái)服務(wù)器來(lái)做這個(gè)事情,做一個(gè)分布算法,然后每臺(tái)服務(wù)不超過(guò)十萬(wàn)個(gè)用戶(hù),這樣你就能充分保證你的用戶(hù)感受和體驗(yàn)。可我想實(shí)際上沒(méi)有哪個(gè)公司和系統(tǒng)會(huì)這么做,即使是財(cái)大氣粗的奧組委。

???這個(gè)時(shí)候,很多人可能會(huì)想:上面提到的FastCGI這種高效率的程序就是針對(duì)類(lèi)似狀況的解決方案,其實(shí)這是很常見(jiàn)的錯(cuò)誤。我想這個(gè)訂票之所以會(huì)癱瘓,就是由于部分設(shè)計(jì)過(guò)于高效,而部分不可能那么高效的緣故。比如登錄這個(gè)模塊的效率估計(jì)就非常高,因?yàn)榈卿浿皇窃跀?shù)據(jù)庫(kù)對(duì)比一下用戶(hù)名和密碼,而且數(shù)據(jù)更新也不頻繁,完全可以用分布式數(shù)據(jù)庫(kù)來(lái)解決。但用戶(hù)登錄后,所有的壓力會(huì)全部壓在后面的功能上,從而造成系統(tǒng)的癱瘓。這個(gè)時(shí)候,由于人太多,你無(wú)論怎么高效,在執(zhí)行到后面復(fù)雜的購(gòu)買(mǎi)功能時(shí),都會(huì)出現(xiàn)瓶頸。而如果真的放一萬(wàn)臺(tái)服務(wù),你的數(shù)據(jù)如何分布同步,然后真的做到先來(lái)先得,會(huì)很難,如果設(shè)計(jì)的不好,和抽簽也就沒(méi)什么兩樣了。

??? 所以這個(gè)系統(tǒng)設(shè)計(jì)的策略應(yīng)該是:如何做到在保證用戶(hù)感受的情況下,合理控制進(jìn)入系統(tǒng)的人數(shù),這樣你后面的設(shè)計(jì)和開(kāi)發(fā)的壓力會(huì)小的多,而且成本的控制非常清楚。

??? 那么剩下的做法就很清晰了:系統(tǒng)的重點(diǎn)是用戶(hù)登錄,而不是一般理解的后面購(gòu)票提交的系統(tǒng)功能。如何控制進(jìn)入的人數(shù),我覺(jué)得不妨參考銀行的叫號(hào)方式來(lái)設(shè)計(jì):系統(tǒng)先給用戶(hù)發(fā)號(hào),然后當(dāng)了解到有資源空出來(lái)時(shí),再讓用戶(hù)登錄。

?

這個(gè)結(jié)構(gòu)的重點(diǎn)就在呼號(hào)中心和序列號(hào)的分配上面。

1.?序列號(hào)分配中心,技術(shù)重點(diǎn)在于高效和唯一性。也就是說(shuō)當(dāng)用戶(hù)訪(fǎng)問(wèn)數(shù)達(dá)到海量之后,你需要非常迅速地分配唯一的序列號(hào)給登錄的用戶(hù)。這種狀況下,其他很多技術(shù)無(wú)法承擔(dān)這種需求。開(kāi)始提到的FastCGI,就是這個(gè)模式下的唯一選擇。我們?cè)陂_(kāi)始安裝的時(shí)候,就可以使用這種只起單個(gè)進(jìn)程的模式,所以分配用戶(hù)的序列號(hào)只會(huì)是唯一的。由于FastCGI的高效率,從而保證登錄的用戶(hù)可以迅速分配到一個(gè)號(hào),然后離開(kāi)。當(dāng)然如果你還不放心的話(huà),還可以在前面再加一個(gè)負(fù)載均衡的設(shè)備,完成對(duì)幾個(gè)不同服務(wù)器負(fù)載分配,然后每個(gè)機(jī)器加不同的步長(zhǎng),并且起始數(shù)字不一樣。比如:如果你有2臺(tái)機(jī)器做發(fā)號(hào)工作,第一臺(tái)起始數(shù)字為1,第二臺(tái)為2,步長(zhǎng)為二,就是每次累加2,這樣用戶(hù)在不同的機(jī)器上也會(huì)得到唯一的號(hào),而效率就能提高兩倍。

???至于記錄用戶(hù)序列號(hào)的方式,可以用cookie記錄在客戶(hù)端,然后進(jìn)行加密。用戶(hù)記錄后,進(jìn)入呼號(hào)中心,比對(duì)手里的號(hào)和前面排隊(duì)的人數(shù),然后提示用戶(hù)前面排隊(duì)人數(shù)。比方說(shuō),你上來(lái)就是排號(hào)在3千萬(wàn)以后了,前面有2千多萬(wàn)人,我想如果這個(gè)人頭腦正常的話(huà),就不會(huì)說(shuō)這個(gè)系統(tǒng)太爛,只能說(shuō)自己起晚了,然后感嘆中國(guó)人實(shí)在是太多,就不會(huì)再上去反復(fù)不停地登錄。

2.?呼號(hào)中心,這里大概是最麻煩,也是最關(guān)鍵的地方。由于訂票系統(tǒng)是B/S結(jié)構(gòu),服務(wù)器端有動(dòng)作的時(shí)候,如何通知客戶(hù)端是一個(gè)要點(diǎn)。也就是說(shuō),當(dāng)有人訂票完畢,從系統(tǒng)中退出,此時(shí),中控中心知道后,會(huì)通知呼號(hào)中心呼叫下一個(gè)。呼號(hào)中心如何找到應(yīng)呼叫的號(hào)碼,有兩種解決方法,具體實(shí)現(xiàn)都不妨通過(guò)AJAX的局部刷新達(dá)成。

第一種,和叫號(hào)系統(tǒng)的號(hào)進(jìn)行比對(duì),如果發(fā)現(xiàn)匹配成功,就通知客戶(hù)端進(jìn)入系統(tǒng)。

第二種,判斷這個(gè)用戶(hù)前面的排隊(duì)數(shù)量,如果發(fā)現(xiàn)為零,就觸發(fā)進(jìn)入這個(gè)系統(tǒng)的動(dòng)作。

???還要注意一點(diǎn),就是刷新時(shí)間長(zhǎng)短和叫號(hào)的失效問(wèn)題。時(shí)間太短,服務(wù)器壓力會(huì)很大;時(shí)間太長(zhǎng)又會(huì)容易造成這個(gè)用戶(hù)感覺(jué)沒(méi)有變化,從而感受很差。所以這個(gè)時(shí)間的設(shè)置,個(gè)人覺(jué)得在5-15秒之間調(diào)整會(huì)比較合適。然后壓力需要分?jǐn)?#xff0c;也就是叫號(hào)服務(wù)器需要設(shè)置多個(gè)。這樣的話(huà),用戶(hù)刷新會(huì)命中不同的服務(wù)器,此時(shí)需要對(duì)數(shù)據(jù)的同步進(jìn)行特殊處理,其架構(gòu)如下:

??? 這個(gè)消息接受模塊可以有兩種模式取信息:短連接,每隔一段時(shí)間來(lái)傳遞信息;長(zhǎng)連接,就是在消息接受和中控服務(wù)器中建立一個(gè)長(zhǎng)效的消息通知機(jī)制。由于對(duì)于信息及時(shí)性的要求比較高,所以采用長(zhǎng)連接比較合適。

???消息接受模塊和中控服務(wù)器之間需要進(jìn)行序列號(hào)的交換。由于你不知道捏著這個(gè)號(hào)的用戶(hù)命中哪臺(tái)服務(wù)器,所以失效機(jī)制需要在幾個(gè)服務(wù)器上同時(shí)進(jìn)行。也就是說(shuō),當(dāng)一個(gè)用戶(hù)退出,中控服務(wù)器知道后,開(kāi)始確認(rèn)最后一個(gè)登錄號(hào),然后發(fā)給所有前端,前端要能保證通知到用戶(hù),然后向用戶(hù)發(fā)出通知,說(shuō)明如果在給定次數(shù)內(nèi)用戶(hù)還不進(jìn)行登錄或者認(rèn)證,就提示后端此號(hào)失效,系統(tǒng)再分配下一個(gè)號(hào)給前端進(jìn)行通知,

??? 如果要設(shè)計(jì)得更加精巧,還可以建立前端服務(wù)器之間的消息通知機(jī)制。就是當(dāng)一臺(tái)服務(wù)器發(fā)現(xiàn)這個(gè)號(hào)在自己上面,就通知幾個(gè)前端,不再對(duì)這個(gè)號(hào)進(jìn)行判斷,盡量節(jié)約資源。

3.?中控服務(wù)器。我在開(kāi)發(fā)社區(qū)和直播間的時(shí)候,都用到了這種方式,此處也用到了。不過(guò)在這個(gè)系統(tǒng)中,中控服務(wù)器不必使用單獨(dú)的物理服務(wù)器,這里可以只是一個(gè)模塊,它的主要用途是通知這些叫號(hào)服務(wù)器。由于數(shù)據(jù)很簡(jiǎn)單,所以中控的分發(fā)比較容易,不用設(shè)計(jì)特別復(fù)雜的協(xié)議。

4.?認(rèn)證中心:唯一需要改動(dòng)的,就是判斷用戶(hù)的序列號(hào)是否可用并且是真正的號(hào)碼。

5.?購(gòu)票中心:此處有很多種分布的方法,有很多可以借鑒的結(jié)構(gòu),這里就不贅述了。在這個(gè)架構(gòu)中,購(gòu)票唯一需要確認(rèn)的就是可以同時(shí)承擔(dān)多少人同時(shí)在線(xiàn)購(gòu)買(mǎi)

?

??? 前三個(gè)部分是這個(gè)架構(gòu)的核心部分,由于進(jìn)入的人數(shù)可以控制,后面的系統(tǒng)就還可以使用老的訂票系統(tǒng),只用確認(rèn)同時(shí)放進(jìn)來(lái)多少人就可以,也就是窗口沒(méi)變,只是大家不再一擁而上,都是文明人,請(qǐng)排隊(duì)拿號(hào)。

當(dāng)然后面的架構(gòu)還可以重新進(jìn)行優(yōu)化和設(shè)計(jì),從而盡可能提高放進(jìn)來(lái)人的數(shù)量,在進(jìn)行設(shè)計(jì)購(gòu)票功能時(shí)還可以借鑒這方面的模式。比如:籃球是愛(ài)好觀眾比較多的運(yùn)動(dòng),大家都想到現(xiàn)場(chǎng)看看科比同學(xué)的扣籃,進(jìn)來(lái)人后,可能大家都會(huì)一擁而上先搶這個(gè),從而造成局部的數(shù)據(jù)癱瘓,影響整個(gè)系統(tǒng)。此時(shí)也可以在里面暗含這個(gè)模塊。買(mǎi)票的人少,拿號(hào)看不出來(lái),拿了就能進(jìn)去;一旦人數(shù)到了極限,對(duì)不起,也請(qǐng)排隊(duì)。

??? 限制人員進(jìn)入后,未進(jìn)入的人和購(gòu)買(mǎi)的人不在同一個(gè)系統(tǒng)中,從而不會(huì)妨礙進(jìn)入的人,買(mǎi)的人也會(huì)很快解決,他們可以迅速完成訂單。提交后,系統(tǒng)發(fā)現(xiàn)這個(gè)人無(wú)法再訂其他球票的時(shí)候,就可以認(rèn)為再放一個(gè)人進(jìn)來(lái),或者干脆做絕一點(diǎn),馬上將其踢出去,以節(jié)約資源。

???而且,由于你可以控制進(jìn)入的用戶(hù)數(shù)量,從而系統(tǒng)其他部分的設(shè)計(jì)簡(jiǎn)單多了。多大的錢(qián)辦多少事,如果領(lǐng)導(dǎo)想快一點(diǎn)了事,預(yù)算充足,那么放入的人就多;如果心里面沒(méi)底,那么可以先放很少人進(jìn)來(lái),或者說(shuō)大概估計(jì)一下,只放多少號(hào),如就賣(mài)10萬(wàn)張票,那么只放50萬(wàn)個(gè)號(hào),放完了就沒(méi)有了。用戶(hù)來(lái)晚了,連號(hào)都沒(méi)有,也只能慨嘆自己不夠及時(shí),這樣比系統(tǒng)癱瘓要好得多。

??? 對(duì)于這個(gè)架構(gòu),其設(shè)計(jì)重點(diǎn)就是把系統(tǒng)整體的資源處于可控的狀態(tài)。很多類(lèi)似系統(tǒng),如:報(bào)名,考試,短時(shí)間搶購(gòu)等等實(shí)際應(yīng)用系統(tǒng),都可以采用類(lèi)似的方式解決。好的架構(gòu),并不是說(shuō)能解決所有的問(wèn)題,而是很清楚自己能做什么,不能做什么。


PHP的FastCGI

?PHP的FastCGI使你的所有php應(yīng)用軟件通過(guò)mod_fastci運(yùn)行,而不是mod_phpsusexec。FastCGI應(yīng)用速度很快 是因?yàn)樗麄兂志梅€(wěn)定。不必對(duì)每一個(gè)請(qǐng)求都啟動(dòng)和初始化。這使得應(yīng)用程序的開(kāi)發(fā)成為可能,否則在CGI范例是不切實(shí)際的(例如一個(gè)大型的腳本,或者一個(gè)需要 連接單個(gè)或多個(gè)數(shù)據(jù)庫(kù)的應(yīng)用)。


??? 1. FastCGI 像是一個(gè)常駐 (long-live) 型的 CGI,它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去 fork 一次 (這是 CGI 最為人詬病的 fork-and-execute 模式)。

????2. FastCGI 可在任何平臺(tái)上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模塊可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服務(wù)器) 上也有 mod_fastcgi 可用。

??? 3. FastCGI 支持 C/C++、Java、PHP、Python、Ruby、Perl,Tcl 等程序語(yǔ)言。

??? 4. FastCGI 的應(yīng)用程序亦兼容于 CGI。即 FastCGI 的應(yīng)用程序也可以當(dāng)成 CGI 來(lái)執(zhí)行。

??? 5. 現(xiàn)有的 CGI 程序要改寫(xiě)成 FastCGI 非常簡(jiǎn)單,最少可能只需要多加入三行程序代碼。

??? 6. FastCGI 的偵錯(cuò)方式與 CGI 大同小異,只要帶入程序所需的環(huán)境變量及參數(shù),即可在命令列模式執(zhí)行或偵錯(cuò)。

??? 7. FastCGI 應(yīng)用程序的寫(xiě)作方式與 CGI 類(lèi)似,除了幾項(xiàng)原則要特別注意外,FastCGI 的寫(xiě)作方式跟 CGI 幾乎一樣,與學(xué)習(xí) Web Server API 比較起來(lái), FastCGI 簡(jiǎn)單多了。

??? 8. FastCGI 支授分布式運(yùn)算 (distributed computing),即 FastCGI 程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來(lái)自其它網(wǎng)站服務(wù)器來(lái)的請(qǐng)求。

??? 好處


??? 1. PHP腳本運(yùn)行速度更快(3到30倍)。PHP解釋程序被載入內(nèi)存而不用每次需要時(shí)從存儲(chǔ)器讀取,極大的提升了依靠腳本運(yùn)行的站點(diǎn)的性能。

??? 2. 需要使用更少的系統(tǒng)資源。由于服務(wù)器不用每次需要時(shí)都載入PHP解釋程序,你可以將站點(diǎn)的傳輸速度提升很高而不必增加cpu負(fù)擔(dān)。因?yàn)閐ll文件不再每次都載入了,那么數(shù)據(jù)庫(kù)的持久連接也將可以起到它設(shè)計(jì)初的效果。

??? 3. 不需要對(duì)現(xiàn)有的代碼作任何改變。


??? 潛在問(wèn)題


??? 1. 對(duì)所有的子目錄(/home/USERNAME/public_html/php.ini)你只有一個(gè)可用的php.ini文件。這是優(yōu)化網(wǎng)站代碼所必需的。如果你需要多個(gè)php.ini文件以適應(yīng)不同的腳本需要,你可以在任何子目錄禁用PHP的快速CGI,而其余的地方則繼續(xù)有效。

??? 2. 你對(duì)PHP環(huán)境做的任何升級(jí)(如php.ini文件的改變)都有幾分鐘的延遲。這是因?yàn)闉榱烁斓乃俣?你的php.ini文件已經(jīng)被載入內(nèi)存,而不是每次需要時(shí)再?gòu)拇鎯?chǔ)器重新讀取。


總結(jié)

以上是生活随笔為你收集整理的从奥运订票系统说起——谈FastCGI 与IT 架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 尤物视频在线观看国产性感 | 国产片免费 | 日本精品不卡 | 日韩欧美国产另类 | av日日夜夜 | 少妇av导航 | 小视频在线观看 | 97精品一区 | 日韩一区在线播放 | 一级毛片基地 | 韩国一级淫片 | 午夜老湿机 | 亚洲精品一区二区潘金莲 | 影音先锋三级 | 综合网在线观看 | 被黑人猛躁10次高潮视频 | 4438激情网 | 久久人妻免费视频 | 国产精品入口 | 9999精品| 精品成人无码久久久久久 | 久久福利视频网 | 国产精品无码天天爽视频 | 成人激情文学 | 国产91久久久| 色婷婷视频 | 天堂久久精品忘忧草 | 国产一线二线三线女 | 麻豆婷婷 | 亚洲精品色午夜无码专区日韩 | h文在线观看 | 欧美色啪| 91禁看片 | 91视频看看 | 污视频网站免费 | 香蕉视频ap | 97av在线播放 | 欧美日韩精品区 | 日本成人三级 | 噜噜色网| 久久免费看毛片 | 男人天堂网在线 | 免费黄色小视频在线观看 | 欧美性激情 | 国产精品91一区 | 午夜久久久精品 | 久久成人精品 | 91久久电影 | 欧美精品99久久久 | 日韩欧美在线观看 | 亚洲欧美视频二区 | 东方欧美色图 | 欧美午夜精品久久久久久孕妇 | 国产一二视频 | 欧美亚洲综合在线 | 国产乱淫精品一区二区三区毛片 | 涩涩亚洲 | 欧洲精品视频在线 | 久久久久性 | 青草草在线观看 | 欧美一区二区不卡视频 | 我们的2018在线观看免费高清 | 99热在线这里只有精品 | 人妻饥渴偷公乱中文字幕 | 欧美日韩卡一卡二 | 国产精品久久久久久亚洲av | 以女性视角写的高h爽文 | www.色午夜| av免费久久| 新呦u视频一区二区 | 永久免费在线看片 | 中文字幕欧美在线观看 | 99av在线| 农民人伦一区二区三区 | 第一章激情艳妇 | 奇米狠狠777| 成人国产a| 久久丫精品久久丫 | 日韩一中文字幕 | 精品盗摄一区二区三区 | www,日韩 | 国产精品区二区三区日本 | 美女扒开腿让男人捅 | 精品在线观看视频 | 亚洲经典一区二区三区 | 婷婷av在线 | 日韩欧美精品免费 | 青青草99 | av一区二区免费 | 久久久久人妻精品色欧美 | 精品国偷自产国产一区 | 在线国产福利 | a天堂中文字幕 | 一个色av | 日本理论片在线 | 91久久免费 | 欧美性潮喷xxxxx免费视频看 | 国产淫语| 欧美一级免费大片 |