企業級服務器設計與實現經驗之開篇

      這個題目聽起來蠻嚇人的,畢竟本人的經驗值也不高,卻大放厥詞在這裏談“企業級”。原因有二,一是把這一年以來的開發DataServer服務器的工作做個總結;二是希望能拋磚引玉,希望這方面的研究和交流繁榮起來,畢竟,目前講這方面實戰經驗的文章資料太少了。

       正式開題之前,絕對有必要先簡單的介紹相關的背景。在寫這篇文章的時候,我在航天量子數碼科技有限公司(Aeromatex)產品部工作,全權負責DataServer的設計與實現。

      DataServer基於GIS/GPS是用於提供各種基於位置服務及其它遠程信息服務的發佈平臺,它主要作爲服務器端對各種終端(如手機、智能設備、網頁瀏覽器等)提供服務。服務的類型很多,爲了便於後面的展開,我簡單的介紹兩個。第一個是POI查詢,POI即興趣點,通俗的說就是感興趣的位置,如某所大學,某個酒店。比如客戶端請求“武漢大學”這個POI的信息,服務器就會返回與武漢大學相關信息,如地理位置(經緯度)、電話、郵編、簡介等資料。第二個是路徑規劃服務,所謂路徑規劃,就是客戶端發出一個類似“從地方A到地方B最短的路徑該怎麼走?”,服務端則會返回一條路徑,該路徑描述大致像“從A出發直走到D處左轉……到達B”。

     像POI查詢、路徑規劃等服務,我們稱之爲功能服務。與功能服務相對的是非功能服務,如用戶管理、流量記錄、日誌管理等。在一開始就將服務劃分爲功能性的與非功能性的,有利於後面的設計。基於服務的功能性與非功能性的劃分,我們將DataServer服務器拆分爲兩個:功能服務器和應用服務器。

      功能服務器的主要目標是高效穩定的提供純的功能服務,不與具體的應用相關,也不管理用戶,它作爲應用服務器的後盾。DataServer應用服務器作爲功能服務器的客戶端,客戶直接與應用服務器相連,應用服務器轉發客戶的功能請求給功能服務器,並將來自功能服務器的回覆發送給客戶端,另外應用服務器還要實現對用戶的管理。它們之間的聯繫如下圖所示。

 

 

      就像所有企業級服務器所要求的一樣,DataServer服務器(無論是應用服務器還是功能服務器)必須處理以下棘手的問題:

     (1)   極大的併發量。如果是以TCP的方式提供服務,幾千個客戶同時在線是很正常的。

     (2)   響應速度快。如果客戶端發出一個請求後要等10秒以上才能得到回覆,估計客戶下次就沒有興趣再訪問你的服務了。

     (3)   穩定性。7×24小時連續工作,除非硬件故障。而解決硬件故障的方法之一是使用故障轉移集羣技術。

    (4)   靈活。我們對DataServer的要求之一是實現功能服務的“熱插拔”。我們採用插件技術來解決“熱插拔”問題。

    (5)   安全。服務器與客戶端之間的通信消息必須加密。

    (6)   無人看守。如果停/斷電又來電後,DataServer能自動啓動並加載服務然後進入運行。這樣週末無人在時若發生停電又恢復供電的情況則無需人工干預了。

        我們將功能服務做成插件,這樣就可以在運行時加載/移除一項功能服務。因爲位置服務的類型會越來越多,不停止服務器而加載新的服務進來是很基本的要求。爲了能方便的更替通信協議,如把TCP方式改爲UDP方式,我們把通信層也做成插件,更換通信協議,只需要更換通信插件即可。系統中主要的插件類型就是通信插件和功能插件。在以後的分析設計中,還會有更多類型的插件加入進來。

        爲了更清晰的介紹DataServer功能/應用服務器的設計與實現過程,我打算依照以下幾個主題逐漸展開。在深入這些主題的的過程中,我們可以看到以上的棘手問題是如何一個個被解決的。主要的主題目錄如下:

一.系統框架。

(1)基礎結構

(2)負載平衡集羣

(3) 綜合考慮 

二.插件系統。

(1)插件基礎

(2)插件加載器

(3)插件管理者

(4)系統插件綜合管理器

(5)通信插件

(6)功能插件

(7)基本請求處理者插件

(8)回覆截獲者插件

(9)用戶任務報告者插件 

三.  通信層基礎

(1) Tcp監聽者IXTcpListener ―― 用於封裝TCP監聽者及監聽線程。

(2)線程安全的網絡流―― ISafeNetworkStream

(3)用戶連接上下文 ContextKey

(4)異步通信模型

(5)完成端口模型

(6)分佈式遠程處理 .NET Remoting 

四.應用服務器與功能服務器之間功能性通信

(1)TCP連接池

(2)多TCP連接池管理器

(3)TCP連接池調度者 

五.應用服務器與功能服務器之間非功能性通信

(1)功能服務器性能監視器

(2)功能服務器上下文信息發佈者 XmlParser

(3)數據庫基礎配置管理者

(4)數據庫信息配置控件 DBConfigControl  

六.基本用戶管理。

(1)用戶合法性檢查

(2)定時掉線檢查 

七.消息管理――請求與回覆消息

(1)消息格式定義

(2)消息加密

(3)消息分裂器

(4)消息分派器

(5)消息處理器 

八.日誌記錄。

九.其它

      你也許感到奇怪,上面的各個主題似乎沒有一個是關於3層/N層架構的。是的,沒有,準確的說,這是一個“框架+插件”的結構,是一種橫向的架構,而3/N層架構側重於縱向。但是橫向架構中的某個插入的插件的實現方式可能就是3/N層結構的,比如後面將看到的功能插件。

 

 

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