Akzeptor Pooling und Load Balancing in Erlang?

8

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.

    
Xiao Jia 02.01.2013, 12:24
quelle

1 Antwort

4

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.

    
Xiao Jia 03.01.2013, 04:06
quelle