Erlang远程过程调用模块内部

Erlang远程过程调用模块内部,erlang,rpc,Erlang,Rpc,我在节点A上有几个Erlang应用程序,它们正在对节点B进行rpc调用,我在节点B上有Mnesia存储过程(数据库查询函数)和Mnesia DB。现在,对节点B进行rpc调用以获取数据的并发进程的数量偶尔会增加到150个。现在,我有几个问题: 问题1:对于对远程节点的每个rpc调用,节点a是否会建立一个全新的连接(例如TCP/IP或UDP连接或在传输时使用的任何连接)?或者只有一个连接,而所有rpc调用都共享这个连接(因为节点A和节点B是连接的[与epmd进程有关]? 问题2:如果我在一个节点上

我在节点A上有几个Erlang应用程序,它们正在对节点B进行rpc调用,我在节点B上有Mnesia存储过程(数据库查询函数)和Mnesia DB。现在,对节点B进行rpc调用以获取数据的并发进程的数量偶尔会增加到150个。现在,我有几个问题:

问题1:对于对远程节点的每个rpc调用,节点a是否会建立一个全新的连接(例如TCP/IP或UDP连接或在传输时使用的任何连接)?或者只有一个连接,而所有rpc调用都共享这个连接(因为节点A和节点B是连接的[与epmd进程有关]?

问题2:如果我在一个节点上有以数据为中心的应用程序,而在另一个节点上有一个集中管理的Mnesia数据库,并且这些应用程序的表共享相同的模式,这些模式可以被复制、碎片化、索引e.t.c,哪个是更好的选择:使用rpc调用将数据从数据节点提取到应用程序节点,还是使用TCP/IP(就像人们为故障检测器所做的那样)开发一个全新的框架来解决网络延迟问题?

问题3:是否有人曾经以能够回答以下问题的方式测试或测试rpc调用效率?
(a) Erlang节点可以在不发生故障的情况下推送到另一个节点上的同时rpc调用的最大数量是多少?
(b) 有没有办法通过系统配置或操作系统设置来增加这个数字?(请参阅答案中的Open Solaris for x86)
(c) 除了rpc之外,应用程序是否还有其他方式从远程Erlang节点上运行的Mnesia请求数据?(比如CORBA、REST[需要HTTP端到端]、Megaco、SOAP e.t.c)

Mnesia运行在erlang分布上,在erlang分布中,任何一对节点之间只有一个tcp/ip连接(通常采用完全网状排列,因此每对节点都有一个连接)。所有rpc/节点间通信都将通过此分发连接进行

此外,还可以保证消息顺序在分布上的任何一对通信进程之间保持不变。未定义两个以上进程之间的排序


Mnesia为您提供了许多数据放置选项。如果您希望持久性存储在节点B上,但处理在节点A上完成,则可以在节点B上使用表的光盘拷贝,在节点A上使用ram拷贝。这样,节点A上的应用程序可以快速访问数据,并且在节点B上仍然可以获得持久性拷贝

我假设A和B之间的网络是一个可靠的LAN,很少进行分区(否则,在分区后,您将花费大量时间使mnesia重新联机)

如果A和B都在运行mnesia,那么我会让mnesia为我做所有的RPC——这就是mnesia构建的目的,它有很多优化。如果没有很好的理由,我不会推出自己的RPC或分发机制


至于基准测试,这完全取决于硬件、mnesia模式和节点之间的网络(以及应用程序的数据访问模式)。没有人可以给你这些基准,你必须自己运行它们


至于访问mnesia的其他RPC机制,我认为没有现成的,但是有许多RPC库,您可以使用它们向网络展示mnesia API,只需花费少量的精力。

您问了很多问题,但根本不接受任何答案。为什么?