2009-01-19 51 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进行通信,那么您将能够使用大量现成的工具来处理您描述的大部分内容。