C 伺服器設計(零) 總體設計

2022-08-16 04:03:23 字數 2309 閱讀 4663

這個系列把畢業**的部分貼了出來,以作儲存留念。整個系列分為三大部分,其中第一章到第三章是介紹伺服器的系統層設計,設計思路參考了libevent和muduo等開源**的實現;第四章到第六章是介紹伺服器的服務層設計,設計思路參考了自己的khala實現;第七章介紹了如何利用該伺服器框架實現一款類似於qq的聊天系統。全文主要參考了陳碩的《linux多執行緒服務端程式設計》、《unix網路程式設計卷1》。

本系統是用c++設計實現的tcp網路伺服器框架。該系統底層i/o部分採用基於reactor模式的非阻塞模型,執行緒部分採用event loop+ 執行緒池模型。系統的服務層具有超時檢測管理、多型別裝置和多事件訊息管理,以及連線生命週期管理的功能。同時整個系統通過封裝實現了網路實現與業務邏輯相分離的多執行緒網路框架。

該框架面向網路業務開發者,對整個網路服務端的開發過程提供了更高層的封裝,能夠大大降低業務開發難度。通過該框架,開發者無需關心底層網路i/o及多執行緒下併發連線的實現,只需根據具體業務所屬裝置型別編寫業務邏輯作為訊息響應事件,並可以選擇使用服務層提供的相關服務作為業務支援。

該框架適用於區域網內基於tcp長連線的業務場景。比如智慧型家居下的多裝置管理,區域網內的多使用者聊天工具等。在這些場景中,通過使用本系統框架,開發者只需編寫少數業務相關的**即可完成服務端功能的實現。

本伺服器系統主要從高效和易用兩個方面作為設計的核心。

高效是指合理設計系統底層的i/o和執行緒模型,充分利用cpu和記憶體資源,達到盡可能的高連線和高併發的要求。此處只考慮伺服器硬體效能的利用,並不考慮乙太網頻寬的限制。

易用是從兩個方面出發進行考慮。第一是將網路細節與業務邏輯相分離,使該框架的開發者從底層瑣碎細節中解脫出來,只需專注於業務邏輯的編寫;第二是提供一層服務層,能為對於連線超時、多裝置及生命週期支援等特定場合下有特殊需求的開發者提供服務支援。

本伺服器系統的基本需求分析如下:

如圖2-1所示,整個伺服器框架由系統層、服務層和使用者層組成,執行於linux作業系統之上。其中系統層和服務層構成框架主體,並通過相關介面提供給使用者層使用。使用者層由框架的使用者依據具體業務進行實現。每層的具體介紹如下。

圖2-1 服務框架軟體架構圖

系統層是整個伺服器系統框架的核心。它與作業系統互動,通過i/o和執行緒等機制,保證了整個系統的正常高效執行,並提供了對底層系統及網路等細節的封裝,保證了與上層具體業務邏輯的分離。

系統層由reactor模式、多執行緒模型、連線物件和應用層i/o緩衝四個部分組成。在reactor模式中,通過linux下的epoll系統呼叫實現的非阻塞i/o機制,實現了對不同連線的i/o事件的管理,構成了系統層的主體。同時在多執行緒模型中,採用了event loop + 執行緒池機制[39],同時執行緒間通過任務佇列的形式進行通訊,並且保證對於每個連線的整個連線週期中都在乙個執行緒中進行管理。在連線物件部分,對每個連線的描述符等資訊和連線相關操作進行了封裝處理。在應用層i/o緩衝中,通過緩衝機制,封裝了非阻塞i/o下的資料收發處理,保證了資料收發下的完整性。

服務層是在系統層的基礎上進行了進一步封裝,並提供了更多的服務功能。理論上整個框架可以剝離服務層而單獨在系統層上執行,但框架的易用性將大打折扣,同時業務邏輯也將很容易侵入到系統層的**中。使用者可以根據具體業務需求選擇使用服務層的某些功能,對不需要的服務進行關閉。因此在實際使用中應該基於服務層提供的介面進行開發工作。

服務層主要由連線超時管理、多裝置型別管理和連線生命週期管理三個部分組成。

在多裝置型別管理中,服務層提供了以裝置型別為單位制定不同的訊息事件,並為不同訊息事件實現具體處理的機制。服務層預設實現了臨時裝置型別和登入裝置型別這兩種裝置型別,並為其制定了和登入相關的訊息事件及處理。

連線的生命週期管理主要是提供一組和連線的生命週期狀態變化和錯誤處理相關的介面,並以裝置型別為單位進行管理。這些生命週期狀態包括連線的建立、登入、超時及退出等。使用者可以為不同的裝置型別的連線制定不同的生命週期介面實現,比如統計每乙個新建連線資訊,或對不同型別的登入連線進行驗證等。

圖2-2 使用者建立新的裝置型別

使用者層位於整個伺服器系統框架之上,由該框架的使用者根據具體的業務需求進行實現。使用者主要工作為根據連線型別建立新的裝置型別物件,如圖2-2所示,並為新的裝置型別註冊業務相關的訊息事件和處理機制,並根據需求實現該裝置型別對應連線的生命週期介面。

整個伺服器框架設計中並不涉及磁碟檔案i/o和資料庫操作,而在具體服務端業務程式設計中通常會涉及資料庫操作。如果需要連線使用資料庫,服務端開發者應該在系統使用者層自行實現或匯入第三方的資料庫操作類庫,比如mysql++庫等,並通過該庫的api實現與後台資料庫的互動操作。

行情服系統總體設計 Cache伺服器

一 概述 1 什麼是cache伺服器 cache伺服器是新 系統中的乙個部件,對遠端的客戶端提供 資料服務,對客戶端來說所實現的功能和轉碼伺服器一致。那麼既然cache伺服器實現和轉碼伺服器一致的功能,為什麼又要在 系統中提供這個部件呢?那是因為cache伺服器有乙個最大的特點,就是本地不需要有任何...

總體設計是建模

工作都快兩年了 對軟體開發流程才開始有點認識 先談談對軟體總體設計的理解.所謂總體設計 是在對目標系統的理解 分析的基礎上 對系統進行抽象 建模的過程 這個過程是非常重要的 可以說是系統設計階段 這個模型描述了目標系統的功能的大體是如何完成的 說明了系統內部的模組是如何劃分的 以及它們又是如何聯絡在...

什麼是展覽的總體設計

展覽的總體設計,是展覽的設計與實施的主導,是根據展覽展出方案主題結合展館的情況,從總體的布局上對展出形式 展覽效果 色彩 風格和展覽的宣傳等進行總體形象的構思設計,將不同的展品進行統一的組織安排,使之成為有機聯絡的整體,同時使展出者和參觀者有著合理的工作和活動空間。總體設計的內容 總體設計包括展覽會...