gRPC

Tip

Tento obsah je výňatek z eBooku, Architekting Cloud Native .NET Applications for Azure, který je k dispozici na webu Docs pro .NET nebo jako soubor PDF zdarma ke stažení, který si můžete přečíst offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Zatím jsme se v této knize zaměřili na komunikaci založenou na REST . Viděli jsme, že REST je flexibilní styl architektury, který definuje operace založené na CRUD na prostředcích entit. Klienti komunikují s prostředky napříč protokolem HTTP s modelem komunikace požadavků a odpovědí. I když je REST široce implementovaná, novější komunikační technologie, gRPC, získala obrovskou dynamiku napříč komunitou nativní pro cloud.

Co je gRPC?

gRPC je moderní vysoce výkonná architektura, která vyvíjí starý protokol vzdáleného volání procedur (RPC). Na úrovni aplikace gRPC zjednodušuje zasílání zpráv mezi klienty a back-endovými službami. Pochází z Googlu, gRPC je opensourcový a součástí ekosystému CLOUD Native Computing Foundation (CNCF) nabídek nativních pro cloud. CNCF považuje gRPC za inkubační projekt. Inkubování znamená, že koncoví uživatelé používají technologii v produkčních aplikacích a projekt má řadu přispěvatelů, kteří jsou v pořádku.

Typická klientská aplikace gRPC zveřejní místní funkci v procesu, která implementuje obchodní operaci. Pod kryty tato místní funkce vyvolá jinou funkci na vzdáleném počítači. Zdá se, že místní volání se v podstatě stane transparentním voláním vzdálené služby mimo proces. Instalatér RPC abstrahuje síťovou komunikaci typu point-to-point, serializaci a spouštění mezi počítači.

Vývojáři v aplikacích nativních pro cloud často pracují napříč programovacími jazyky, architekturami a technologiemi. Tato interoperabilita komplikuje kontrakty zpráv a instalatérství vyžadované pro komunikaci mezi platformami. gRPC poskytuje "jednotnou vodorovnou vrstvu", která tyto obavy abstrahuje. Vývojáři kód ve své nativní platformě se zaměřují na obchodní funkce, zatímco gRPC zpracovává komunikaci instalatér.

GRPC nabízí komplexní podporu pro nejoblíbenější vývojové zásobníky, včetně Javy, JavaScriptu, C#, Go, Swiftu a NodeJS.

Výhody gRPC

gRPC používá protokol HTTP/2 pro svůj transportní protokol. I když je kompatibilní s protokolem HTTP 1.1, http/2 nabízí mnoho pokročilých funkcí:

  • Binární framovací protokol pro přenos dat – na rozdíl od PROTOKOLU HTTP 1.1, který je založený na textu.
  • Podpora multiplexingu pro odesílání více paralelních požadavků přes stejné připojení – HTTP 1.1 omezuje zpracování na jednu zprávu požadavku nebo odpovědi najednou.
  • Obousměrná plně duplexní komunikace pro souběžné odesílání požadavků klientů i odpovědí na server.
  • Integrované streamování umožňující požadavky a odpovědi na asynchronní streamování velkých datových sad
  • Komprese hlaviček, která snižuje využití sítě.

gRPC je odlehčený a vysoce výkonný. Může to být až 8krát rychlejší než serializace JSON se zprávami o 60–80 % menší. V analyzátoru WCF (Microsoft Windows Communication Foundation) výkon gRPC překračuje rychlost a efektivitu vysoce optimalizovaných vazeb NetTCP. Na rozdíl od NetTCP, který dává přednost stacku Microsoftu, je gRPC multiplatformní.

Vyrovnávací paměti protokolů

gRPC zahrnuje opensourcovou technologii označovanou jako vyrovnávací paměti protokolu. Poskytují vysoce efektivní a platformově neutrální serializační formát pro serializaci strukturovaných zpráv, které služby odesílají navzájem. Pomocí jazyka IDL (Interface Definition Language) pro různé platformy definují vývojáři kontrakt služby pro každou mikroslužbu. Kontrakt, implementovaný jako textový .proto soubor, popisuje metody, vstupy a výstupy pro každou službu. Stejný soubor kontraktu lze použít pro klienty a služby gRPC založené na různých vývojových platformách.

Pomocí proto souboru, protobuf kompilátoru, protocvygeneruje kód klienta i služby pro vaši cílovou platformu. Kód obsahuje následující komponenty:

  • Objekty silného typu sdílené klientem a službou, které představují operace služby a datové prvky zprávy.
  • Základní třída silného typu s požadovanou síťovou instalatérkou, kterou může vzdálená služba gRPC dědit a rozšířit.
  • Zástupný kód klienta, který obsahuje požadované instalatérské volání vzdálené služby gRPC.

Za běhu se každá zpráva serializuje jako standardní reprezentace Protobuf a vyměňuje se mezi klientem a vzdálenou službou. Na rozdíl od formátu JSON nebo XML se zprávy Protobuf serializují jako kompilované binární bajty.

Podpora gRPC v .NET

GRPC je integrovaný do sady .NET Core 3.0 SDK a novější. Podporují ho následující nástroje:

  • Visual Studio 2022 s nainstalovanou úlohou vývoje pro ASP.NET a web
  • Visual Studio Code
  • Rozhraní příkazového dotnet řádku

Sada SDK obsahuje nástroje pro směrování koncových bodů, integrované IoC a protokolování. Open source webový server Kestrel podporuje připojení HTTP/2. Obrázek 4–20 ukazuje šablonu sady Visual Studio 2022, která vygeneruje kostru projektu pro službu gRPC. Všimněte si, jak .NET plně podporuje Windows, Linux a macOS.

gRPC Support in Visual Studio 2022

Obrázek 4–20 Podpora gRPC v sadě Visual Studio 2022

Obrázek 4–21 znázorňuje službu skeleton gRPC vygenerovanou z integrovaného generování uživatelského rozhraní, které je součástí sady Visual Studio 2022.

gRPC project in Visual Studio 2022

Obrázek 4–21 Projekt gRPC v sadě Visual Studio 2022

Na předchozím obrázku si poznamenejte soubor s popisem proto a kód služby. Jak uvidíte krátce, Visual Studio vygeneruje další konfiguraci jak ve třídě po spuštění, tak v podkladovém souboru projektu.

Využití gRPC

Upřednostnění gRPC pro následující scénáře:

  • Synchronní komunikace mikroslužeb mezi mikroslužbami back-endu, kde je nutná okamžitá odpověď pro pokračování zpracování.
  • Prostředí Polyglot, která potřebují podporovat smíšené programovací platformy.
  • Komunikace s nízkou latencí a vysokou propustností, kde je kritický výkon.
  • Komunikace typu point-to-point v reálném čase – gRPC může odesílat zprávy v reálném čase bez dotazování a má vynikající podporu pro obousměrné streamování.
  • Síťová omezená prostředí – binární zprávy gRPC jsou vždy menší než ekvivalentní textová zpráva JSON.

V době psaní tohoto textu se gRPC primárně používá s back-endovými službami. Moderní prohlížeče nemůžou poskytovat úroveň ovládacího prvku HTTP/2 vyžadovaného pro podporu klienta gRPC front-endu. To znamená, že existuje podpora gRPC-Web s .NET , která umožňuje komunikaci gRPC z aplikací založených na prohlížeči vytvořených pomocí JavaScriptu nebo Blazor WebAssembly technologií. gRPC-Web umožňuje aplikaci ASP.NET Core gRPC podporovat funkce gRPC v aplikacích prohlížeče:

  • Klienti se silnými typy, vygenerovanými kódem
  • Kompaktní zprávy Protobuf
  • Streamování serveru

Implementace gRPC

Referenční architektura mikroslužeb, eShop on Containers, od Microsoftu, ukazuje, jak implementovat služby gRPC v aplikacích .NET. Obrázek 4–22 představuje back-endovou architekturu.

Backend architecture for eShop on Containers

Obrázek 4–22 Architektura back-endu pro eShop v kontejnerech

Na předchozím obrázku si všimněte, jak eShop přijímá model back-endu pro front-endy (BFF) zveřejněním několika bran rozhraní API. Probrali jsme vzor BFF dříve v této kapitole. Věnujte velkou pozornost mikroslužbě Agregátoru (v šedé barvě), která se nachází mezi bránou rozhraní API pro webové nakupování a back-endovými mikroslužbami Nákupní služby. Agregátor obdrží jeden požadavek od klienta, odešle ho do různých mikroslužeb, agreguje výsledky a odešle je zpět do žádajícího klienta. Tyto operace obvykle vyžadují synchronní komunikaci, aby vznikla okamžitá reakce. V eShopu se back-endová volání z agregátoru provádějí pomocí gRPC, jak je znázorněno na obrázku 4–23.

gRPC in eShop on Containers

Obrázek 4–23 gRPC v eShopu na kontejnerech

Komunikace gRPC vyžaduje komponenty klienta i serveru. Na předchozím obrázku si všimněte, jak agregátor Nakupování implementuje klienta gRPC. Klient provádí synchronní volání gRPC (červeně) do back-endových mikroslužeb, z nichž každý implementuje server gRPC. Klient i server využívají integrované instalace gRPC ze sady .NET SDK. Zástupné procedury na straně klienta poskytují instalatérské volání pro vyvolání vzdálených volání gRPC. Součásti na straně serveru poskytují instalatérství gRPC, které mohou vlastní třídy služeb dědit a využívat.

Mikroslužby, které zpřístupňují rozhraní RESTful API i komunikaci gRPC, vyžadují ke správě provozu více koncových bodů. Otevřeli byste koncový bod, který naslouchá provozu HTTP pro volání RESTful a další pro volání gRPC. Koncový bod gRPC musí být nakonfigurovaný pro protokol HTTP/2, který se vyžaduje pro komunikaci gRPC.

Zatímco se snažíme oddělit mikroslužby se vzory asynchronní komunikace, některé operace vyžadují přímé volání. GRPC by měla být primární volbou pro přímou synchronní komunikaci mezi mikroslužbami. Díky svému vysoce výkonnému komunikačnímu protokolu založenému na vyrovnávací paměti HTTP/2 a vyrovnávací paměti protokolu je ideální volbou.

Pohled dopředu

Při pohledu na to bude gRPC i nadále získávat trakci pro systémy nativní pro cloud. Výhody výkonu a snadné vývoj jsou přesvědčivé. REST se ale bude pravděpodobně pohybovat po dlouhou dobu. Exceluje pro veřejně vystavená rozhraní API a z důvodů zpětné kompatibility.