Vzdálené volání procedur (někdy vzdálené volání procedur ; RPC z anglického remote procedure call ) je třída technologií, které umožňují programům volat funkce nebo procedury v jiném adresovém prostoru (na vzdálených uzlech nebo v nezávislém systému třetí strany na stejném uzel). Implementace technologie RPC obvykle zahrnuje dvě součásti: síťový protokol pro komunikaci klient-server a jazyk pro serializaci objektů (nebo struktury pro neobjektivní RPC). Různé implementace mají různé architektury a liší se ve schopnostech: některé implementují architekturu SOA , jiné - CORBAnebo DCOM . Na transportní vrstvě používají RPC hlavně protokoly TCP a UDP , některé jsou však postaveny na HTTP (což porušuje architekturu ISO/OSI , protože HTTP není původně transportní protokol).
Existuje mnoho technologií, které poskytují RPC, mezi nimi:
Myšlenkou volání vzdálených procedur je rozšířit mechanismus pro přenos řízení a dat v rámci programu běžícího na stejném uzlu na přenos řízení a dat přes síť. Nástroje vzdáleného volání procedur jsou navrženy tak, aby usnadnily organizaci distribuovaných výpočtů a vytváření distribuovaných informačních systémů klient-server. Nejúčinnějšího využití RPC je dosaženo v těch aplikacích, ve kterých dochází k interaktivní komunikaci mezi vzdálenými komponentami s krátkou dobou odezvy a relativně malým množstvím přenášených dat. Takové aplikace se nazývají orientované na RPC.
Hlavní funkce vzdáleného volání procedury jsou:
Implementace vzdálených volání je mnohem složitější než implementace volání místních procedur.
Protože volající a volané procedury běží na různých uzlech, mají různé adresní prostory, což vytváří problémy při předávání parametrů a výsledků, zejména pokud stroje používají různé operační systémy nebo mají různé architektury (například little endian nebo little endian je použitý ). ) Vzhledem k tomu, že RPC se nemůže spoléhat na sdílenou paměť, znamená to, že parametry RPC nesmějí obsahovat ukazatele na místa v paměti bez zásobníku a že hodnoty parametrů musí být zkopírovány z jednoho počítače do druhého. Aby bylo možné kopírovat parametry procedury a výsledek provádění prostřednictvím sítě, jsou serializovány .
Na rozdíl od místního volání používá vzdálené volání procedury nutně transportní vrstvu síťové architektury (například TCP ), ale to zůstává vývojáři skryto. Navíc se na implementaci RPC podílejí minimálně dva procesy – jeden na každém uzlu, a pokud jeden z nich zkolabuje, mohou nastat následující situace: pokud dojde k selhání volající procedury, vzdáleně volané procedury osiří a pokud vzdálené procedury se stanou „opuštěnými rodiči“ volajících procedur, které budou bezvýsledně čekat na odpověď vzdálených procedur.
Existuje také řada problémů spojených s heterogenitou programovacích jazyků a operačních prostředí: datové struktury a struktury volání procedur podporované v jednom programovacím jazyce nejsou podporovány stejným způsobem ve všech ostatních jazycích. Existuje tedy problém s kompatibilitou, který dosud nebyl vyřešen ani zavedením jednoho obecně uznávaného standardu, ani implementací několika konkurenčních standardů na všech architekturách a ve všech jazycích.
Ústředním bodem implementací RPC je transportní subsystém, který je zodpovědný za správu odchozích a příchozích připojení. Mezi jeho funkce patří podpora konceptu „message boundary“ pro transportní protokoly, které jej přímo nepodporují (TCP) a podpora garantovaného doručení pro transportní protokoly, které jej nepodporují (UDP).
Komponenta sdružování vláken (pouze Callee) – Poskytuje kontext provádění pro kód volaný přes síť.
Zařazovací komponenta (analogická k " serializaci ") zajišťuje, že parametry volání jsou zabaleny do bajtového proudu standardním způsobem, který je nezávislý na architektuře (zejména na pořadí bajtů ve slově). Zejména může ovlivnit pole, řetězce a struktury, na které ukazují parametry ukazatele.
Samostatná součást může být zodpovědná za šifrování paketů a jejich digitální podepisování .
Samostatným blokem funkcí je autentizace a autorizace, které zajišťují přenos informací po síti identifikujících volajícího.
V některých implementacích RPC (.NET Remoting) jsou hranice subsystému otevřená polymorfní rozhraní a je možné napsat vlastní implementaci téměř všech uvedených subsystémů. V jiných implementacích (DCE RPC na Windows) tomu tak není.
protokoly TCP /IP podle vrstev modelu OSI | Základní|
---|---|
Fyzický | |
odvedeny | |
síť | |
Doprava | |
zasedání | |
Zastoupení | |
Aplikovaný | |
Uplatněno jiné | |
Seznam portů TCP a UDP |