Ich würde gerne die Fähigkeiten von grpc mit denen von zeromq und seinen Mustern vergleichen. Und ich würde gerne einen Vergleich erstellen (Funktionsumfang) - irgendwie - 0mq sind "bessere" Sockets - aber auf jeden Fall - wenn ich 0mq-Muster anwende - I bekomme vergleichbare 'frameworks' denke ich - und hier scheint 0mq viel flexibler zu sein ...
Die Hauptanforderungen sind:
irgendwelche Ideen?
vielen Dank!
Beide Bibliotheken ermöglichen eine synchrone oder asynchrone Kommunikation, je nachdem, wie die Kommunikation implementiert werden soll. Siehe diese Seite für gRPC: http://www.grpc.io/docs/guides/concepts.html . Grundsätzlich ermöglicht gRPC eine typische HTTP-synchrone Anforderung/Antwort oder ein bidirektionales "websocket-ähnliches" Streaming. Für 0mq können Sie eine einfache REQ-REP-Verbindung einrichten, die im Grunde genommen ein synchroner Kommunikationspfad ist, oder Sie können asynchrone ROUTER-DEALER-Typologien erstellen.
"Routing" bedeutet im Wesentlichen, dass eine Nachricht über einen Broker von A nach B gelangt. Dies geschieht in 0mq trivial und es gibt eine Reihe von Typologien, die solche Dinge unterstützen ( http://zguide.zeromq.org/page:all#Basic-Reliable-Queuing-Simple-Pirate-Pattern =). In gRPC könnte dieselbe Art von Typologie mit einer "Pub-Sub" -ähnlichen Verbindung über einen Stream erstellt werden. gRPC unterstützt das Einfügen von Metadaten in die Nachricht ( https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md ), sodass Sie a Nachricht in eine Warteschlange, aus der eine "Pub-Sub" -Verbindung gezogen werden kann.
gRPC unterstützt Integritätsprüfungen ( https://github.com/grpc/grpc/blob/master/doc/health-checking.md ), da es sich jedoch um HTTP/2 handelt, muss dies geschehen einen HTTP/2-Lastenausgleich zur Unterstützung der Integritätsprüfung. Dies ist jedoch keine große Sache, da Sie die Integritätsprüfung an einen HTTP/1.1-Dienst binden können, den der Load Balancer aufruft. 0mq ist eine TCP-Verbindung, was bedeutet, dass ein Load Balancer wahrscheinlich eine "Socket-Verbindung" in tcpmode überprüft, um die Verbindung zu überprüfen. Das funktioniert aber es ist nicht so schön. Auch hier kann der 0mq-Dienst mit einem HTTP/1.1-Webserver, von dem der Load Balancer liest, problemlos ausgeführt werden.
beide sind gut dokumentiert. Die Dokumentation von 0mq muss gelesen werden, um die Technologie vollständig zu verstehen.
Hier sind die großen Unterschiede:
Nicht ganz das Gleiche. gRPC dient in erster Linie der heterogenen Interoperabilität von Diensten. ZeroMQ (ZMQ/0MQ/ØMQ) ist ein Messaging-Framework auf niedrigerer Ebene. ØMQ gibt die Payload-Serialisierung nicht über die Übergabe von Binärblobs hinaus an, während gRPC standardmäßig Protokollpuffer auswählt. ØMQ ist so ziemlich auf dem gleichen Computer oder den gleichen Computern zwischen Rechenzentren/Clouds fixiert, während gRPC möglicherweise auch auf einem echten Client funktioniert (dh mobil oder im Web, es unterstützt bereits iOS). gRPC mit ØMQ könnte für In-Cloud-/Datacenter-Services erheblich schneller und effizienter sein als der Overhead, die Latenz und die Komplexität der HTTP2-Anforderungs-/Antwortkette. Ich bin mir nicht sicher, wie (oder sogar ob) gRPC TLS-Sicherheit für die Nutzung in öffentlichen Clouds und auf Mobilgeräten/im Internet geeignet ist Router-/Controller-Ebene des App-/App-Frameworks und Ausführung im Nur-Text-Modus (wodurch auch OpenSSL Fork BoringSSL von Wartungsproblemen aufgrund von Upstream-Fehlern befreit wird).
Bei Diensten mit sehr hoher Latenz/geringer Bandbreite (z. B. Mission to Mars) würde man sich überlegen, ob RPC einen Transport wie SMTP (z. B. Active Directory Alternate Replication) oder MQTT (z. B. Facebook Messenger, ZigBee, SCADA) verwendet.
Bonus (Off-Topic): Es wäre schön, wenn gRPC alternative steckbare Transporte wie ØMQ (das auch selbst UNIX-Sockets, TCP, PGM und Inproc unterstützt) hätte, da HTTP/2 noch nicht in allen Sprachen stabil ist und langsamer als ØMQ. Ein Blick auf nanomsg (insbesondere in der HFT-Welt) lohnt sich, da es mit RDMA/SDP/MPI erweitert und für verrückte Anwendungen mit geringer Latenz/ohne Kopien/Infiniband-fähig gemacht werden kann.