问题描述
是否可以将ZeroMQ用于AWS Batch上的作业与本地父流程之间的进程间通信?如果是这样,请问有一个简单的例子可以参考吗?我在查找有关此文档时遇到麻烦。
我希望提出clustermq
R软件包有朝一日能够支持AWS Batch后端:https://github.com/mschubert/clustermq/issues/208。 clustermq
已经可以在SLURM之类的传统作业调度程序上向工作人员发送R函数调用,并可以使用ZeroMQ与工作人员进行通信。
解决方法
Q :“是否可以使用ZeroMQ在AWS Batch上的作业与本地父流程之间进行进程间通信?”
ZeroMQ是一个可以使用的工具箱,因此唯一的问题将是由云所有者决定的策略(加上修饰因子瓶颈,因为这些瓶颈一直是与奇点相关的新型问题,如果有人将其作为SPoF要...)
ZeroMQ本身就没有分布式计算的问题。
一个PoC示例
我们可以在所有远程节点上实例化此代码,并让它们与您的本地主机运行并进行通信,请确保是否不受云所有者的一组策略的阻止,并且是否可以让接收方在由云引发的海啸中幸存下来; o)
设置了连通性,以便远程发送者代码“知道”本地主机的公共IP地址或类似动机的SSH隧道元平面,该SSH平面通过SSH端口转发隧道协调互连,从而允许所有云远程发件人(如果没有被云所有者阻止...)实际上到达了本地主机私有IP地址,就像它们在同一私有LAN网段中一样。
(为方便交叉移植而提供的Python代码)
本地主机接收器模型示例:
import zmq; nIOthreads = 4 ### traffic dependent,given an expected ingress Tsunami
aCtx = zmq.Context( nIOthreads )
aSub = aCtx.socket( zmq.XSUB )
aSub.bind( "tcp://<_aPublicIpADDRESS_or_SSL_tunnelled_privateIpADDRESS_>:<_port#_>" )
aSub.setsockopt( zmq.LINGER,0 )
aSub.setsockopt( zmq.CONFLATE,0 )
aSub.setsockopt( zmq.SUBSCRIBE,"" )
...
while True:
try:
ret = aSub.recv( zmq.NOBLOCK )
if ret:
print( "GOT: {0:}".format( repr( ret ) ) )
except:
print( "EXC: will terminate" )
break
finally:
aSub.close()
aCtx.term()
print( "FIN: did terminate and process will sysexit." )
云远程发件人模型示例:
import socket
import zmq; nIOthreads = 1 ### beware of the grooming-factor effects on traffic
aCtx = zmq.Context( nIOthreads )
aPub = aCtx.socket( zmq.XPUB )
aPub.connect( "tcp://<_aPublicIpADDRESS_or_SSL_tunnel_to_privateIpADDRESS_>:<_port#_>" )
aPub.setsockopt( zmq.LINGER,0 )
aPub.setsockopt( zmq.CONFLATE,0 )
...
aCloudHostMsgN = 1
aCloudHostNAME = socket.gethostname()
aCloudHostIP = socket.gethostbyname( aCloudHostNAME )
aMsgMASK = ( "msg[{0:_>9d}]"
+ "_from_{0:_>20s}_ip_{1:_>20s}".format( aCloudHotsNAME,aCloudHostIP
)
)
while True:
try:
aPub.send( aMsgMASK.format( aCloudHostMsgN ) )
pass; aCloudHostMsgN++
except:
print( "EXC: will terminate" )
break
finally:
aPub.close()
aCtx.term()
print( "FIN: did terminate and process will sysexit." )