题
是否有人知道,如果有一种用Erlang标准库“负载均衡器”的?我的意思是,如果我有一个非常大的数据集的一些非常简单的操作,构建过程的每个项目的开销会比执行操作顺序越大。但如果我能平衡过程中的“权数”的工作,它会表现得更好,所以我基本上询问是否有完成这个任务的简单方法。
顺便说一句,做任何人知道,如果一个OTP应用做了一些一种平衡负载的?我的意思是,在OTP应用程序有一个“工作进程”(如一个java肥胖型螺纹工人)的概念?
解决方案
在 plists
模块可能是你想要做什么。它基本上是一个并行执行lists
模块,设计用作一个简易替换。不过,您也可以控制如何并行化的操作,例如通过定义工人多少进程应催生等等。
您可能会通过计算取决于列表的长度或系统的负载一定数目的工人做等等。
从网站:
的Plist是一个简易替换为 Erlang的模块列表,使得最 列表操作平行。它可以 并联的每个元素进行操作, 为IO绑定操作,在子列表 并联,用于利用的 多核机器与CPU结合的 操作和跨Erlang节点, 为群集内parallizing。它 处理错误和节点故障。它 可以被配置,调谐和调整 以获得最佳性能的同时, 最小化开销。
其他提示
请参阅模块pg2
和pool
。
pg2
实现相当简单分散处理池。 pg2:get_closest_pid/1
返回“最近的” PID,即随机本地进程如果可用,否则随机远程进程。
pool
实现节点之间的负载平衡开始与模块slave
。
有是否定的,我认为,在有用OTP通用负载平衡的工具。也许它只是有用有一个在特定情况下。这是很容易的实现一个自己。的Plist可以在同一情况下非常有用。我不相信在并行库作为替代真实的东西。如果你走这条路阿姆达尔会困扰着你直到永远。
工作进程的权数等于调度的数量。这可能取决于什么其他工作在系统上做了改变。使用,
erlang:system_info(schedulers_online) -> NS
以获得调度的数量。
与丰富的工作进程充斥系统时的开销的概念是有些故障。有开销新工艺,但不如用OS线程。主要开销是进程之间的消息拷贝,这可以用,因为只有参考二进制被发送利用二进制文件来减轻。与eterms结构被第一扩再复制到其它过程。
有没有办法如何预测工作的成本没有机械地测量它e.g做到这一点。有些人必须确定如何对一些类任务的划分工作。在负载均衡的话,我懂的东西比你的问题非常不同的。