httpd
httpd是由apache軟件基金會開發的一款著名的web服務器軟件。由于其開放源代碼,并且擁有跨平臺、功能強大、安全穩定等特性,而被廣泛使用。早期httpd是在修修補補的基礎上成長起來的,所以早期也叫作a pachey server,由于開發httpd的組織叫作apache,因此httpd也被稱作apache。httpd有三個長線維護版本,分別是httpd2.0、httpd2.2和httpd2.4。使用最為廣泛的還是2.2和2.4的版本,雖然兩個版本看起來數字相差不大,但是這兩個版本改變還是挺大。
httpd支持許多特性,大部分特性都是通過編譯模塊實現,因此httpd是以核心加模塊組成的方式工作。httpd的模塊分兩種,一種叫作動態可裝載模塊(DSO),另一種叫作多道處理模塊(MPM)。DSO動態可裝模塊每個模塊對應httpd的某項功能,也就是我們廣泛意義上理解的功能模塊。但是,MPM多道處理模塊和DSO不一樣,它并不是指一種模塊,它代表的是httpd的一種工作特性,常用的MPM有,prefork、worker、event。
httpd的三種MPM模式
1、Prefork
prefork模式可以算是很古老但是非常穩定的Apache模式。Apache在啟動之初,就預先fork一些子進程,然后等待請求進來。之所以這樣做,是為了減少頻繁創建和銷毀進程的開銷。每個子進程只有一個線程,在一個時間點內,只能處理一個請求。
-
優點:成熟穩定,兼容所有新老模塊。同時,不需要擔心線程安全的問題。
-
缺點:一個進程相對占用更多的系統資源,消耗更多的內存。而且,它并不擅長處理高并發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。
prefork各參數說明:
2、Worker
和prefork模式相比,worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發的場景下會比prefork有更多可用的線程,表現會更優秀一些。
-
優點:占據更少的內存,高并發下表現更優秀。
-
缺點:必須考慮線程安全的問題,因為多個子線程是共享父進程的內存地址的。如果使用keep-alive的長連接方式,某個線程會一直被占據,也許中間幾乎沒有請求,需要一直等待到超時才會被釋放。如果過多的線程,被這樣占據,也會導致在高并發場景下的無服務線程可用。
worker各參數說明:
3、Event
這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。
-
event MPM在遇到某些不兼容的模塊時,會失效,將會回退到worker模式,一個工作線程處理一個請求。官方自帶的模塊,全部是支持event MPM的
event參數說明:
結語:httpd的MPM模塊通常用來應對各種生產環境的情況,在生產環境中web服務器的訪問量并不是一成不變的,所以有的時候我們可能需要修改相關參數來應對各種訪問量。
原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/68083
對于apache工作模型介紹的非常詳細,尤其是配置方面的知識,非常贊。