Remote -Verfahrensanruf
Im verteiltes Computer, a Remote -Verfahrensanruf (RPC) ist, wenn ein Computerprogramm ein Verfahren verursacht (Subroutine) in einem anderen ausführen Adressraum (Normalerweise auf einem anderen Computer in einem gemeinsam genutzten Netzwerk), das so codiert wird, als wäre es ein normaler (lokaler) Verfahrensaufruf, ohne dass der Programmierer die Details für die Remote -Interaktion ausdrücklich codiert. Das heißt, der Programmierer schreibt im Wesentlichen den gleichen Code, ob die Unterprogramme lokal für das ausführende Programm oder Remote ist. Dies ist eine Form der Client-Server-Interaktion (Anrufer ist Client, Executor Is Server), der normalerweise über ein Anforderungs-Response-Nachrichten-Passing-System implementiert wird. Im objektorientierten Programmierparadigma werden RPCs durch dargestellt Fernmethodenaufruf (RMI). Das RPC -Modell impliziert eine Ebene von Standorttransparenz, nämlich dass Anrufverfahren weitgehend gleich sind, unabhängig davon, ob sie lokal oder abgelegen sind, aber normalerweise nicht identisch sind, sodass lokale Anrufe von entfernten Anrufen unterschieden werden können. Remote -Anrufe sind in der Regel langsamer und weniger zuverlässig als lokale Anrufe. Daher ist es wichtig, sie zu unterscheiden.
RPCs sind eine Form von Interprozesskommunikation (IPC), in denen verschiedene Prozesse unterschiedliche Adressräume haben: Wenn sie auf demselben Host -Computer unterschiedliche virtuelle Adressräume haben, obwohl der physische Adressraum gleich ist. Wenn sie sich auf verschiedenen Hosts befinden, ist der physische Adressraum unterschiedlich. Viele verschiedene (oft inkompatible) Technologien wurden verwendet, um das Konzept zu implementieren.
Geschichte und Ursprünge
Anfrage -Wirkungs -Protokolle Datum bis früh verteilte Computing Ende der 1960er Jahre, theoretische Vorschläge von Remote -Verfahrensanrufen als Modell des Netzwerkbetriebs in den 1970er Jahren und praktische Implementierungen datieren bis Anfang der 1980er Jahre. Bruce Jay Nelson wird im Allgemeinen 1981 mit dem Begriff "Remote Procedure Call" gutgeschrieben.[1]
Remote -Verfahrensaufrufe, die in modernen Betriebssystemen verwendet werden RC 4000 Multiprogrammierungssystem,[2] Dies verwendete ein Request-Response-Kommunikationsprotokoll für die Prozesssynchronisation.[3] Die Idee, Netzwerkoperationen als Remote -Verfahrensanrufe zu behandeln Arpanet Unterlagen.[4] 1978,, Per Brinch Hansen Vorgeschlagene verteilte Prozesse, eine Sprache für verteiltes Computing basierend auf "externen Anforderungen", die aus Prozeduraufrufen zwischen Prozessen bestehen.[5]
Eine der frühesten praktischen Implementierungen war 1982 von Brian Randell und Kollegen für ihre Newcastle -Verbindung zwischen Unix -Maschinen.[6] Es folgten bald "Lupin" von Andrew Birrell und Bruce Nelson in der Zeder Umwelt bei Xerox Parc.[7][8][9] Lupin erzeugte automatisch Stubs, lieferte Typ-sichere Bindungen und verwendete ein effizientes Protokoll für die Kommunikation.[8] Eine der ersten Geschäftsnutzungen von RPC war von Xerox unter dem Namen "Courier" im Jahr 1981. Die erste populäre Implementierung von RPC on Unix war Sun's RPC (jetzt als ONC RPC bezeichnet) und als Grundlage für das Netzwerkdateisystem (NFS) verwendet.
In den 1990er Jahren mit der Popularität von Objekt orientierte ProgrammierungEin alternatives Modell der Remote -Methode -Aufruf (RMI) wurde weithin implementiert, wie in Maklerarchitektur der gemeinsamen Objektanfragen (Corba, 1991) und Aufruf von Java Remote -Methode. RMIS wiederum wurde mit dem Aufstieg des Internets, insbesondere in den 2000er Jahren, beliebt.
Nachrichtenübergang
RPC ist a Request -Reaktion Protokoll. Ein RPC wird von der initiiert Klient, der eine Anforderungsnachricht an eine bekannte Fernbedienung sendet Server Ausführen einer angegebenen Prozedur mit gelieferten Parametern. Der Remote -Server sendet eine Antwort an den Client, und die Anwendung setzt seinen Prozess fort. Während der Server den Anruf verarbeitet, wird der Client blockiert (er wartet, bis der Server vor der Wiederaufnahme der Ausführung bearbeitet wird), es sei denn, der Client sendet eine asynchrone Anforderung an den Server, wie z. Xmlhttprequest. Es gibt viele Variationen und Feinheiten in verschiedenen Implementierungen, was zu einer Vielzahl verschiedener (inkompatibler) RPC -Protokolle führt.
Ein wichtiger Unterschied zwischen Remote -Verfahrensanrufen und lokalen Aufrufen besteht darin, dass Remote -Anrufe aufgrund unvorhersehbarer Netzwerkprobleme fehlschlagen können. Außerdem müssen Anrufer im Allgemeinen mit solchen Fehlern umgehen, ohne zu wissen, ob das Remote -Verfahren tatsächlich aufgerufen wurde. Idempotent Verfahren (solche, die keine zusätzlichen Auswirkungen haben, wenn sie mehr als einmal aufgerufen werden) sind leicht zu handhaben, aber es bleiben genügend Schwierigkeiten, dass der Code, um Remote-Verfahren aufzurufen, häufig auf sorgfältig geschriebene Subsysteme auf niedriger Ebene beschränkt ist.
Sequenz von Ereignissen
- Der Kunde ruft den Kunden an Stummel. Der Anruf ist ein lokaler Verfahrensanruf, wobei die Parameter normal auf den Stapel gedrückt werden.
- Das Client Stub Packt die Parameter in eine Nachricht und trifft einen System auf, um die Nachricht zu senden. Das Packen der Parameter heißt Marshalle.
- Der lokale des Kunden Betriebssystem Sendet die Nachricht vom Client -Computer an die Servermaschine.
- Die lokale Betriebssystem Auf der Servermaschine übergibt die eingehenden Pakete an die Serverstub.
- Der Serverstub packt die Parameter aus der Nachricht aus. Das Auspacken der Parameter heißt Unmarshalling.
- Schließlich ruft der Serverstub die Serverprozedur auf. Die Antwort zeichnet dieselben Schritte in umgekehrter Richtung aus.
Standardkontaktmechanismen
Um verschiedene Clients auf Server zugreifen zu lassen, wurden eine Reihe standardisierter RPC -Systeme erstellt. Die meisten von ihnen verwenden eine Schnittstellenbeschreibung Sprache (IDL), um verschiedene Plattformen den RPC aufrufen zu lassen. Die IDL -Dateien können dann verwendet werden, um Code für die Schnittstelle zwischen Client und Servern zu generieren.
Analoga
Bemerkenswerte RPC -Implementierungen und Analoga umfassen:
Sprachspezifisch
- Java's Aufruf von Java Remote -Methode (Java RMI) API bietet ähnliche Funktionen wie die Standard -UNIX -RPC -Methoden.
- gehen bietet Paket RPC zur Implementierung von RPCs mit Unterstützung von asynchronen Anrufen.
- Modula-3Netzwerkobjekte, die die Grundlage für Javas RMI waren[10]
- RPYC Implementiert RPC -Mechanismen in Python mit Unterstützung asynchroner Anrufe.
- Rubin verteilt (DRB) ermöglicht es Ruby -Programmen, auf derselben Maschine oder über einem Netzwerk miteinander zu kommunizieren. DRB verwendet Remote -Methodenaufruf (RMI), um Befehle und Daten zwischen den Prozessen zu übergeben.
- Erlang wird prozessorientiert und unterstützt nativ über die Verteilung und RPCs, indem sie zwischen Knoten und lokalen Prozessen gleichermaßen überschreitet.
- Elixier Erstellt über die Erlang-VM und ermöglicht die Prozesskommunikation (Elixir/Erlang-Prozesse, nicht OS-Prozesse) desselben Netzwerks außerhalb des Boxs über Agenten und Nachrichtenübergabe.
Anwendungsspezifisch
- Aktionsnachrichtenformat (AMF) erlaubt Adobe Flex Anwendungen zur Kommunikation mit Backends oder andere Anwendungen, die AMF unterstützen.
- Remote -Funktionsaufruf ist die Standard -SAP -Schnittstelle für die Kommunikation zwischen SAP -Systemen. RFC ruft eine Funktion auf, die in einem Remote -System ausgeführt werden soll.
Allgemein
- NFS (Netzwerkdateisystem) ist einer der bekanntesten Benutzer von RPC
- Offen, durch Sun Microsystems
- D-Bus Open Source IPC Das Programm bietet eine ähnliche Funktion wie Corba.
- Zauberer Bietet die API und die anlastorientierte Sprache (EOL) für einen Aufruf einer Verbundmethode
- XML-RPC ist ein RPC -Protokoll, das verwendet Xml seine Anrufe codieren und Http als Transportmechanismus.
- JSON-RPC ist ein RPC -Protokoll, das verwendet JSON-Codierte Nachrichten
- JSON-WSP ist ein RPC -Protokoll, das verwendet JSON-Codierte Nachrichten
- SEIFE ist ein Nachfolger von XML-RPC und verwendet auch XML, um seine HTTP-basierten Anrufe zu codieren.
- Zeroc's Internetkommunikation Engine (ICE) verteilte Computerplattform.
- Ätzen Framework zum Aufbau von Netzwerkdiensten.
- Apache -Sparsamkeit Protokoll und Rahmen.
- Corba Bietet Remote -Verfahrensaufruf über eine mittlere Schicht, die als die als die genannt wird Objektanforderung Broker.
- Libvent Bietet ein Framework zum Erstellen von RPC -Servern und Clients.[11]
- Windows Communication Foundation ist eine Anwendungsprogrammierschnittstelle im .NET-Framework zum Erstellen angeschlossener, serviceorientierter Anwendungen.
- Microsoft .net Remoting Bietet RPC -Einrichtungen für verteilte Systeme, die auf der Windows -Plattform implementiert sind. Es wurde von abgelöst von WCF.
- Das Microsoft DCOM Verwendet MSRPC das basiert auf DCE/RPC
- Die Open Software Foundation DCE/RPC Verteilte Computerumgebung (auch von Microsoft implementiert).
- Google Protokollpuffer (Protobufs) Paket enthält eine Schnittstellendefinitionssprache, die für seine RPC -Protokolle verwendet wird[12] Open Source im Jahr 2015 als GRPC.[13]
- Wamp kombiniert RPC und Veröffentlichen von Subscribe in ein einzelnes transportagnostisches Protokoll.
- Google Web Toolkit Verwendet ein asynchrones RPC, um mit dem Serverdienst zu kommunizieren.[14]
- Apache Avro Bietet RPC, bei dem Client- und Server -Austauschschemata im Verbindungshandshake und der Codegenerierung nicht erforderlich sind.
- Eingebetteter RPC ist eine leichte RPC -Implementierung, die von NXP entwickelt wurde und sich auf primäre Kortexkerne abzielt
- KF vertrauenswürdige Ausführungsumgebung Verwendet Proxy und Objekte, um Objekte über Sandboxen hinweg zu kommunizieren
- MSGPACK-RPC ist eine leichte RPC -Implementierung mit Verwendung MessagePack Daten serialisieren. Es wird im Texteditor verwendet Neovim.
Siehe auch
- 9p
- Microsoft RPC
- Lokaler Verfahrensanruf
- Http
- ODBC
- Fernbewertung
- Externe Datenrepräsentation (Serialisierungsformat, das von z. B. NFS verwendet wird)
- Netzwerkdatendarstellung (Serialisierungsformat, das von z. B. Microsoft RPC verwendet wird)
- Ressourcenorientierte Architektur
- Distributed Object Middleware
- Fragmentiertes Objekt
- GRPC
Verweise
- ^ Bruce Jay Nelson (Mai 1981). Remote -Verfahrensanruf. PARC CSL-81-9 (auch CMU-CS-81-119). Xerox Palo Alto Research Center. Doktorarbeit.
- ^ "Pro Brinch Hansen • IEEE Computer Society". www.computer.org. Abgerufen 2015-12-15.
- ^ Brinch Hansen, Per (1969). RC 4000 Computersoftware: Multiprogrammiersystem (PDF). Kopenhagen, Dänemark: Regnecentralen.
- ^ James E. White (23. Dezember 1975). "Ein hochrangiges Framework für netzwerkbasierte Ressourcenfreigabe". RFC 707. Augmentation Research Center. Abgerufen 11. Juli, 2011.
- ^ Brinch Hansen, per (November 1978). "Verteilte Prozesse: Ein gleichzeitiges Programmierkonzept" (PDF). Kommunikation der ACM. 21 (11): 934–941. Citeseerx 10.1.1.107.3108. doi:10.1145/359642.359651.
- ^ Brownbridge, David R.; Marshall, Lindsay F.; Randell, Brian (1982). "Die Newcastle -Verbindung" (PDF). Software: Übung und Erfahrung. 12 (12): 1147–1162. doi:10.1002/spe.4380121206. Archiviert von das Original (PDF) am 2016-08-16. Abgerufen 2016-08-16.
- ^ Birrell, Andrew D.; Nelson, Bruce Jay (1984). "Implementierung von Remote -Prozeduranrufen" (PDF). ACM -Transaktionen auf Computersystemen. 2: 39–59. doi:10.1145/2080.357392.
- ^ a b "1994 - Andrew Birrell, Bruce Nelson: Fernverfahrensanruf". Zitat für Softwaresysteme Auszeichnung. Verband für Rechenmaschinen. Archiviert von das Original am 2. April 2012. Abgerufen 11. Juli, 2011.
- ^ "Sigops Hall of Fame Award". Spezialinteressengruppe für Betriebssysteme. Verband für Rechenmaschinen. Abgerufen 11. Juli, 2011.
- ^ Das A-Z der Programmiersprachen: Modula-3-A-Z der Programmiersprachen Archiviert 2009-01-05 am Wayback -Maschine. Computerwelt. Abgerufen am 2013-07-17.
- ^ libevent: Hauptseite. Ffene.org. Abgerufen am 2013-07-17.
- ^ "Protokollpuffer - Googles Datenaustauschformat". Google -Projektwebsite. Abgerufen 1. November, 2011.
- ^ "GRPC Open-Source Universal RPC Framework". Google -Projektwebsite. Abgerufen 7. September, 2016.
- ^ "Google Web Toolkit". Google -Projektwebsite. Abgerufen 1. November, 2011.
Externe Links
- RFC1057 - Gibt Version 1 von ONC RPC an
- RFC5531 - Gibt Version 2 von ONC RPC an
- Remote Procedure Calls (RPC) - Ein Tutorial über ONC RPC von Dr. Dave Marshall von der Cardiff University
- Einführung in die RPC -Programmierung - Die Einführung eines Entwicklers in RPC und XDR aus der SGI -Irrix -Dokumentation.