Wie funktioniert CCR & DSS Toolkit Modell auf andere Skalierbarkeit & concurency Ansätze vergleichen?

StackOverflow https://stackoverflow.com/questions/815959

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin interessiert Vergleich zwischen verschiedenen Ansätzen zur Skalierbarkeit und Parallelität einschließlich CCR & DSS Rahmenmodell. Ich wäre besonders daran interessiert, mit Vergleich mit Hadoop und Erlang Stil concurency

War es hilfreich?

Lösung

Ich habe bei CCR, DSS und Erlang sah, obwohl dieser, ich nur CCR in signifikanten Produktionscode versendet haben. Ich habe noch nie auf Hadoop sah.

Erlang Gleichzeitigkeit leitet sich von seiner Umsetzung des Actor-Modell. Jeder ‚Prozess‘ hat eine Mailbox abruft und Nachrichten von ihm, einen nach dem anderen. Ein Verfahren ohne Nachrichten Blöcke kein Gewinde zu handhaben. Im Gegensatz dazu, Prozesse mit der Arbeit auf dem verfügbaren CPU mit keinem der zugrunde liegenden Maschinen sind geplant, zu tun ausgesetzt. Darüber hinaus kommunizieren Prozesse über entweder mit Klonen / Unveränderlichkeit Message-Passing sicherzustellen, dass P1 und P2 nie logisch die Nachrichten teilen, die zwischen ihnen bestehen.

Mein Gefühl ist, dass es das ist nicht blockierende Natur der Nachricht das Senden und Empfangen, dass Erlang für Skalierbarkeit auf einem einzigen (möglicherweise Multi-Core) Maschine seinen Ruf verleiht. Im Wesentlichen Prozessen mit Arbeit effizient geplant tun über die zur Verfügung stehenden Ressourcen und Ruhe Prozesse nichts anderes als Speicher verbrauchen. Durch die Verarbeitung einer Nachricht zu einer Zeit, jede Gewährleistung Nachricht Stabilität der Entwickler muss nicht mehr über Dinge wie ‚Rasse-Bedingungen‘ sorgen.

CCR ist eine Reihe von Low-Level-asynchroner Message-Passing-Primitiven. Eine der einfacheren ist erhalten, dass ein A-la-Erlang erhält. Aber es gibt anspruchsvollere Primitiven, wie Join (eine Meldung erhalten alle einiger Kanäle) und Wahl (eine Nachricht von jeder einiger Kanäle empfangen), die verschachtelt werden können, und auf interessante Weise zusammengesetzt. Diese Konstrukte sind auch nicht blockierend. Empfänger erzeugen Aufgaben (um die Nachrichten zu verarbeiten) in 1..n Task-Warteschlangen, die von einer kleinen Anzahl von Threads bedient werden.

Meine Vermutung ist, dass, ignorieren (wichtig!) Plattform Unterschiede, sind die grundlegenden Aufgaben-Scheduling-Routinen von jeweils grundsätzlich in der gleichen Ball-Park. Allerdings ist Erlang eine Sprache und eine Plattform mit einem festen (Schauspieler) Modell eingebrannt. Die CCR keines dieser Dinge ist, es ist nur eine Bibliothek und Sie können / missbrauchen mehr frei.

DSS ist ein Programmiermodell, das auf CCR baut. Es verfügt über Dienstleistungen (Erlang = Prozesse), es beauftragt asynchrone Message Passing (mit vollständigen Klonen von Standard) als die einzige Form von Inter-Service-Kommunikation und der Griff nur die Außenwelt muss einen Dienst seine URI (Erlang = PID) ist . Wie Erlang, gibt es im wesentlichen kein Unterschied zwischen einem lokalen Service und Fern einem Aufruf, obwohl (de) Serialisierung im letzteren Fall auftritt.

DSS hat auch ein RESTful-Modell, was bedeutet, dass Dienste typischerweise einen festen und gemeinsamen Satz von Operationen aussetzen, und dass der Zustand des Service soll durch diese Operationen manipulierte eine Ressource betrachtet werden. Vergleichen Sie dies mit Erlang, wo beliebige Nachrichten an einen Prozess geschickt werden. DSS Dienstleistungen den vollen Satz von CCR Primitiven in Gesprächen mit anderen Diensten verwenden können, die für Dinge wie sehr nützlich sein kann, verteilte Operationen Scatter-Gather.

Letztlich DSS ist nur ein Rahmen mit Bibliotheken unterstützt, nicht eine Sprache oder VM, so gibt es wesentlich mehr ‚Zeremonie‘ beteiligt, schriftlich, auch nur einen DSS-Dienst als das Schreiben eines Erlang Prozess entgegen.

Im Hinblick auf die Gleichzeitigkeit, bieten alle Grundelemente erforderlich, Code zu schreiben, die sicher und effizient unter mehreren Ausführungs-Threads ist, ohne sich Gedanken über diese Ausführungs-Threads. Ich denke, das ist, wo die meisten Entwickler Überschrift werden sollen.

In Bezug auf Skalierbarkeit, das ist ein schwieriger zu beantworten als dass so viel über Systemdesign ist, als es die Werkzeuge verwendet wird. Haben Sie Skalierbarkeit auf einem einzelnen Knoten bedeuten, das heißt, wie Sie Kerne hinzufügen oder wie Sie Knoten hinzufügen? CCR hat nichts über die letztere zu sagen. Beide DSS und Erlang Unterstützung ziemlich effizient Binärformaten für Draht-Übertragung. DSS erbt seine ressourcenorientierte Sicht auf die Welt direkt von http, die Sie sollten über ihre etwas sagen Potenzial Skalierbarkeit, aber es tut dies bei einigen Einschränkungen im Programmming-Modell.

Ein paar technische Punkte. Ein einzelner DSS-Dienst verbraucht mehr Speicher (~ 2K) als ein einzelner erlang Prozess (300-400 Bytes). Auch jeder DSS Service erhält eine eigene Task-Queue und es gibt eine Obergrenze (~ 10000) auf der Anzahl der Task-Warteschlangen, die effizient durch die CCR verarbeitet werden kann. Ich habe keine Zahlen auf solche Obergrenzen für Erlang aber vermuten, es könnte als diese höher sein.

Having said all dies, wenn Sie auf der .NET-Plattform sind würden Sie sich selbst einen Gefallen durch einen ernsten Blick nehmen an der CCR tun. Ich habe festgestellt, es ist sehr mächtig zu sein, vor allem für reaktive ereignisgesteuerte Programme.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top