Von Ссылка :
Es ist erwähnenswert, dass der Annahmeruf nicht ausgegeben werden muss aus dem Socket-Besitzer-Prozess. Mit Version 5.5.3 und höher von Emulator, können mehrere gleichzeitige Annahme von Anrufen ausgegeben werden verschiedene Prozesse, die einen Pool von Akzeptorprozessen ermöglichen eingehende Verbindungen behandeln.
(Q1) Bedeutet das, dass wir Einhorn -Stillenausgleich in Erlang haben können?
(Q2) Falls ja, gibt es bereits vorhandene Server oder Bibliotheken, die diese Funktion nutzen?
(Q3) Unicorn arbeitet unter der Annahme, dass die Anfrageverarbeitung schnell ist. Unter derselben Annahme ist es möglich, eine bessere Leistung durch die Kombination von Akzeptoren und Arbeitern in Erlang zu erreichen?
Für diejenigen, die mit Unicorn nicht vertraut sind, handelt es sich um einen herkömmlichen UNIX-Prefork-Webserver. Der Lastausgleich zwischen Worker-Prozessen erfolgt durch den Betriebssystemkernel. Alle Mitarbeiter teilen sich einen gemeinsamen Satz von Listener-Sockets und akzeptieren sie nicht (). Der Kernel entscheidet, welcher Worker-Prozess einem Socket zugewiesen wird, und Worker schlafen, wenn nichts akzeptiert wird (). Für einen einzelnen Listener-Socket glaube ich, dass es genauso ist, wenn die Worker-Prozesse accept () blockieren und der OS-Kernel das Ergebnis des "Rennens" entscheidet.
Ich habe diese Frage auch in der Erlang-Fragen-Mailingliste gepostet. Wie von Daniel Goertzen Es gibt Acceptor-Pool-Bibliotheken in Erlang, z. B. Ranch und Schwarm .
ranch funktioniert anders als Unicorn so, dass es nur in vielen Prozessen "akzeptiert" und dann den Socket an einen Arbeitsprozess weiterleitet.
Die Art, wie Schwarm funktioniert, ist die gleiche wie Unicorn in dem Sinne, dass der Akzeptor und der Arbeiter werden kombiniert. (Danke an Loïc Hoguin für Hinweise) Aber sie sind ein bisschen anders, weil Schwarm eine neue Steckdose akzeptieren kann parallel zur Verarbeitung der akzeptierten Socket, während Unicorn akzeptiert nur, nachdem der akzeptierte Socket verarbeitet wurde
Ich bevorzuge den Schwarmstil, da er sowohl für schnelle als auch für langsame Bewegungen ideal ist Anfragen, während Unicorn schnelle Anfragen benötigt.
Anstatt zu versuchen, langsame Clients, Einhorn, effizient zu bedienen setzt auf einen Pufferreverse-Proxy, um effizient mit langsamen umzugehen Kunden.
Einhorn ist nicht für alle Anwendungen geeignet. Einhorn ist optimiert für Anwendungen, die CPU / Speicher / Festplatte intensiv sind und wenig Zeit verbrauchen Warten auf externe Ressourcen (z. B. ein Datenbankserver oder extern API).
Einhorn ist sehr ineffizient für Comet / Reverse-HTTP / Push-Anwendungen wo die HTTP-Verbindung viel Zeit im Leerlauf verbringt.
Tags und Links performance unicorn erlang load-balancing