linux高性能服務器讀書筆記之服務器模型

1.模型一:C/S(經典的)
起因:TCP/IP協議是沒有客戶和服務端的區別。但是資源(視頻,新聞,軟件)都是被數據提供者所壟斷
邏輯:服務器啓動後,首先創建一個或多個監聽socket,並且調用bind函數將其綁定到需要(自定義)的端口,然後調用listen函數等待客戶連接
特點:客戶連接是隨機事件,需要某種I/O模型來監聽連接。
例子:服務器I/O複用技術之一的select系統調用
(當監聽接收到連接 ,服務器用accept來接收,並且分配一個邏輯單元爲它服務,(fork系統產生邏輯單元,邏輯單元處理好一切返回給客戶端,邏輯單元可以是新創建的子進程,子線程或其他)))

2.接下來就是宅男熟悉的P2P模型

優勢:就是去掉通信的中心
特點;就是每臺機器在消耗服務的時候也會給別人提供服務
例子:迅雷,雲計算機羣
問題:主機相互之間很難發現(發現服務器來解決這個問題)
但是本質還是CS,只是一個變相的擴展

I/O處理單元--------》邏輯單元---------》網絡存儲單元 
中間都是由請求隊列(通信方式,一般是永久的tCP連接)
2.1I/O處理單元:管理客戶連接的模塊,等待並且接受新的連接,接受客戶的數據,將服務器的相應的數據返回客戶端。數據的收發不一定在這裏,也可能在邏輯單元,(取決於事件處理模式)

2.2邏輯單元:分析並且處理數據,然後將結果傳遞給I/O處理單元或者直接發送給客戶端(對於機器羣來說,一個邏輯單元也許就是一臺邏輯服務器)
2.3.網絡儲存:可以是數據庫,緩存和文件,或者一臺服務器(有些是不需要的,如ssh,telnet)
2.4.請求隊列:各個單元之間通訊方式的抽象
兩個方面:I/O處理單元通知邏輯單元的方式,邏輯單元訪問存儲單元的機制
這裏就會涉及到池的概念,這個TCP理解一般是事先建立好的永久高效的TCP連接

3.I/O模型
3.1阻塞和非阻塞可以用於所有的文件描述符,不僅僅是socket,
3.2阻塞是可能是無法立即完成而被操作系統掛起,知道等待完成事件發生。
3.3非阻塞是系統的調用總是立即返回。,所以如果完成世家沒有發生,就會返回和錯誤一樣的標記。(errno可以區分)
要求:我們需要在完成世家發生的情況下,操作非阻塞,才能實現高效率。
例子:I/O複用(最常用的通知機制,還有SIGIO信號)
含義:有個函數叫I/O複用函數,他可以向內核註冊一組事件,內核可以將已經完成的事件通知給應用程序。
例子:I/O複用函數:select,poll,epoll_wait
原理:本身每個函數都是阻塞的,但是他們都具有監聽多個I/O事件 的能力
備註:SIGIO的信號處理以後再說
備註2:上述的阻塞I/O,I/O複用和信號驅動I/O都是同步I/O模型。
原理:I/O讀寫操作都是在I/O事件發生之後
異步I/O:(POSIX規範)用戶可以直接對I/O進行讀寫操作,這些操作會告訴用戶讀寫緩衝區的位置,以及操作完成後內核通知應用程序的方式

二者核心區別:同步是用戶自己處理I/O操作,異步I.O是內核執行I/O操作。
區別2:同步嚮應用程序通知二是I/O就緒事件,異步是I/O完成事件。

linux下,aio.h 提供了對異步I/O的支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章