Fjernprosedyrekall (RPC)
Kjør funksjoner på eksterne noder ved hjelp av RPC, slik at distribuert beregning og tjenestekall på tvers av en klynge blir mulig.
Fjernprosedyrekall (RPC) er en gratis leksjon i Erlang OTP: programmering av distribuerte og feiltolerante systemer på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Erlang OTP: programmering av distribuerte og feiltolerante systemer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Erlang OTP: programmering av distribuerte og feiltolerante systemer inneholder totalt 4 leksjoner.
Hva er et Remote Procedure Call?
Se for Dem at De har to Erlang-programmer som kjører på ulike maskiner, eller på samme maskin, men i separate Erlang-«noder». Hvordan kommuniserer de?
Remote Procedure Call (RPC) er en måte for ett program (klienten) å be et annet program (serveren) om å kjøre en funksjon, akkurat som om det skulle kalle en lokal funksjon. Klienten trenger ikke å kjenne detaljene i nettverkskommunikasjonen.
Erlangs innebygde RPC-modul
Erlang gjør distribuert databehandling enkelt med den innebygde rpc-modulen. Denne modulen tilbyr funksjoner for å kalle eller sende beregninger til eksterne Erlang-noder.
rpc:call/4: For synkrone kall, der klienten venter på et svar.rpc:cast/4: For asynkrone kall, der klienten ikke venter på et svar.
Dette er kraftige verktøy for å bygge distribuerte applikasjoner.
Sette opp RPC
Før vi kan bruke RPC, trenger vi minst to tilkoblede Erlang-noder. Hver node trenger et navn og en delt cookie for autentisering.
Åpne to separate terminalvinduer og start Erlang-noder slik:
- Node 1:
erl -sname server_node -setcookie mysecret - Node 2:
erl -sname client_node -setcookie mysecret
Kontroller at de kan pinge hverandre: net_adm:ping(server_node@yourhostname).
Synkront RPC med `rpc:call/4`
Funksjonen rpc:call/4 brukes når De trenger et umiddelbart svar fra den eksterne noden. Den tar fire argumenter:
Node: Navnet på den eksterne Erlang-noden.Module: Modulen på den eksterne noden der funksjonen finnes.Function: Navnet på funksjonen som skal kjøres.Args: En liste med argumenter til funksjonen.
Prosessen som utfører kallet, blokkeres til den mottar et svar eller en feil.
Eksempel på RPC-kall: Servermodul
La oss opprette en enkel modul, math_server.erl. Lagre denne koden og kompiler den på server_node:
1. Lagre som math_server.erl
2. Kompiler på server_node: c(math_server).
-module(math_server).
-export([add/2, multiply/2]).
add(A, B) ->
A + B.
multiply(A, B) ->
A * B.Eksempel på RPC-kall: Klientinteraksjon
Nå kan vi kalle funksjonen math_server:add/2 eksternt fra client_node! Husk å erstatte yourhostname med det faktiske vertsnavnet til maskinen Deres.
Skriv dette inn i Erlang-skallet til client_node:
rpc:call(server_node@yourhostname, math_server, add, [10, 5]).Forstå RPC-resultater
Når De kjører rpc:call/4, håndterer Erlang nettverkskommunikasjonen for Dem. Resultatet fra det eksterne funksjonskallet returneres direkte til prosessen som utførte kallet.
Hvis den eksterne noden ikke finnes, modulen ikke er lastet inn, eller funksjonen krasjer, returnerer rpc:call/4 en feiltuppel som {badrpc, Reason}. Dette hjelper Dem med å håndtere mulige problemer i det distribuerte systemet.
Asynkront RPC med `rpc:cast/4`
Noen ganger trenger De ikke et umiddelbart svar fra et eksternt kall. De vil bare sende en forespørsel og fortsette arbeidet. Det er her rpc:cast/4 kommer inn.
rpc:cast/4 fungerer på samme måte som rpc:call/4, men er en «send og glem»-operasjon. Klienten sender meldingen og venter ikke på et svar, noe som gjør operasjonen ikke-blokkerende.
Eksempel på RPC-cast: Loggermodul
La oss opprette en enkel loggermodul. Lagre den som logger.erl og kompiler den på server_node:
1. Lagre som logger.erl
2. Kompiler på server_node: c(logger).
-module(logger).
-export([log_message/1]).
log_message(Message) ->
io:format("~p: Remote log: ~p~n", [self(), Message]).Eksempel på RPC-cast: Klientinteraksjon
Nå kan De bruke rpc:cast/4 fra client_node til å sende en loggmelding til server_node. Legg merke til at client_node ikke venter på et svar.
Skriv dette inn i Erlang-skallet til client_node (erstatt yourhostname):
De vil se loggmeldingen vises i konsollen på server_node!
rpc:cast(server_node@yourhostname, logger, log_message, ["Hello from client!"]).Kort kontroll av RPC
De har lært om synkrone og asynkrone Remote Procedure Calls i Erlang.
Oppsummering: RPC for distribuert Erlang
I denne leksjonen har De utforsket hvordan Erlangs innebygde rpc-modul muliggjør sømløs kjøring av funksjoner på tvers av ulike noder.
- Vi lærte om
rpc:call/4for synkrone, blokkerende kall når det er nødvendig med et resultat. - Vi gikk også gjennom
rpc:cast/4for asynkrone, ikke-blokkerende kall når det ikke kreves et umiddelbart svar. - Det er avgjørende å sette opp tilkoblede noder med delte cookier for at RPC skal fungere.
RPC forenkler distribuert programmering og gjør det enkelt å bygge applikasjoner som utnytter flere Erlang-noder.
Lær deg Erlang med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Fjernprosedyrekall (RPC)» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Erlang OTP: programmering av distribuerte og feiltolerante systemer, inkludert «Fjernprosedyrekall (RPC)», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Erlang OTP: programmering av distribuerte og feiltolerante systemer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Fjernprosedyrekall (RPC)»?
Kjør funksjoner på eksterne noder ved hjelp av RPC, slik at distribuert beregning og tjenestekall på tvers av en klynge blir mulig. Du øver på Erlang OTP: programmering av distribuerte og feiltolerante systemer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Erlang OTP: programmering av distribuerte og feiltolerante systemer?
Ingen tidligere erfaring er nødvendig. Erlang OTP: programmering av distribuerte og feiltolerante systemer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Fjernprosedyrekall (RPC)»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Erlang OTP: programmering av distribuerte og feiltolerante systemer-leksjonen?
Ja. Alle Erlang OTP: programmering av distribuerte og feiltolerante systemer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Nodekommunikasjon og oppsett
- Fjernprosedyrekall (RPC)
- Global prosessregistrering
- Distribusjonssikkerhet og cookies