Seriál gRPC - Úvod do gRPC
gRPC je jednoduchý moderní framework, založený na vzdáleném volání procedur. Vysoká výkonnost, platformní nezávislost, jednoduchost a skvělá podpora v ASP.NET Core staví tento framework do pozice následovníka umírajících WCF.
Framework gRPC byl vytvořen společností Google, která jej uvolnila v březnu 2015 jako open-source. Jedná se tedy o časem prověřenou technologii, kterou za více než 7 let života adoptovalo mnoho známých služeb. K těm nejznámnějším patří bezesporu Netflix nebo Spotify. Kolem gRPC vzniklo mnoho komunitních projektů a dnes se jedná o RPC framework s podporou prakticky všech myslitelných platforem. Vytvořenou gRPC službu tak lze konzumovat stejně pohodlně, jako běžné REST API.
Služby gRPC jsou orientované procedurálně, takže mohou lépe sedět potřebám týmů, které nenašly zalíbení v RESTu. Z pohledu .NET vývojáře se jedná o myšlenkového nástupce WCF. Jedná se o služby postavené na kontraktech s podporou discovery service. Nejlákavější je však vysoká výkonnost, která je zajištěna funkcemi protokolu HTTP/2, který je zároveň pro běh gRPC vyžadován. Na jednom TCP spojení lze otevřít spojení mezi klientem a serverem a kontinuálně posílat velké množství dat oběma směry. Kromě využití pro různé dávkové operace a transakční zpracování dat lze gRPC používat efektivně pro synchronní komunikaci v prostředí mikroslužeb.
Samotný Microsoft je autorem proxy, která zajišťuje zpětnou podporu pro HTTP/1.1. Díky tomu lze gRPC služby volat i ze strany webového prohlížeče. Vývojáři tuto proxy ocení při stavbě Blazor WebAssembly aplikací, které nemusí komunikovat s REST službou, ale procedurálně orientovanou službou gRPC. Právě díky podpoře plně duplexního streamování lze přímo z UI provádět velmi efektivní dávkové operace nebo tuto funkcionalitu využít k stavbě komunikace v reálném čase. Dobrým příkladem může být kontinuální čtení dat z různých senzorů, notifikační hub nebo chatování.
Skvělá podpora v .NETu
Podpora gRPC sahá až do tradičního .NET Frameworku. Skutečně snadné a zábavné použití však přinesla až moderní verze .NET Core 3.1. Vývojáře potěší, že oproti jiným technologiím se gRPC rozvíjí pomaleji a není se třeba obávat neustálých aktualizací a zpětně nekompatibilních změn. Technologie gRPC je v tomto ohledu skutečně stabilní.
Efektivní komunikace
Efektivní komunikace v gRPC službách je zajištěna spojením HTTP/2 protokolu a Protobuf serializaci. HTTP/2 protokol přinesl mnoho vylepšení, na kterých jsou gRPC služby postaveny. Základním pilířem je tzv. framing a využití streamování z klienta na server, ze serveru na klienta nebo v obou směrech. Rychlost zvyšuje i výkonná binární serializace do formátu Protocol Buffers, který je též úsporný při přenosu po síti.
Multiplatformní Protobuf
Protocol Buffers představují multiplatformní a jazykově neutrální mechanismus pro binární serializaci dat. Protobuf je jednoduchý předpis, který popisuje webovou službu a zprávy, které odesílá a přijímá. Bohatá nabídka nástrojů pro různé platformy umožňuje na základě specifikace Protobuf generovat například klientské knihovny nebo dokumentaci. Serializace pomocí Protobuf je výrazně rychlejší než v případě jiných formátů (JSON, XML) a zároveň úspornější z hlediska přenosu dat.
Návrh gRPC služeb
Kromě formátu Protobuf je možné navrhovat gRPC služby výhradně s využitím jazyka C# a .NET frameworku. Tento přístup vyhovuje zejména týmům přecházejícím z WCF frameworku a firmám, které svá API používají pro vnitrofiremní komunikaci v rámci .NET platformy. Vývoj a komunikace s gRPC službami se tak výrazně zjednodušuje, protože veškeré kontrakty lze sdílet mezi projekty ve formě NuGet balíčků.
Reflection a nástroje
Pro účely vystavení kontraktů a testování gRPC služeb lze použít tzv. reflection services. Ty dokáží zpětně objevit veškeré API endpointy včetně kontraktů a vystavit endpoint se specifikací gRPC služby. Reflection je velmi podobný mechanismu Swashbuckle Swagger, který se používá u REST API. Mechanismus lze použít jak v režimu práce s Protobuf soubory, tak v případě přístupu Code-First bez souborů proto.
Nástroje pro vývoj
Zkombinujete-li osvědčené přístupy pro návrh gRPC služeb, otevře se vám cesta k několika nástrojům pro testování gRPC služeb. Tyto nástroje Vám umožní zkoumat gRPC služby z příkazové řádky (CLI) nebo pomocí grafického rozhraní. Spustit je lze lokálně na vývojářském počítači a kromě základních scénářů typu request-response testovat i práci se streamy.
Web a gRPC
Dnes už nejsou gRPC jen službami pro výměnu dat mezi aplikačními systémy. V prostředí .NETu lze gRPC použít i ve scénáři klient - server, kde je klientem například webová aplikace napsaná v Blazoru. Kombinace UI frameworku a gRPC služeb výrazně zrychluje komunikaci. Vše je postaveno na tzv. proxy, kterou lze v případě .NET platformy používat v nativní podobě middlewaru.