我希望建立一个分布式系统,其中有运行资源密集型Python 3代码的计算/工作机器,并且只有一个web服务器向客户端提供Python计算的结果。我非常想用Node.js编写web服务器。
我已经研究过使用RPC框架--具体来说,这个问题引导我使用ZeroRPC,但它与Python3不兼容(主要问题是它需要gevent,它还没有接近于Python3版本)。据我所知,Python-Node.jsRPC似乎没有另一个可行的选项。
有鉴于此,我对使用RPC以外的东西持开放态度,特别是因为我已经读到RPC策略对程序员隐藏得太多了。
如果这真的更有意义的话,我也愿意为web服务器使用一种不同的语言;例如,从开发的角度来看,只为服务器使用Python可能要简单得多。
我怎样才能做到这一点?
发布于 2014-09-17 19:51:11
你有几个选择。
首先,它听起来像是您喜欢ZeroRPC,而您唯一的问题是它依赖于gevent,它还没有准备好3.x。
好吧,gevent已经接近3.x了。有一些分叉是人们正在测试甚至使用的,您可以在第38期上看到这一点。截至2014年9月中旬,米哈尔·马苏雷克似乎获得了最大的吸引力。如果你幸运的话,你可以这么做:
pip3 install git+https://github.com/MichalMazurek/gevent
pip3 install ZeroRPC或者,如果ZeroRPC的元数据显示它仅限于Python2,那么您可以使用与gevent相同的方式从它的回购中安装它。
不利的一面是,gevent-3.x叉子还没有经过很好的战斗测试,这就是为什么它们还没有在上游被接受并被释放的原因。但是,如果您不着急,并且愿意冒险,那么您很有可能从今天的叉子开始,在发布时切换到最终版本,希望在您自己达到1.0之前。
第二,ZeroRPC当然不是唯一可用于Python或Node的RPC库。而且它们中的大多数都具有类似的接口,用于通过RPC公开方法。而且,虽然出于可伸缩性或部署的原因,您最终可能需要类似ZeroMQ的东西,但您可能可以使用一些更简单、更广泛的东西--RPC-它有十几个Python和Node实现--用于早期开发,然后稍后切换到ZeroRPC。
第三,RPC并不是很复杂,大多数库所做的将方法绑定到RPC并不是那么困难。使其异步可能很棘手,但对于早期开发,您只需使用一个简单但不可伸缩的解决方案--为每个请求创建一个线程--并在稍后切换到其他的解决方案。(当然,只有在服务处于无状态状态时,该解决方案才会很容易;否则,您只需要消除所有异步问题,并将它们替换为争用条件问题…)。
发布于 2014-09-16 23:54:41
ZeroMQ提供了几个传输类,而前两个类最适合于异构RPC层的情况。
ZeroMQ为这两个系统都提供了端口,因此肯定也能满足您的预期需求。
https://stackoverflow.com/questions/25880100
复制相似问题