2013-05-30 14 views

Antwort

7

Es gibt momentan kein Limit für den Prozessspeicher - es wird in der Mailingliste usw. besprochen. Sie können sich diese Threads ansehen.

Auf der Oberseite, wenn Sie OTP-Muster-Implementierung wie gen_server verwenden, haben Sie eine Menge Freiheit beim Abrufen von Nachrichten aus der Prozesswarteschlange und Messen der Länge der Warteschlange.

gen_server2 verwendet in rabbitmq verwendet, um das zu optimieren, indem Nachrichten an interne Datenstruktur verschoben werden. Damit können Sie jede neue eingehende Nachricht verwerfen, wenn die interne Warteschlange zu lang ist. Sie können dies im Hintergrund tun oder den Absender benachrichtigen, dass die Nachricht zurückgewiesen wurde.

All dies ist auf sehr niedrigem Niveau.

RabbitMQ wird diese Funktionalität auf AMQP-Ebene bereitstellen.

+0

gen_server2 sieht gut aus –

+0

Wird gen_server2 Windowing implementiert? –

+0

Ich bin nicht sicher, was der aktuelle Status der gen_server2-Implementierung ist. Nach der Einführung des nichtlinearen Abgleichs von Nachrichten in Nachrichtenwarteschlangen in OTP gen_server könnte es mit der Hauptdatei zusammengeführt werden. – user425720

6

Eine gängige und recht gute Methode zum Erzwingen der Ablaufsteuerung besteht darin, ausgewählte Nachrichten zu Aufrufen zu machen, die die Belastung jedes Clients auf einen Server beschränken und so auf sehr einfache Art und Weise einen Force-Feedback bereitstellen. Der Trick ist natürlich zu wählen, welche Kommunikation synchrone Anrufe verwendet :-)

+0

Das wäre auch meine Lösung. Grundlegend etwas Flusskontrolle auf der Linie einbauen. Auch hierfür gibt es fortschrittlichere Lösungen. –

+1

Ich bin mir nicht sicher, ob ich das verstehe. Sie schlagen Synchronisierungsanrufe über Async vor, die gewährleisten, dass Nachrichten auf der Client-Seite in die Warteschlange gestellt werden? Ich denke, es hängt vom Anwendungsfall ab. Wenn der Kunde vorübergehend ist, können wir uns diese Lösung nicht leisten. – user425720

+0

Der Kern des Problems ist, dass Sie am Ende irgendeine Form der Synchronisation haben, um irgendeine Form der Flusskontrolle zu haben. Wenn der Kunde, der den Fluss bereitstellt, einfach per Nachrichtenweiterleitung fährt, können wir ihn in keiner Weise einschränken. Die Antwort darauf besteht häufig darin, die Anzahl der Clients an erster Stelle zu begrenzen, aber das erfordert eine Art zentralisiertes Wissen über die Anzahl der Clients, die eine Synchronisation erfordern. Am Ende läuft es darauf hinaus, wo wir synchronisieren. Eine gängige Lösung in Telcom-Apps wird zu einfach an die Schnittstellen abgegeben, muss aber wissen, wann sie verschüttet werden muss :-) –