成為技術(shù)老大技術(shù)管理篇一技術(shù)演變史

上一篇我們聊了操作系統(tǒng)為高效利用網(wǎng)絡(luò)IO,提供的幾種解決方案。今天,我們繼續(xù)聊一下Web和應(yīng)用服務(wù)器的設(shè)計(jì)。

先說(shuō)一下Web服務(wù)器和應(yīng)用服務(wù)器啥區(qū)別。早期互聯(lián)網(wǎng)時(shí)代,信息大部分就是靜態(tài)的Html,這時(shí)候?qū)Ψ?wù)器來(lái)說(shuō),最大的問(wèn)題就是解決大量網(wǎng)絡(luò)請(qǐng)求的接入。后期隨著互聯(lián)網(wǎng)深入到我們生活的方方面面,信息已經(jīng)開(kāi)始動(dòng)態(tài)化和個(gè)性化,這需要我們經(jīng)過(guò)業(yè)務(wù)邏輯的處理后再返回動(dòng)態(tài)信息。

  業(yè)務(wù)處理邏輯和網(wǎng)絡(luò)處理邏輯怎么整合到一起呢。顯然,我們是想讓服務(wù)器能作為中間件獨(dú)立出來(lái)的,這就需要為業(yè)務(wù)邏輯模塊抽象出一個(gè)統(tǒng)一的接口,這就是CGI(通用網(wǎng)關(guān)接口)的由來(lái)。

  業(yè)務(wù)代碼只要實(shí)現(xiàn)CGI的要求,就可以被Web服務(wù)器掉起。業(yè)務(wù)代碼是邏輯比較復(fù)雜的,這也催生了各種開(kāi)發(fā)語(yǔ)言的誕生,從C到php、.Net、Java,其實(shí)本質(zhì)上是提供了更多的數(shù)據(jù)結(jié)構(gòu)和算法支撐,提供更深的抽象層次。讓業(yè)務(wù)代碼編寫(xiě)和擴(kuò)展更容易。

  有了CGI,我們?cè)倬唧w看Web服務(wù)器怎么接入這些不同的語(yǔ)言代碼。像php/.Net/Java這些語(yǔ)言都需要一些解析器或者運(yùn)行時(shí)來(lái)支撐,最簡(jiǎn)單的方式就是將這個(gè)運(yùn)行時(shí)作為一個(gè)module直接和Web服務(wù)器編譯在一起。但是這樣也有問(wèn)題,如果業(yè)務(wù)代碼出錯(cuò),可能整個(gè)Web服務(wù)器也會(huì)出問(wèn)題,影響其他業(yè)務(wù)請(qǐng)求的處理。

  再有一種方式,就是把解析器或者運(yùn)行時(shí)作為一個(gè)程序單獨(dú)運(yùn)行,當(dāng)Web服務(wù)器有請(qǐng)求到達(dá)的時(shí)候,直接調(diào)起解析器進(jìn)程,把請(qǐng)求參數(shù)傳遞過(guò)去。但是這樣做也有問(wèn)題,想象下有1000個(gè)并發(fā)的話,就需要1000個(gè)進(jìn)程來(lái)處理,能同時(shí)處理的并發(fā)不會(huì)太高。另外,每次請(qǐng)求都需要啟動(dòng)一個(gè)進(jìn)程,性能也會(huì)有問(wèn)題。

  我們?cè)诘诙N方式基礎(chǔ)上再優(yōu)化一下,每次請(qǐng)求完成后,該進(jìn)程不退出,繼續(xù)運(yùn)行著,當(dāng)有新的請(qǐng)求來(lái)的時(shí)候,繼續(xù)處理。這樣就避免了每次開(kāi)啟進(jìn)程的開(kāi)銷(xiāo)。

  我們可以看到,這幾種方式都是直接啟動(dòng)進(jìn)程來(lái)處理的,優(yōu)點(diǎn)是,每次請(qǐng)求是獨(dú)立的,如果出現(xiàn)了故障,也不會(huì)影響整個(gè)服務(wù)器;缺點(diǎn)是啟動(dòng)進(jìn)程的代價(jià)有點(diǎn)大,性能不高,而且高并發(fā)支持并不好。我們可以用線程這種方式來(lái)解決,進(jìn)程和線程互相配合,每個(gè)進(jìn)程有一個(gè)線程池并行處理,當(dāng)請(qǐng)求過(guò)多的時(shí)候,再啟動(dòng)新的進(jìn)程。這就是FastCGI的方式。

說(shuō)到這里,我們看到Web服務(wù)器已經(jīng)不僅僅只處理網(wǎng)絡(luò)請(qǐng)求了,也有了處理復(fù)雜業(yè)務(wù)的能力。隨著Java等技術(shù)的發(fā)展,逐漸出現(xiàn)了Tomcat等JavaEE的解決方案,他把Web請(qǐng)求和復(fù)雜業(yè)務(wù)的處理能力結(jié)合在了一起,提供了完整的解決方案。這種服務(wù)器我們叫做應(yīng)用服務(wù)器。

  其實(shí),無(wú)論是Web服務(wù)器,還是應(yīng)用服務(wù)器,還是單獨(dú)的網(wǎng)絡(luò)解決方案包,解決的問(wèn)題一樣,方案也有類似的地方。單獨(dú)的服務(wù)器代碼比較復(fù)雜,大家可以去看看網(wǎng)絡(luò)包的代碼,如ACE、Java的Netty等等,可以繼續(xù)深入研究。

總結(jié)一下,互聯(lián)網(wǎng)從只提供靜態(tài)信息,到提供個(gè)性化、動(dòng)態(tài)化的信息和服務(wù),極大的改變了我們生活的方方面面。技術(shù)永遠(yuǎn)為問(wèn)題而生,這也催生了Web服務(wù)器逐漸發(fā)展成為應(yīng)用服務(wù)器。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容