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

另外,如果管理器要执行所有数据库查询,将其与数据库放在同一台计算机上是否有意义?

有帮助吗?

解决方案

分发流程时面临两个主要挑战:

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

第 1 个问题的答案很大程度上取决于您正在执行的处理类型。如果它很容易水平分区(即你可以把更大的任务分成几个 独立的 较小的任务),负载均衡器,例如 HA代理 可能是分散负载的便捷方法。

如果任务不是简单的水平分区,我首先会看看是否有现有的工具,比如 Hadoop, ,会为我工作。分布式任务管理是一项很难做好的任务,而轮子已经被发明了。

至于#2,在进程之间共享状态,如果您共享绝对最小值,然后仅以明确定义的方式共享它,那么您的生活会容易得多。我个人会使用 SQL炼金术 即使是最小的任务,也由您选择的 RDBMS 提供支持。查询界面功能强大且轻松,适合小型和大型项目。

其他提示

我想更多的信息将是有益的,对你有很多东西要看你的需求什么样的,你所服务的事情,你会用什么样的数据库,什么样的延迟/吞吐量要求等:如。如果你的系统里面有很多读取并没有那么多的写操作的典型服务器,而你没有问题,阅读稍陈旧的数据,可以进行本地上的每个进程对读取高速缓存,仅推写入数据库中,广播所述结果返回给高速缓存。

一开始,我觉得要看是什么经理必须做。毕竟,如果你的系统是如此的微不足道,失败是不会出现短灾难性的硬件故障的担心单点故障可能是没有意义的。但如果你只是有一个,有它在同一台机器上的数据库是有道理的。你减少等待时间,如果一个出现故障没有其他反正你的系统就无法生存。

看来你的问题的要点是如何共享对象和状态。详细信息,特别是大小,频率,变化率,以及数据的来源将是非常有益的。

有关你可能想看看 memcached的跨机器共享内存。你可以存储你的数据和任何工作进程访问它快速和容易。

如果您的方案更为你可能想看看排队服务器的简单作业分配模式 - 把你的作业及其相关数据到一个队列,并有工人从队列中拿起作业。 Beanstalkd 可能是队列一个不错的选择,这里有一个的入门教程

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top