Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
评估我的Python服务器结构_Python - Fatal编程技术网

评估我的Python服务器结构

评估我的Python服务器结构,python,Python,我正在用Python构建一个游戏服务器,我只是想得到一些关于我正在构思的服务器架构的信息 因此,众所周知,Python无法通过单个进程跨核心扩展。因此,在具有4个内核的服务器上,我需要生成4个进程 以下是客户端希望连接到服务器群集时采取的步骤: 客户端最初与之通信的IP是网关节点。网关跟踪每台机器上有多少个客户端,并将连接请求转发到客户端数量最少的机器 在每台机器上,都有一个管理器进程和X个服务器进程,其中X是处理器上的内核数(因为Python无法跨内核扩展,所以我们需要生成4个内核才能使用10

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

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

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

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

在每台机器上,都有一个管理器进程和X个服务器进程,其中X是处理器上的内核数(因为Python无法跨内核扩展,所以我们需要生成4个内核才能使用100%的四核处理器)

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

服务器进程实际上是服务器与客户机通信的过程

下面是3机器集群的外观。为了绘制图,假设每个节点有3个核心。

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


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

听起来像是你们想看的,现在包含在Python2.6及以后的版本中。它处理许多处理多个过程的机器

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

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