2009-01-19 64 views
3

我建立一個遊戲服務器在Python,我只是想對我的想法了服務器的體系結構的一些輸入。評估我的Python服務器結構

所以,大家都知道,Python不能擴展跨與單個進程的核心。因此,在具有4個內核的服務器上,我需要產生4個進程。

下面是當一個客戶機希望連接到服務器羣集所採取的步驟:

客戶端最初與連通。IP是網關節點。網關會跟蹤每臺計算機上有多少客戶端,並將連接請求轉發給客戶端數最少的計算機。

在每臺機器上,都有一個Manager進程和X服務器進程,其中X是處理器上的核心數量(因爲Python無法在覈心之間擴展,所以我們需要生成4個核心以使用100%的四核處理器)

經理的工作是讓多少客戶對每個進程的軌道,以及其中是否崩潰重啓進程。當連接請求從網關發送到管理器時,管理器查看該計算機上的服務器進程(圖中的3),並將請求轉發給擁有最少量客戶端的任何進程。

服務器進程是實際不與客戶的溝通。

這是3機器集羣的樣子。爲了圖表,假設每個節點有3個核心。 alt text http://img152.imageshack.us/img152/5412/serverlx2.jpg

這也讓我想到了 - 我能實現這種熱插拔嗎?由於每個進程都由管理員控制,因此當我想要交換服務器進程的新版本時,我只需讓經理知道它不應再發送更多連接,然後我將註冊新版本進程舊的。只要客戶端連接到舊版本,舊版本就會保持活動狀態,然後在沒有更多客戶端時終止。

Phew。讓我知道你們的想法。

回答

5

聽起來像是你會想看看PyProcessing,現在包括在Python 2.6及以後爲multiprocessing。它需要處理很多處理多個進程的機制。

另一種架構模型是設置使用類似beanstalkd,並讓每個隊列中的「服務器」拉作業的工作隊列。這樣,您可以根據需要添加服務器,將其交換出去等,而不必擔心向管理員註冊這些服務器(假設您在服務器上傳播的工作可以量化爲「工作」)。

最後,在HTTP上構建整個事物並利用現有衆所周知的高度可擴展的負載分佈機制(如nginx)可能是值得的。如果您可以通過HTTP進行通信,那麼您將能夠使用大量現成的工具來處理您描述的大部分內容。