====== gRPC (Remote Procedure Call) ====== **gRPC** je moderní, vysoce výkonný open-source framework pro vzdálené volání procedur (RPC). Byl vyvinut společností [[https://it-slovnik.cz/pojem/google|Google]] a je navržen tak, aby umožňoval klientským a serverovým aplikacím komunikovat napříč různými programovacími jazyky (např. [[csharp|C#]], Python, Java, Go). V architektuře [[.net_v_architekture_mikrosluzeb|mikroslužeb]] se gRPC stalo standardem pro vysoce efektivní interní komunikaci. ===== Klíčové technologie ===== Vysoký výkon gRPC je dán kombinací dvou technologií: * **HTTP/2:** Na rozdíl od RESTu (který často používá HTTP/1.1) využívá gRPC binární protokol HTTP/2. Ten umožňuje **multiplexování** (více požadavků v jednom spojení) a obousměrné streamování. * **Protocol Buffers (Protobuf):** Místo čitelného textu (JSON) používá gRPC binární serializaci. Data jsou díky tomu až o 80 % menší a jejich zpracování je mnohem rychlejší. ===== Režimy komunikace ===== gRPC definuje čtyři typy metod (servisů): ^ Typ ^ Popis ^ | **Unary** | Klasický model: Klient pošle jeden požadavek a čeká na jednu odpověď. | | **Server Streaming** | Klient pošle jeden požadavek a server mu posílá proud zpráv (např. živé výsledky). | | **Client Streaming** | Klient posílá proud zpráv a server odpoví jednou souhrnnou zprávou (např. upload souboru). | | **Bidirectional Streaming** | Obě strany posílají data nezávisle na sobě v reálném čase (např. chat nebo telemetrie). | ===== Výhody a nevýhody ===== ==== Výhody ==== * **Vysoký výkon:** Ideální pro systémy s nízkou latencí. * **Silné typování:** Díky souborům `.proto` je kontrakt mezi serverem a klientem pevně daný. * **Code Generation:** Nástroje automaticky vygenerují kód pro klienta i server v mnoha jazycích. ==== Nevýhody ==== * **Omezená podpora prohlížečů:** Prohlížeče zatím plně nepodporují HTTP/2 v míře potřebné pro gRPC (vyžaduje se gRPC-Web). * **Nečitelnost pro lidi:** Protože jsou zprávy binární, nelze je snadno kontrolovat v běžném textovém editoru. ===== Příklad definice (.proto) ===== Veškerá logika gRPC začíná definicí v IDL (Interface Definition Language): syntax = "proto3"; // Definice služby service Vypocet { rpc Secti (SestavaCisel) returns (Vysledek) {} } // Definice zpráv message SestavaCisel { int32 a = 1; int32 b = 2; } message Vysledek { int32 soucet = 1; } --- //Související pojmy: [[.net_v_architekture_mikrosluzeb|Mikroslužby]], [[https://it-slovnik.cz/pojem/api|API]], [[https://it-slovnik.cz/pojem/google|Google]]//