高性能服务器设计——常用网络服务器设计模型(转载)
文章來源:http://blog.csdn.net/jiang1013nan/article/details/17471341
?
? ? ? ? 在業務服務開發過程中,一個優秀的開發框架,往往能夠起到事半功倍的效果。現介紹總結一種在服務器開發過程中,比較常用的一種服務器開發模型。
??????? 在介紹之前,先總結一下目前比較常用的一些服務器開發模型。
??????? 1)? 迭代性服務器
??????? 迭代性服務器,在開源社區的代表之作是Apache Web服務器。該模型中,存在唯一的偵聽進程,偵聽進程accept新的鏈接之后,通過fork的方式,派生出一個新的進程來為這個請求進行專門的服務,直至請求全部處理完成,被fork的進程也會自動退出,在服務過程中被占用的各種資源得以釋放。
?????? ?這種服務器開發模型的優缺點分別如下:
??????? 優點:
???????????????? 開發流程比較清晰,對開發人員的要求比較低,對于內存泄漏、句柄未釋放等各種請求服務器開發比較頭疼的問題,隨著業務進程自動銷毀,全部都一了百了;
???????? 缺點:
????????????????? 每接受一次請求,均需要fork一個新的子進程,效率比較低,主要受限于機器fork進程的效率,不適合處理并發量比較大的情況;?
?????????使用場景:
????????????????? 迭代模型比較適合于請求并發量小,每次請求處理時間相對比較耗時的業務(業務處理流程比較復雜),例如處理圖片上傳等時耗比較長的業務。
?
??????????2)并發性服務器
??????????并發性服務器,顧名思義,同一時刻可以接受多個客戶端的請求消息。這種模型的從實現方式來分主要有兩種類型:多線程和多進程模型。在并發服務模型中,由主進程socket的listen等操作,然后fork出多個業務處理進程,每個業務進程在該socket上面進行accept操作,爭相去獲取該請求的處理權(實際上是由操作系統來進行客戶端的請求分配一個正在等待的其中一個業務進程)。業務進程接收到客戶端處理請求之后,開始進行具體的業務流程處理,待業務流程處理結束之后,又重新回到accept的位置,等待處理下一個客戶端請求,按照這個流程周而復始,循環執行;
?????????? 這種服務器開發模型的優缺點分別如下:
?????????? 優點:
??????????????????? 并發服務模型,并發處理客戶端請求的能力有了很大的提升,也是在中度并發請求量的場景下比較常用的服務器模型;?
????????????優化改進版:
?????????????????? 在實際開發過程中,可能會遇到業務進程發生內存泄漏、句柄泄漏、段錯錯誤等不容易分析出來的場景,這種情況下,可以設定每個業務進程只處理多少次,到達指定的次數之后,自動銷毀釋放,父進程不斷檢測子進程的個數,當子進程的個數不符合需求時,由父進程重新fork出新的子進程來處理新的請求;
?
????????????3)? 異步服務器
???????????歸結命名為異步服務器模型,主要特征在于,該類服務器模型均使用網絡異步模型select或者epoll等,使用異步網絡模型的優勢在于:單個進程(線程)可以同時等待多個socket的讀寫事件,大大的提高了網絡操作的效率,目前來講,網絡異步模型尤其是epoll基本已經是高性能服務性的標配。開源社區使用網絡異步模型典型有:Memcached(基于libevent)、Redis、Nginx等開源力作。
使用網絡異步事件的典型是采用多線程模型,在單進程中,存在一個專門的偵聽線程,負責整個服務中網絡連接、可讀、可寫等事件的偵聽,例如存在可讀事件時,通知給具體的業務處理線程來進行處理。(參見文章的線程模型圖片,http://www.iteye.com/topic/344172)。
???????????采用這種網絡模型的優缺點分別為:
????????? 優點:
?????????????????? 網絡操作高效,可以快速的處理海量網絡請求的情況;
????????? 缺點:
?????????????????? a)系統復雜度比較高,對開發人員的開發功底要求比較高;
?????????????????? b)?業務代碼與網絡操作網絡耦合在一起,一處出現問題,會導致滿盤皆輸;
?
?? 以上只是做了一個非常淺薄的介紹,以上三種網絡模型均是曾經或者當前比較流行的網絡服務器開發模型。
轉載于:https://www.cnblogs.com/lizhanwu/articles/4169744.html
總結
以上是生活随笔為你收集整理的高性能服务器设计——常用网络服务器设计模型(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI 人工智能 探索 (八)
- 下一篇: SharePoint开发 - Excel