2

如果我想让 Python 分布在多台计算机上的多个处理器上,我最好的方法是什么?如果我有 3 个八核服务器,那意味着我必须运行 24 个 python 进程。我将使用多处理库,并共享对象,看起来最好的主意是使用管理器。我希望所有节点作为一个大进程一起工作,所以一个管理器是理想的,但这会给我的服务器带来单点故障。有更好的解决方案吗?复制经理的对象存储是个好主意吗?

此外,如果经理要进行所有数据库查询,那么将它与数据库放在同一台机器上是否有意义?

4

3 回答 3

3

我认为更多信息会有所帮助,例如您正在提供什么服务,您将使用哪种数据库,您有什么样的延迟/吞吐量要求等等。很多东西取决于您的要求:例如。如果您的系统是一个典型的服务器,它有很多读取而不是很多写入,并且您在读取稍微陈旧的数据方面没有问题,您可以对每个进程的缓存执行本地读取,并且只将写入推送到数据库,将结果广播回缓存。

首先,我认为这取决于经理必须做什么。毕竟,如果您的系统是如此微不足道,以至于在没有灾难性硬件故障的情况下不会发生故障,那么担心单点故障可能毫无意义。但是如果你只有一个,把它和数据库放在同一台机器上是有意义的。你减少了延迟,如果一个没有另一个就宕机了,你的系统就无法生存。

于 2009-01-13T22:38:10.907 回答
3

您在分配流程时面临两个主要挑战:

  1. 协调正在拆分、分发和重新收集的工作(您可能会说,映射和缩减)
  2. 在相互依赖的进程之间共享正确的实时数据

#1的答案将在很大程度上取决于您正在执行的处理类型。如果它很容易水平分区(即您可以将较大的任务拆分为几个独立的较小任务),那么像HAProxy这样的负载均衡器可能是分散负载的便捷方式。

如果该任务不能简单地水平分区,我首先会看看现有的工具,如Hadoop是否适合我。分布式任务管理是一项难以完成的任务,而轮子已经被发明出来了。

至于#2,在进程之间共享状态,如果你共享一个绝对最小值,然后只以明确定义的方式共享它,你的生活会容易得多。即使是最小的任务,我也会亲自使用由您选择的 RDBMS 支持的SQLAlchemy 。对于小型和大型项目,查询界面功能强大且无痛。

于 2009-01-13T22:45:17.333 回答
0

似乎您的问题的要点是如何共享对象和状态。更多信息,特别是大小、频率、变化率和数据来源将非常有帮助。

对于跨机器共享内存,您可能想查看memcached。您可以存储数据并从任何工作进程快速轻松地访问它。

如果您的场景更像是一个简单的作业分配模型,您可能希望查看排队服务器 - 将您的作业及其相关数据放入队列中,并让工作人员从队列中提取作业。Beanstalkd可能是队列的一个不错的选择,这里有一个入门教程。

于 2009-01-14T07:48:08.610 回答