Fjärrproceduranrop

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 22 mars 2021; kontroller kräver 3 redigeringar .

Remote procedure call (ibland remote procedure call ; RPC från engelska  remote procedure call ) är en klass av teknologier som tillåter program att anropa funktioner eller procedurer i ett annat adressutrymme (på fjärrnoder eller i ett oberoende tredjepartssystem på samma nod). Vanligtvis inkluderar en implementering av RPC-teknik två komponenter: ett nätverksprotokoll för klient-serverkommunikation och ett objektserialiseringsspråk (eller strukturer för icke-objektiva RPC). Olika implementeringar har olika arkitekturer och skiljer sig i kapacitet: vissa implementerar SOA- arkitekturen , andra implementerar CORBA eller DCOM . På transportlagret använder RPC:er huvudsakligen TCP- och UDP-protokollen , men vissa är byggda ovanpå HTTP (vilket bryter mot ISO/OSI- arkitekturen , eftersom HTTP inte ursprungligen är ett transportprotokoll).

Det finns många tekniker som tillhandahåller RPC, bland dem:

Princip

Tanken med att anropa fjärrprocedurer är att utöka mekanismen för överföring av kontroll och data inom ett program som körs på samma nod till att överföra kontroll och data över nätverket. Verktyg för fjärranrop är utformade för att underlätta organisationen av distribuerad datoranvändning och skapandet av distribuerade klient-serverinformationssystem. Den mest effektiva användningen av RPC uppnås i de applikationer där det finns en interaktiv kommunikation mellan fjärrkomponenter med en liten svarstid och en relativt liten mängd överförd data. Sådana applikationer kallas RPC-orienterade.

De framträdande egenskaperna hos ett fjärranrop är:

Implementeringen av fjärrsamtal är mycket mer komplicerad än implementeringen av lokala procedursamtal.

Eftersom anrops- och anropsprocedurerna körs på olika noder har de olika adressutrymmen, och detta skapar problem när man skickar parametrar och resultat, speciellt om maskinerna kör olika operativsystem eller har olika arkitekturer (till exempel little endian eller little endian är används ). ). Eftersom RPC inte kan förlita sig på delat minne, betyder det att RPC-parametrar inte får innehålla pekare till icke-stackminnesplatser och att parametervärden måste kopieras från en dator till en annan. För att kopiera parametrarna för proceduren och resultatet av exekvering via nätverket serialiseras de .

Till skillnad från ett lokalt samtal använder ett fjärranrop nödvändigtvis nätverksarkitekturens transportlager (till exempel TCP ), men detta förblir dolt för utvecklaren. Dessutom deltar minst två processer i implementeringen av RPC - en på varje nod, och om en av dem kraschar kan följande situationer uppstå: om anropsproceduren kraschar kommer de fjärranropade procedurerna att bli föräldralösa och om fjärrprocedurer kommer att bli "utblottade föräldrar" till anropsprocedurer, som kommer att vänta på svar från fjärrkontroller utan resultat.

Det finns också ett antal problem förknippade med heterogeniteten hos programmeringsspråk och operativa miljöer: datastrukturer och proceduranropsstrukturer som stöds i ett programmeringsspråk stöds inte på samma sätt i alla andra språk. Det finns alltså ett kompatibilitetsproblem som ännu inte har lösts vare sig genom införandet av en allmänt accepterad standard, eller genom implementeringen av flera konkurrerande standarder på alla arkitekturer och på alla språk.

Komponenter

Centralt för RPC-implementeringar är transportdelsystemet, som ansvarar för att hantera utgående och inkommande anslutningar. Dess funktioner inkluderar stöd för konceptet "meddelandegräns" för transportprotokoll som inte direkt stöder det (TCP) och stöd för garanterad leverans för transportprotokoll som inte stöder det (UDP).

Trådpoolningskomponent (endast Callee) - Ger en exekveringskontext för kod som anropas över nätverket.

Rangeringskomponenten (analogt med " serialisering " ) säkerställer att anropsparametrar packas i en byteström på ett standardsätt som är oberoende av arkitekturen (särskilt ordningen på bytes i ett ord). I synnerhet kan det påverka arrayer, strängar och strukturer som pekas på av pekparametrar.

En separat komponent kan vara ansvarig för att kryptera paket och signera dem digitalt .

Ett separat block av funktioner är autentisering och auktorisering, som säkerställer överföring av information över nätverket som identifierar personen som ringer.

I vissa implementeringar av RPC (.NET Remoting) är delsystemsgränser öppna polymorfa gränssnitt, och det är möjligt att skriva en egen implementering av nästan alla listade delsystem. I andra implementeringar (DCE RPC på Windows) är detta inte fallet.

Anteckningar

  1. RFC-4627 . Hämtad 13 november 2008. Arkiverad från originalet 1 januari 2016.
  2. JDK 5.0 Remote Method Invocation (RMI)-relaterade API:er och utvecklarguider - från Sun Microsystems . Hämtad 13 november 2008. Arkiverad från originalet 19 december 2008.
  3. RFC-4227
  4. RFC-1831 . Hämtad 13 november 2008. Arkiverad från originalet 6 november 2008.
  5. RFC-1833 . Hämtad 13 november 2008. Arkiverad från originalet 25 oktober 2008.
  6. RFC-3529 . Hämtad 13 november 2008. Arkiverad från originalet 10 oktober 2008.

Länkar