Gibt es einen Leistungsunterschied zwischen pooling-verbindungen oder Kanäle in rabbitmq?
Ich bin ein Neuling mit dem Rabbitmq - (und Programmier -) also sorry im Voraus, wenn diese offensichtlich ist. Ich Schaffe einen pool teilen zwischen threads, die auf eine Warteschlange, aber ich bin mir nicht sicher, ob ich es verwenden soll, verbindungen oder Kanäle in den pool.
Ich weiß, ich muss TV tun, die eigentliche Arbeit aber gibt es einen performance-Vorteil, dass ein Kanal pro Verbindung(im Hinblick auf mehr Durchsatz aus der Warteschlange)? oder bin ich besser dran, nur mit einer einzigen Verbindung pro Anwendung und pool viele Kanäle?
Hinweis: da ich bin die Bündelung der Ressourcen, die die anfänglichen Kosten nicht ein Faktor ist, wie ich weiß-verbindungen teurer sind als Kanäle. Ich bin mehr daran interessiert, den Durchsatz.
InformationsquelleAutor der Frage Lostsoul | 2012-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe festgestellt, dass dies auf die rabbitmq website es ist in der Nähe der Unterseite, so ich zitiert habe, den entsprechenden Teil unten.
Den tl;dr-version ist, dass Sie sollte haben 1 Verbindung pro Anwendung und 1-Kanal-pro-thread. Hoffe, das hilft.
Ist es ratsam, dass 1-Kanal-pro-thread, auch wenn Sie thread-sicher, so könnte man mehrere threads senden über einen Kanal. In Bezug auf deine Anwendung würde ich vorschlagen, dass Sie stick mit 1-Kanal-pro-thread, obwohl.
Zusätzlich ist es ratsam, nur 1 Verbraucher pro Kanal.
Diese sind nur Richtlinien, so dass Sie wird zu tun haben, einige Tests, um zu sehen, was funktioniert am besten für Sie.
In diesem thread gibt es einige Einblicke hier und hier.
Trotz all dieser Richtlinien dieser Beitrag deutet darauf hin, dass es wahrscheinlich nicht auf die Leistung auswirken, indem mehrere verbindungen. Obwohl es nicht spezifisch ist, ob es redet von client-Seite oder server(rabbitmq) Seite. Mit dem einen Punkt, dass es natürlich mehrere Systeme die Ressourcen mit mehr verbindungen. Ist dies nicht ein problem, und Sie wollen mehr Durchsatz, es kann tatsächlich besser sein, mehrere verbindungen als dieser Beitrag schlägt mehrere verbindungen, mit denen Sie mehr Durchsatz. Der Grund scheint zu sein, dass, selbst wenn es mehrere Kanäle, nur eine Nachricht geht durch die Verbindung zu einer Zeit. Daher ist eine große Nachricht blockiert die ganze Verbindung oder viele unwichtige Nachrichten auf einem Kanal blockieren kann eine wichtige Botschaft über die gleiche Verbindung, aber einen anderen Kanal. Wieder Ressourcen sind ein Problem. Wenn Sie alle die Bandbreite einer Verbindung und dann das hinzufügen einer zusätzlichen Verbindung wird keine Erhöhung der Leistung, die über die zwei Kanäle an einem Anschluss. Auch jede Verbindung verwenden, mehr Arbeitsspeicher, cpu-und filehandles, aber das kann auch nicht sein Anliegen aber möglicherweise ein Problem bei der Skalierung.
InformationsquelleAutor der Antwort robthewolf
Zusätzlich zu den akzeptierten Antworten:
Wenn Sie einen cluster von RabbitMQ Knoten mit entweder ein load-balancer vor, oder eine kurzlebige DNS (und es möglich machen, eine Verbindung zu einem anderen Kaninchen Knoten jedes mal), dann eine einzige, langlebige Verbindung würde bedeuten, dass eine Knoten-Anwendung funktioniert ausschließlich mit einem einzigen RabbitMQ Knoten. Dies kann dazu führen, dass ein RabbitMQ-Knoten wird mehr ausgelastet als die anderen.
Das andere Problem, das oben erwähnt ist, dass das veröffentlichen und nutzen sind blockierende Operationen, die dazu führt, Warteschlangen-Nachrichten. Mit mehr verbindungen sicherzustellen, dass 1. Bearbeitungszeit für die einzelnen Nachrichten nicht zu blockieren andere Nachrichten 2. große Nachrichten werden nicht blockiert andere Nachrichten.
Deshalb ist es eine überlegung Wert, mit einer kleinen Verbindung pool (im Hinblick auf die Ressource Bedenken oben)
InformationsquelleAutor der Antwort Bozho
"Ein Kanal pro thread" könnte eine sichere Annahme, (ich sage könnte, da ich keine Forschung von mir und ich habe keinen Grund zu bezweifeln die Dokumentation 🙂 ) aber Vorsicht, es ist ein Fall, wo diese Pausen:
Wenn Sie Sie RPC mit RabbitMQ Direkte Antwort andann können Sie nicht wiederverwenden, die gleichen Kanal zu verbrauchen für anderen RPC-Anfrage. Ich fragte nach details, die in der google-Nutzer-Gruppe und die Antwort, die ich bekam von Michael Klishin (die scheint zu sein, aktiv in RabbitMQ Entwicklung) war, dass
Habe ich E-Mail-Zentrale, um die Aktualisierung Ihrer Dokumentation zu erklären wie
amq.rabbitmq.reply-to
arbeitet unter der Haube und ich warte immer noch auf eine Antwort (oder ein update).Wenn Sie So wollen, zu bleiben, um "ein Kanal pro-thread" passen, da dies nicht gut mit der Direkten Antwort an.
InformationsquelleAutor der Antwort Stelios Adamantidis