Resevanje problemov v mrezi heterogenih racunalnikov se je vcasih obravnavalo kot zanimivo in nepomembno podrocje v racunalnistvu. Vpogled v trende pa kaze, da je vse vec zahtev po takem racunanju. Novi operacijski sistemi, kot tudi uporabniski vmesniki, zahtevajo vsaj osnovne stopnje paralelnosti pri izvajanju nekaterih zamudnih operacij. Tu je vkljucena tudi komunikacija med procesi, ki si izmenjujejo podatke -- sporocila. Izmenjava sporocil med procesi lahko poteka na nivoju enega procesorja ali med vec procesorji, ki so povezani med seboj v omrezju racunalnikov.
Uporabnik bi moral brez velikega truda imeti moznost uporabe racunalniskih zmogljivosti v omrezju. Sistemi, ki omogocajo transparenten dostop do racunalniskih zmogljivosti se imenujejo distribuirani sistemi. Izgradnja takega sistema predstavlja svojevrsten izziv. Transparentnost lazje dosezemo z opremo, ki je podobna, vendar pa pri tem ne izkoristimo zmogljivosti raznovrstne racunalniske opreme, ki je na voljo.
Vsi distribuirani sistemi temeljijo na podobnem mehanizmu izvajanja oddaljenih procedur. Sistem je obicajno locen na dva dela, ki ga v racunalniski terminologiji imenujemo kot pristop Odjemalec -- Streznik ( Client -- Server). Klicanje oddaljenih procedur ne pomeni nujno, da imamo dva racunalnika, ki komunicirata preko mreze, ampak to pomeni, da dva programa komunicirata preko mreznega protokola. Tako imamo lahko model Odjemalec -- Streznik, ki se izvaja na enem samem racunalniku. Ta moznost tudi omogoca razvijalcem programske opreme, da razvijajo in testirajo distribuirane programe na enem racunalniku. Programi narejeni na ta nacin pa delujejo brez sprememb na mrezi racunalnikov.
Izvajanje oddaljenih procedur poteka tako, kot je prikazano na sliki 5. Procedura v lokalni aplikaciji sprozi zahtevo za izvajanje tako, da naslovi racunalnik, kjer se oddaljena procedura nahaja. Pri tem poleg zahteve o vrsti (najveckrat je to dogovorjena stevilka) procedure, posreduje se dodatne argumente in podatke, ki jih oddaljena procedura potrebuje za uspesno izvrsitev naloge. Na strezniku se obicajno nahaja upravitelj oddaljenih procedur (portmapper), ki ugotavlja prisotnost zahtevanih procedur in skrbi za zagon zahtevane procedure. Ko procedura (proces na strezniku) konca z delom, vrne rezultate in status uspesnosti opravljene naloge programu, ki je servis zahteval.
V praksi obstajata dva tipa streznikov, ki se uporabljata v distribuiranih sistemih. Prvi tip streznika hrani informacije o zahtevah odjemalcev. S takim pristopom streznik ve, kateri odjemalci trenutno zahtevajo servise in se lahko prilagodi njihovim specificnim zahtevam. Poleg tega lahko streznik tudi hrani informacije o posameznih odjemalcih, ki tako nastavljajo notranje stanje streznika za vsakega odjemalca posebej. Strezniki s stanjem hranijo informacije o odprtih datotekah, stevilu zahtev, stanju obdelave, ... Drugi tip streznika je brez hranjenja informacij o odjemnikih. Tak tip streznika tako za vsako operacijo zahteva popoln nabor podatkov, kar pa je lahko obremenjujoce za komunikacijo po mrezi saj strezniki s stanjem lahko hranijo zacasne podatke do zakljucka dela odjemalca.
Tipicni primer streznika s stanjem je streznik za bazo podatkov, kjer streznik hrani transakcije odjemalcev ter s tem omogoci t.i. rollback in popolno kontrolo pri sinhronizaciji z resevanjem konfliktov med razlicnimi odjemalci. Tezava streznikov s stanjem pa je tudi ta, da ob morebitnem padcu sistema ( crash) ni zagotovljena obnovitev prejsnjega stanja streznika. Seveda so tudi moznosti za obnovitev stanja, ki pa niso enostavno izvedljive.
Pri razvijanju distribuiranih aplikacijah je v primerjavi s klasicnimi programi potrebno upostevati sledece znacilnosti: