【问题标题】:Distributed system: Python 3 worker and Node.js server?分布式系统:Python 3 worker 和 Node.js 服务器?
【发布时间】:2014-11-10 20:55:18
【问题描述】:

我希望建立一个分布式系统,其中有计算/工作机器运行资源密集型 Python 3 代码,并且有一个 Web 服务器将 Python 计算结果提供给客户端。我非常想用 Node.js 编写 Web 服务器。

我研究过使用 RPC 框架 — 具体来说,this question 引导我到 ZeroRPC,但它与 Python 3 不兼容(主要问题是它需要 gevent,这不是那么接近到 Python 3 版本)。据我所知,Python–Node.js RPC 似乎没有另一个可行的选择。

鉴于此,我愿意使用 RPC 以外的其他东西,尤其是因为我了解到 RPC 策略对程序员隐藏的太多。

如果这真的更有意义,我也愿意为 Web 服务器使用不同的语言;例如,从开发的角度来看,将 Python 也用于服务器可能会更简单。

我怎样才能做到这一点?

【问题讨论】:

  • 我按照您提供的链接,找不到任何提及它与 Python 3 不兼容的信息。源链接将您带到一个 github 存储库,该存储库显然包含与 Python 3 相关的签入。我输入了pip3 install git+https://github.com/dotcloud/zerorpc-python,但它有大量的先决条件,我不想等待。也许它与 Python 3 不兼容,但我看不出有任何理由期待它。
  • @abarnert 根据this,它依赖于不兼容Python 3 的gevent
  • @dano:好的,这就解释了。
  • Will,如果 geventonly 阻止您使用 Python 3 所需库的东西,那么您使用 @ 的预发布分支是否合理987654329@在开发期间,目标是在准备好后切换到真实的东西?如果是这样,请参阅 issue #38,或 google 以获取外部维护的分支之一。
  • 当然,生活在最前沿有点风险。我已经冒过几次风险并侥幸逃脱了,但如果你有信心可以为移植做出贡献,如果它成为你最后期限的主要障碍……

标签: python node.js rpc distributed


【解决方案1】:

这里有几个选项。


首先,听起来你喜欢 ZeroRPC,唯一的问题是它依赖于 gevent,它还没有 3.x-ready。

嗯,gevent接近 3.x-ready。人们正在测试甚至使用它的一些分支,您可以在issue #38 上看到。截至 2014 年 9 月中旬,似乎最受关注的是Michal Mazurek's。如果你幸运的话,你可以这样做:

pip3 install git+https://github.com/MichalMazurek/gevent
pip3 install ZeroRPC

或者,如果 ZeroRPC 的元数据表明它是 Python 2-only,你可以从它的 repo 安装它,就像 gevent 一样。

不利的一面是,gevent-3.x 分支都还没有经过实战考验,这就是为什么它们都没有被上游接受并发布的原因。但是,如果你不是很着急,并且愿意冒险,那么很有可能你今天可以从一个分叉开始,并在它发布时切换到最终版本,希望在你自己达到 1.0 之前。


其次,ZeroRPC 肯定不是唯一可用于 Python 或 Node 的 RPC 库。而且它们中的大多数都具有类似的接口,用于通过 RPC 公开方法。而且,虽然出于可扩展性或部署原因,您最终可能需要像 ZeroMQ 这样的东西,但您可能可以使用更简单、更广泛的东西,比如 HTTP 上的 JSON-RPC(它有十几个 Python 和 Node 实现)来进行早期开发,然后稍后切换到ZeroRPC


第三,RPC 并不十分复杂,而且大多数库所做的绑定方法到 RPC 并不难。使其异步可能会很棘手,但同样,对于早期开发,您可以只使用一个简单但不可扩展的解决方案——为每个请求创建一个线程——然后再切换到其他东西。 (当然,只有当您的服务是无状态的时,该解决方案才容易实现;否则您只是消除了所有异步问题并用竞争条件问题替换它们……)

【讨论】:

  • 感谢您的优雅总结。我的项目还处于非常早期的测试阶段,它确实是无状态的。我想我会试试你建议的gevent 叉子,如果它工作起来没有太多麻烦就使用它;否则我可能会选择选项 2。
【解决方案2】:

ZeroMQ 提供了几个传输类,而前两个最适合异构 RPC 层的情况

  • ipc://
  • tcp://
  • pgm://
  • epgm://
  • inproc://

ZeroMQ 有两个系统的端口,因此肯定也能满足您的预期需求。

【讨论】:

  • 谢谢!所以你认为我应该自己写?我更倾向于使用久经考验的库,因为我想尽量减少对非业务逻辑代码的维护——但如果你认为这是最好的选择,你能详细说明一下为什么吗?跨度>
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2020-02-10
  • 2013-04-02
相关资源
最近更新 更多