{ProcessName,NodeName}!消息与rpc:跨Erlang节点调用/4与HTTP/1.1

{ProcessName,NodeName}!消息与rpc:跨Erlang节点调用/4与HTTP/1.1,http,unix,erlang,chat,messaging,Http,Unix,Erlang,Chat,Messaging,我有一个设置,其中两个节点将进行大量通信。在节点A上,将有数千个进程,用于访问节点B上的服务。这两个节点上将有大量的请求和响应。这两个节点将运行在两个不同的服务器上,每个服务器都有自己的硬件服务器。 我有3个选项:HTTP/1.1、rpc:call/4和直接向节点B上注册的gen_服务器发送消息。让我解释每个选项。 HTTP/1.1假设在节点A上,我有一个类似于Ibrowse的HTTP客户端,在节点B上,我有一个类似于Yaws-1.95的web服务器,web服务器能够处理无限连接,操作系统设置经

我有一个设置,其中两个节点将进行大量通信。在节点A上,将有数千个进程,用于访问节点B上的服务。这两个节点上将有大量的请求和响应。这两个节点将运行在两个不同的服务器上,每个服务器都有自己的硬件服务器。

我有3个选项:HTTP/1.1、rpc:call/4和直接向节点B上注册的gen_服务器发送消息。让我解释每个选项。

HTTP/1.1

假设在节点A上,我有一个类似于
Ibrowse
的HTTP客户端,在节点B上,我有一个类似于
Yaws-1.95
的web服务器,web服务器能够处理无限连接,操作系统设置经过调整,允许Yaws处理所有连接。然后让节点A上的进程使用HTTP进行通信。在本例中,每个方法调用都意味着一个HTTP请求和一个应答。我相信这里有一个开销,但我们正在评估选择。称为
webtool
的erlang内置机制可以用于这种目的。

rpc:call/4

我可以直接从节点A向节点B进行rpc调用。我不太了解底层rpc机制的工作原理,但我认为当两个erlang节点通过
net\u adm:ping/1
连接时,创建的连接不会关闭,但所有rpc调用都使用此管道传输请求和传递响应。请纠正我的错误。

将消息从节点a发送到节点B

我可以使节点a上的进程只向已注册的进程或节点B上的一组进程发送消息。这似乎也是一个干净的选项。


问题1。对于两个erlang节点之间将一直有大量通信的应用程序,您建议使用上述哪种选项?为什么。设想一个消息传递系统,其中两个erlang节点是路由器:)?

Q2。以上哪种方法更干净、问题更少、容错性更强(我的意思是,该方法不应该有单点故障,这可能导致节点上的所有进程都是盲的)

第三季度。您选择的机制:如何使其更具容错性或冗余性

假设:节点始终处于活动状态且永不停机,节点之间的网络连接始终可用且无拥塞(仅适用于两个节点),操作系统已为这两个节点分配了最大的资源。

感谢您的评估。Q1:HTTP将增加额外的开销,我认为不会给您任何帮助。如果您正在设计RESTAPI,HTTP将非常有用。就开销而言,直接发送消息和rpc:call看起来大致相同

问题2:发送消息要清晰得多。这就是erlang的设计方式。对于RPC调用,您必须始终跟踪在何处以及在何种情况下执行哪个调用,如果两个服务器具有状态,这可能是一个很大的问题。RPC调用也是同步的


问题3:如果我能负担较小的开销,我会使用UBF,否则我会在erlang节点之间直接发送消息。如果带宽是一个问题,那么还需要其他技巧。就像用同样的方式对消息进行编码,然后使用一些压缩算法来减小消息的大小一样,或者我可以完全放弃传递的erlang消息,使用UDP套接字。

Q1:HTTP将增加额外的开销,在我看来不会给您带来任何好处。如果您正在设计RESTAPI,HTTP将非常有用。就开销而言,直接发送消息和rpc:call看起来大致相同

问题2:发送消息要清晰得多。这就是erlang的设计方式。对于RPC调用,您必须始终跟踪在何处以及在何种情况下执行哪个调用,如果两个服务器具有状态,这可能是一个很大的问题。RPC调用也是同步的


问题3:如果我能负担较小的开销,我会使用UBF,否则我会在erlang节点之间直接发送消息。如果带宽是一个问题,那么还需要其他技巧。就像用同样的方式对消息进行编码,然后使用一些压缩算法来减小消息的大小一样,或者我可以完全放弃传递的erlang消息,使用UDP套接字。

HTTP肯定已经过时了。只是创建新连接的往返开销是一个问题

对于Erlang连接和使用Pids,您的优势是可以订阅节点关闭消息并处理节点关闭的情况。单个TCP连接应该能够提供非常快的速度,但是,请注意,它的工作原理类似于一个长管道:消息在管道上进行多路复用和解复用,这可能会影响线路的延迟。这也意味着大消息将阻止小消息通过


您的目标带宽是多少,延迟是多少?回复信息的第95百分位和第99百分位是什么?最好先列出一些粗略的数字,然后再针对这些数字,而不仅仅是“尽可能快”。首先设定你的成功标准。

HTTP肯定是过时的。只是创建新连接的往返开销是一个问题

对于Erlang连接和使用Pids,您的优势是可以订阅节点关闭消息并处理节点关闭的情况。单个TCP连接应该能够提供非常快的速度,但是,请注意,它的工作原理类似于一个长管道:消息在管道上进行多路复用和解复用,这可能会影响线路的延迟。这也意味着大消息将阻止小消息通过

您的目标带宽是多少,延迟是多少?回复信息的第95百分位和第99百分位是什么?最好先列出一些粗略的数字,然后试着瞄准目标