集群式伺服器架構

2022-06-08 13:48:14 字數 1685 閱讀 1035

為了達到1:10000的連線,可以採用server-client的連線方式,而為了達到1:10000*100的連線,我們怎麼辦呢?一般會採用client-> connserver -> logicserver。這是技術背景。connserver在接受完client 的連線後,將logic server 暴露給client,並立刻斷開連線。以後的資料互動就和conn server沒有關係了,這種架構有很多的優勢。執行緒是乙個非常重要的概念,尤其是現在多核伺服器的發展。當然,提到了執行緒自然應該說到執行緒之間的互斥。這也是伺服器開發者們在開發最初最容易出現的問題。體現在乙個資源或者多個資源在多個執行緒中共享使用如何避免出現髒資料的問題。

執行緒池,池,顧名思義,是乙個儲存容器,乙個淺顯的比方,我們把水事先存放在水池裡面,當我們需要的時候,就去裡面取,用完了就還給池(其實這裡並不是非常合適的例子,畢竟我們用完了水是丟掉)。這是乙個由多個執行緒組成的乙個佇列,當有事情發生時候,我們把當前的空閒的執行緒丟給他,為他服務。當下乙個事件發生的時候,我們又從池裡面取乙個空閒的執行緒丟給他,為他服務。當服務完畢,把執行緒丟回池中。起到反覆利用的目的。

記憶體池,同樣也是乙個池。這個概念的產生是為了避免伺服器頻繁的分配記憶體,而採取預先分配一定數目的物件,並將物件們放到佇列中,當需要的時候,從該佇列中取出,當用完,就返回池中。比如我們的server可能會存在10000個連線,我們預先開闢10000個client物件,儲存在list pfreeclientslist中,當需要的時候,從佇列中pop乙個出來,當使用完畢就丟回pfreeclientslist。這種機制很好的起到了避免頻繁開闢記憶體物件的目的,可以很好的提高系統的效能。

資料庫連線池,同上面一致的道理,在伺服器中,資料庫訪問也是乙個很大的瓶頸,所以同樣採取上面的道理,使用連線池的概念。當然在資料庫連線方面也有乙個特殊的問題存在。就是資料庫的連線不宜過多,所以傳統的來乙個處理,就開乙個連線是不合理的,必須採用控制適當的連線次數。

記憶體資料庫。硬碟的訪問速度和記憶體的訪問速度不是乙個數量級的,而且隨著記憶體的硬體**越來越低,記憶體資料庫的可行性也越來越高,尤其是實時性要求高的系統,完全可以採用記憶體資料庫和物理資料庫想結合的方法來處理。

l broker啟動,完成自身的初始化,之後進入事件迴圈,等待訊息到來。

l server啟動,首先執行自身的初始化,然後註冊自己到

broker

。l broker接收

server

的註冊請求,將其加入到可使用服務的列表,並回應

ack給

server

。l server接收

ack,進入事件監聽迴圈,等待訊息到來。

l client呼叫遠端服務物件的方法,

client_proxy

封裝訊息請其傳送給

broker

。l broker查詢可使用的

server

,將請求**給

server

。l server_proxy解析訊息,分離出引數和控制資訊,並呼叫特定的

server

實現介面。

server

處理完的結果通過

server_proxy

封裝成訊息**到

server

。l broker將相應訊息**給正確的

client_proxy

,client

受到響應繼續其他邏輯。

由於server是註冊到broker上的,所以server可以動態的增加、刪除、改變。

伺服器架構集群概念

伺服器架構集群 多台伺服器組成的響應高併發,高資料量訪問的架構集群。負載均衡 分發請求到不同的伺服器,使流量平均分配 靜態資源伺服器 儲存靜態資源,如css html js等。反向 a想訪問c,但a不能直接訪問c,而b能訪問c,所以a訪問b,b訪問c,c返回資料給a 在計算機網路 中,反向 是 伺服...

集群式遊戲伺服器架構方案設計開發

自從2003年開發voip radius server以及修改gnugk以來,從事伺服器開發已經近五年了,對伺服器開發也有一些自己獨到的看法以及見解。當擺脫了技術本身的束縛之後,才理解重要的並不是某種技術的運用,而是整體設計的考慮,也慢慢明白了設計是開發的靈魂的道理。從技術層面來看,各個平台都有一些...

集群式遊戲伺服器架構方案設計開發

自從2003年開發voip radius server以及修改gnugk以來,從事伺服器開發已經近五年了,對伺服器開發也有一些自己獨到的看法以及見解。當擺脫了技術本身的束縛之後,才理解重要的並不是某種技術的運用,而是整體設計的考慮,也慢慢明白了設計是開發的靈魂的道理。從技術層面來看,各個平台都有一些...