一種基於Qt的可伸縮的全非同步C/S架構server實現(一) 綜述

來源:互聯網
上載者:User

標籤:

       本文向大家介紹一種基於Qt的伸縮TCP服務實現。該實現針對C/Sclient-服務叢集應用需求而搭建。

串連監聽、傳輸資料、資料處理均在獨立的線程池中進行,依據特定任務不同,可安排負責監聽、傳輸、處理的線程數目,從而在高傳輸負荷、高計算符合上達成取捨。資料處理採用流水線結構。以避免少量客戶的密集計算請求影響其它client的處理。

本文相應的代碼符合LGPL協議,可直接從https://github.com/goldenhawking/zpserver下載. 也可從http://download.csdn.net/detail/goldenhawking/7461157 下載

     一、綜述

       在很多行業應用中。client-服務架構不可替代。

在client-服務架構下,服務扮演著重要的角色。

本文旨在介紹一種較為通用的服務實現形式。這個形式能夠依據詳細應用需求靈活配置。從而降低反覆開發的時間。該服務實現至少支援下列兩種需求。

       第一類是轉寄型服務,主要負責溝通兩個client之間的通訊,本身不做複雜的處理。這樣的服務一般要承受密集的串連,在某些應用中。還要承受沉重的傳輸負荷。典型的包含即時通訊、兩個內網之間的視頻通訊等。

        第二類是計算型服務,主要負責接收client的未經處理資料。處理後把結果返回。

這樣的服務一般執行在高效能server上,調用背景並行計算、異構計算資源。處理後把結果返回給client。這些服務的client數量一般不多。但在某些應用中,當輸入輸出資料量大時,傳輸負荷也非常重。

為了滿足上述兩類需求,服務設計具備例如以下特點。

        1、  可靈活設定監聽port

        2、  監聽、傳輸、處理均在獨立的線程池中執行。

        3、  可依據須要。靈活設定傳輸、處理線程的數目。

        4、  對某個單一client的處理。不會顯著拖慢全部client的響應。

        5、  須要支援分布式的叢集服務,典型的情況是基於若干實體電腦構成的快速區域網路實現進程叢集。

        6、  可同一時候支援SSL與普通TCP串連。

這些特點決定了本系統的架構設計。

(一)系統結構

服務由下面幾個模組組成.


1、  網路傳輸模組。負責管理用於監聽、傳輸的通訊端,並控制資料流在不同線程中流動。

資料收發由一定規模的線程池負責,實現方法全然得益於Qt的線程事件迴圈。被綁定到某個Qthread上的Qobject對象。其訊號-槽事件迴圈由該線程負責。這樣,便可方便的指定某個通訊端對象使用的線程。

相同,受惠於Qt的良好封裝,直接支援Tcp通訊端及SSL通訊端。且在執行時可動態調整。(註:編譯這個模組須要Qt的SSL支援,即在 configure 時增加  -openssl 選項

2、  任務流水線模組。負責資料的處理。

在計算密集型的應用中,資料處理負荷較重,須要和網路傳輸劃分開。

基於普通線程池的處理模式,也存在隊列堵塞的問題——若干個client請求的耗時操作,堵塞了其它client的響應。哪怕其它client的請求非常短時間就能處理完畢。也必須排隊等待。採用流水線線程池避免了這個問題。每一個client把須要做的操作進行粒度化,在一個環形的隊列中,線程池對單個client,每次僅處理一個粒度單位的任務。單個粒度單位完畢後。該client的剩餘任務便被又一次插入到隊列尾部。這個機制保證了client的總體延遲較小。

3、  服務叢集管理模組。該模組使用了網路傳輸模組、任務流水線模組的功能,實現了跨進程的server?àserver鏈路。

在快速區域網路中,串連是快速、穩定的。因此,該模組被設計成一種星型無中心網路。隨意新增server節點選擇現有server叢集中的隨意一個節點。接入後。通過廣播自己主動與其它server節點建立點對點連接。本模組僅僅是提供一個server到server的通訊隧道,不負責詳細通訊內容的解譯。對傳輸內容的控制。由詳細應用決定。

4、  資料庫管理模組

該模組基於Qt的外掛程式式資料庫封裝QtSql。

資料庫被作為資源管理。支援在多線程的條件下。使用資料庫資源。

5、  架構介面。雖然常見的服務執行時表現為一個後台進程。但為了更好的示範server的功能。避免繁瑣的配置,還是須要一個圖形介面來顯示狀態、設定參數。

本範例中,介面負責輪訓server的各個狀態。並設定參數。設定好的參數被儲存在一個ini檔案裡,並在服務開啟時載入。

6、應用專有部分模組。上述1-4共四個主要模組均是通用的。

他們互相之間沒有形成聯絡,不過作為一種資源存在於程式的執行時(Runtime)之中。

應用專有部分模組依據詳細任務需求,靈活的使用上述資源,以實現功能。在範例代碼中,實現了一種點對點的轉寄機制。示範者虛擬出一些工業裝置。以及一些操作員使用的client軟體。裝置與client軟體在成功認證並登入後,須要交換資料。改變這個模組的代碼,就可以實現自己的功能。

(二) 設計效能

項目

指標說明

指標值

備忘

支援的連線類型

取決於Qt的支援類型

SSL和Plain

執行時同一時候支援兩類.

協議

Ipv4 TCP , IPV6 Tcp

 

設計單進程串連數

在4\8傳輸線程配置下計算

1024\2048

取決於實際機器的效能和任務形式.

設計叢集規模

星型叢集的規模受到節點數影響。

100節點,9900個跨server串連。

區域網路中的串連數為節點數*(節點數-1)。

設計總使用者規模

100節點、每節點2048個使用者

20萬

 

下一篇文章,將開始介紹各個模組的設計思路。先給出範例代碼的測試編譯環境:

1、Ubuntu 14.04 + Qt5.2.1 openSSL 自編譯版

2、Win 7 x64 + VCExpress 2013 x64, x86 + Qt 5.2.1 openSSL自編譯版

3、Win XP x86 + VC2010Express x86 + Qt5.2.1openSSL自編譯版

主要介面:



一種基於Qt的可伸縮的全非同步C/S架構server實現(一) 綜述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.