Vzdálené volání procedury

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 22. března 2021; kontroly vyžadují 3 úpravy .

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:

Princip

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.

Komponenty

Ú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í.

Poznámky

  1. RFC-4627 . Získáno 13. listopadu 2008. Archivováno z originálu 1. ledna 2016.
  2. Rozhraní API a příručky pro vývojáře související s JDK 5.0 Remote Method Invocation (RMI) – od Sun Microsystems . Získáno 13. listopadu 2008. Archivováno z originálu 19. prosince 2008.
  3. RFC-4227
  4. RFC-1831 . Získáno 13. listopadu 2008. Archivováno z originálu 6. listopadu 2008.
  5. RFC-1833 . Získáno 13. listopadu 2008. Archivováno z originálu 25. října 2008.
  6. RFC-3529 . Získáno 13. listopadu 2008. Archivováno z originálu 10. října 2008.

Odkazy