【发布时间】:2012-12-16 19:35:42
【问题描述】:
来自http://www.erlang.org/doc/man/gen_tcp.html#accept-1:
值得注意的是,accept 调用不一定要发出 来自套接字所有者进程。使用 5.5.3 及更高版本的 模拟器,可以同时发出多个接受调用 不同的进程,这允许一个接受进程池 处理传入的连接。
(Q1)是不是意味着我们可以在Erlang中拥有Unicorn风格的负载均衡?
(Q2)如果有,是否有任何现有的服务器或库使用此功能?
(Q3) Unicorn 在请求处理快速的假设下工作。在同样的假设下,Erlang中结合acceptor和worker是否可以获得更好的性能?
对于不熟悉 Unicorn 的人来说,它是一个传统的 UNIX prefork web 服务器。工作进程之间的负载平衡由操作系统内核完成。所有工作人员共享一组通用的侦听器套接字,并对它们执行非阻塞的 accept()。内核将决定向哪个工作进程提供套接字,如果没有任何内容可以接受(),工作人员将进入睡眠状态。 对于单个侦听器套接字,我相信当工作进程阻塞 accept() 并且操作系统内核决定“竞争”的结果时也是一样的。
【问题讨论】:
标签: performance erlang load-balancing unicorn