gpt4 book ai didi

python - 评估我的 Python 服务器结构

转载 作者:太空狗 更新时间:2023-10-30 02:50:43 26 4
gpt4 key购买 nike

我正在用 Python 构建一个游戏服务器,我只是想获得一些关于我正在考虑的服务器架构的信息。

因此,众所周知,Python 无法通过单个进程进行跨内核扩展。因此,在具有 4 个内核的服务器上,我需要生成 4 个进程。

以下是客户端希望连接到服务器集群时所采取的步骤:

客户端最初与之通信的 IP 是网关节点。网关跟踪每台机器上有多少客户端,并将连接请求转发给客户端数量最少的机器。

在每台机器上,有一个 Manager 进程和 X Server 进程,其中 X 是处理器上的内核数(由于 Python 无法跨内核扩展,我们需要产生 4 个内核才能 100% 使用四核处理器)

管理器的工作是跟踪每个进程上有多少客户端,以及在其中任何进程崩溃时重新启动进程。当连接请求从网关发送到管理器时,管理器会查看该机器上的服务器进程(图中的 3),并将请求转发给客户端数量最少的任何进程。

服务器进程是实际与客户端通信的进程。

这是一个 3 机集群的样子。为了图表的方便,假设每个节点有 3 个核心。 alt text http://img152.imageshack.us/img152/5412/serverlx2.jpg

这也让我开始思考 - 我可以通过这种方式实现热插拔吗?由于每个进程都由管理器控制,当我想换入新版本的服务器进程时,我只是让管理器知道它不应该再向它发送任何连接,然后我将注册新版本的进程到旧的。只要客户端连接到它,旧版本就会保持事件状态,然后在没有更多连接时终止。

呸。让我知道你们的想法。

最佳答案

听起来你会想看看 PyProcessing , 现在包含在 Python 2.6 及更高版本中作为 multiprocessing .它负责处理多个进程的许多机制。

另一种架构模型是使用类似于 beanstalkd 的方式设置工作队列并让每个“服务器”从队列中提取作业。这样你就可以根据需要添加服务器,交换它们等等,而不必担心向管理器注册它们(这是假设你在服务器上分配的工作可以量化为“工作”)。

最后,在 HTTP 上构建整个东西并利用现有的众所周知且高度可扩展的负载分配机制可能是值得的,例如 nginx .如果您可以使通信基于 HTTP,那么您将能够使用许多现成的工具来处理您描述的大部分内容。

关于python - 评估我的 Python 服务器结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com