评估我的Python服务器结构

2024-10-02 10:27:20 发布

您现在位置: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

这也让我想到——我可以这样实现热交换吗?由于每个进程都由管理器控制,所以当我想换入服务器进程的新版本时,我只需让管理器知道它不应该再向它发送任何连接,然后我将用旧版本进程注册新版本进程。只要客户端连接到旧版本,旧版本就保持活动状态,然后在没有客户端时终止。在

嘘。告诉我你们的想法。在


Tags: 版本服务器机器游戏客户端网关管理器核心
1条回答
网友
1楼 · 发布于 2024-10-02 10:27:20

听起来你想看看PyProcessing,它现在作为multiprocessing包含在Python2.6及更高版本中。它处理了许多处理多个过程的机器。在

另一种体系结构模型是使用类似beanstalkd的方式设置一个工作队列,并让每个“服务器”从队列中提取作业。这样你就可以随心所欲地添加服务器、交换服务器等等,而不必担心向管理器注册它们(这是假设你在服务器上传播的工作可以量化为“作业”)。在

最后,可能值得在HTTP上构建整个过程,并利用现有的已知和高度可伸缩的负载分配机制,例如nginx。如果你能使通信基于HTTP,那么你就可以使用很多现成的工具来处理你所描述的大部分内容。在

相关问题 更多 >

    热门问题