【发布时间】:2011-07-17 09:29:46
【问题描述】:
我在节点 A 上有几个 Erlang 应用程序,他们正在对节点 B 进行 rpc 调用,在该节点 B 上我有 Mnesia 存储过程(数据库查询函数)和我的 Mnesia DB。现在,偶尔,同时向节点 B 调用数据的 rpc 进程的数量可能会上升到 150。现在,我有几个问题:
问题 1: 对于远程节点的每个 rpc 调用,节点 A 是否会建立一个全新的(比如 TCP/IP 或 UDP 连接或它们在传输中使用的任何连接)连接?或者只有一个连接并且所有 rpc 调用共享这个(因为节点 A 和节点 B 已连接 [与那个 epmd 进程有关])?
问题 2: 如果我在一个节点上有以数据为中心的应用程序,而我在另一个节点上有一个集中管理的 Mnesia 数据库,并且这些应用程序的表共享相同的架构,可以复制、分段、索引等,这是一个更好的选择:使用 rpc 调用以便从数据节点获取数据到应用程序节点,或者使用 TCP/IP 开发一个全新的框架(Scalaris 伙计们为他们的故障检测器所做的方式)来满足网络延迟问题?
问题 3: 有没有人曾经以可以回答以下问题的方式测试或标定 rpc 调用效率?
(a) 什么是一个 Erlang 节点可以在不中断的情况下推送到另一个节点的同时 rpc 调用的最大数量?
(b) 有没有办法通过系统配置或操作系统设置来增加这个数量? (请参阅您的答案中的 Open Solaris for x86)
(c) 除了 rpc 之外,还有其他方法可以从运行在远程 Erlang 节点上的 Mnesia 请求数据吗? (比如 CORBA、REST [需要 HTTP 端到端]、Megaco、SOAP 等)
【问题讨论】:
-
你问了很多问题,却根本不接受任何答案。为什么?