Performance Erlang中的接受者池和负载平衡?
发件人: 值得注意的是,不必发出接受调用 从套接字所有者进程。使用5.5.3及更高版本的 emulator,可以从发出多个同时接受调用 不同的进程,允许接受进程池 处理传入连接 (Q1)这是否意味着我们可以在Erlang中实现类似的负载平衡 (第二季度)如果是,是否有任何现有服务器或库使用此功能 (第三季度)独角兽的工作假设是请求处理速度很快。在相同的假设下,在Erlang中结合受体和工作者是否可能获得更好的性能Performance Erlang中的接受者池和负载平衡?,performance,erlang,load-balancing,unicorn,Performance,Erlang,Load Balancing,Unicorn,发件人: 值得注意的是,不必发出接受调用 从套接字所有者进程。使用5.5.3及更高版本的 emulator,可以从发出多个同时接受调用 不同的进程,允许接受进程池 处理传入连接 (Q1)这是否意味着我们可以在Erlang中实现类似的负载平衡 (第二季度)如果是,是否有任何现有服务器或库使用此功能 (第三季度)独角兽的工作假设是请求处理速度很快。在相同的假设下,在Erlang中结合受体和工作者是否可能获得更好的性能 对于那些不熟悉Unicorn的人来说,它是一个传统的UNIX预工作web服务器。工
对于那些不熟悉Unicorn的人来说,它是一个传统的UNIX预工作web服务器。工作进程之间的负载平衡由操作系统内核完成。所有工作进程共享一组公用的侦听器套接字,并对它们执行非阻塞accept()。内核将决定向哪个工作进程提供套接字,如果没有可接受的内容,则工作进程将休眠()。对于单个侦听器套接字,我相信当工作进程执行blocking accept()并且操作系统内核决定“竞赛”的结果时,情况也是一样的。我还在Erlang问题邮件列表中发布了这个问题。 正如Daniel Goertzen所指出的, Erlang中有接受程序池库,如和
- ranch的工作方式与Unicorn不同,它只在许多进程中“接受”,然后将套接字传递给某个工作进程
- swarm的工作方式与独角兽相同,即 接受方和工作方是组合的。(感谢Loïc Hoguin指出) 但它们有点不同,因为swarm可以接受一个新的套接字 并行处理接受的套接字,而Unicorn 仅在处理接受的套接字后接受
有人猜测,牧场法和群法在实践中同样适用。举个例子:牛仔使用牧场,而且牛仔的速度非常快。@igivecraps的答案也同意。顺便说一句,有关于牛仔等的最新基准吗?我不知道。我猜你需要衡量一下自己的工作量。就我的工作量而言,问题出现在链中的其他地方,远远早于cowboy将其作为一个稍微有点瓶颈的入口。@IGIVECRAPANSWERS谢谢您的回复:-)