Porovnání služeb gRPC pomocí rozhraní HTTP API
tento článek vysvětluje, jak gRPC služby porovnávají s rozhraními HTTP api pomocí JSON (včetně ASP.NET Core webových rozhraní api). Technologie používaná k poskytování rozhraní API pro vaši aplikaci je důležitou volbou a gRPC nabízí jedinečné výhody v porovnání s rozhraními API protokolu HTTP. Tento článek popisuje silné a slabé stránky gRPC a doporučuje scénáře použití gRPC nad jinými technologiemi.
Porovnání na vysoké úrovni
Následující tabulka nabízí vysoké srovnání funkcí mezi gRPC a rozhraními API protokolu HTTP s JSON.
| Funkce | gRPC | HTTP API s JSON |
|---|---|---|
| Kontrakt | Požadováno (.) | Volitelné (OpenAPI) |
| Protokol | HTTP/2 | HTTP |
| Délka | Protobuf (malý, binární) | JSON (velký, lidský čitelný) |
| Prescriptiveness | Striktní specifikace | Spojování. Všechny požadavky HTTP jsou platné. |
| Streamování | Klient, server, obousměrné | Klient, Server |
| Podpora prohlížečů | Ne (vyžaduje grpc-Web) | Yes |
| Zabezpečení | Přenos (TLS) | Přenos (TLS) |
| Generování kódu klienta | Ano | OpenAPI + nástroje třetích stran |
gRPC síly
Výkon
zprávy gRPC jsou serializovány pomocí Protobuf, efektivního formátu binární zprávy. Protobuf se na server a klientovi velmi rychle serializovat. Protobuf serializace vede k malým datovým částem zprávy, důležité ve scénářích s omezenou šířkou pásma, jako jsou mobilní aplikace.
gRPC je navržená pro HTTP/2, což je hlavní revize HTTP, která poskytuje významné výhody výkonu oproti HTTP 1. x:
- Binární rámce a komprese. Protokol HTTP/2 je komprimován a efektivní při posílání i přijímání.
- Multiplexování více volání HTTP/2 přes jedno připojení TCP. Multiplexování eliminuje blokování po řádcích.
HTTP/2 není výhradně pro gRPC. Mnoho typů požadavků, včetně HTTP API s JSON, může používat HTTP/2 a využívat výhody jeho vylepšení výkonu.
Generování kódu
Všechny gRPC architektury poskytují prvotřídní podporu pro generování kódu. Základním souborem pro gRPC vývoj je .proto soubor, který definuje kontrakt služeb gRPC a zpráv. Z tohoto souboru gRPC architektury generují základní třídu služby, zprávy a kompletního klienta.
Sdílení souboru . a klienta mezi serverem a klientem může být vygenerováno z koncového konce. Generování kódu klienta eliminuje duplikaci zpráv na straně klienta a serveru a pro vás vytvoří klienta se silným typem. Nemusíte psát klienta, ale v aplikacích s mnoha službami ušetříte významnou dobu vývoje.
Striktní specifikace
Formální specifikace pro HTTP API s JSON neexistuje. Vývojáři připravují nejlepší formát adres URL, příkazů HTTP a kódů odpovědí.
Specifikace gRPC je přednastavená na formát, který musí služba gRPC sledovat. gRPC eliminuje diskusi a šetří čas vývojáře, protože gRPC je konzistentní napříč platformami a implementacemi.
Streamování
HTTP/2 poskytuje základ pro dlouhodobé streamy komunikace v reálném čase. gRPC poskytuje prvotřídní podporu pro streamování prostřednictvím HTTP/2.
Služba gRPC podporuje všechny kombinace streamování:
- Unární (žádné streamování)
- Streamování serveru na klienta
- Streamování klienta na server
- Obousměrné streamování
Konečný termín, vypršení časového limitu a zrušení
gRPC umožňuje klientům určit, jak dlouho mají být ochotni počkat na dokončení vzdáleného volání procedur (RPC). Termín se pošle na server a server se může rozhodnout, jakou akci chcete provést, pokud překročí konečný termín. Server může například zrušit probíhající požadavky gRPC/HTTP/Database na vypršení časového limitu.
Rozšiřování konečného termínu a zrušení prostřednictvím podřízených volání gRPC pomáhá vymáhat limity využití prostředků.
Doporučené scénáře pro gRPC
gRPC je vhodný pro následující scénáře:
- Mikroslužby: gRPC je navržená pro zajištění nízké latence a komunikace s vysokou propustností. gRPC je ideální pro odlehčené mikroslužby, kde je efektivita nejdůležitější.
- Komunikace Point-to-Point v reálném čase: gRPC má skvělou podporu pro obousměrné streamování. služby gRPC mohou nabízet zprávy v reálném čase bez cyklického dotazování.
- Prostředí Polyglot: nástroje gRPC podporují všechny oblíbené vývojové jazyky, což gRPC vhodnou volbou pro prostředí s více jazyky.
- Omezená prostředí sítě: zprávy gRPC jsou serializovány pomocí Protobuf, což je odlehčený formát zprávy. Zpráva gRPC je vždy menší než ekvivalentní zpráva JSON.
- Meziprocesová komunikace (IPC): k komunikaci mezi aplikacemi ve stejném počítači můžete použít s gRPC přenosů IPC (jako jsou třeba sokety domény UNIX a pojmenované kanály). Další informace naleznete v tématu Komunikace mezi procesy pomocí služby gRPC.
gRPC slabé stránky
Omezená podpora prohlížeče
V dnešní době není možné přímo volat službu gRPC z prohlížeče. gRPC intenzivně používá funkce HTTP/2 a bez prohlížeče poskytuje úroveň řízení požadovaná pro webové požadavky na podporu klienta gRPC. Například prohlížeče neumožňují volajícímu vyžadovat, aby byl použit HTTP/2 nebo poskytoval přístup k podkladovým rámcům HTTP/2.
Existují dva běžné přístupy k převedení gRPC do aplikací prohlížeče:
gRPC-web je doplňková technologie od týmu gRPC, která poskytuje podporu gRPC v prohlížeči. gRPC-web umožňuje aplikacím v prohlížeči těžit z vysoce výkonného a nízkého využití sítě v gRPC. GRPC-web nepodporuje všechny funkce gRPC. Klient a obousměrné streamování se nepodporuje a je omezená podpora pro streamování serveru.
.NET Core podporuje gRPC-Web. Další informace naleznete v tématu Použití gRPC v prohlížečových aplikacích.
Webová rozhraní API RESTful JSON se dají automaticky vytvořit z gRPC služeb tím, že se pokládá na soubor . Dementi pomocí metadat http. To umožňuje aplikaci podporovat webová rozhraní API gRPC i JSON, aniž by došlo k duplikaci úsilí o vytváření samostatných služeb pro obě.
.NET Core má experimentální podporu pro vytváření webových rozhraní API JSON z gRPC Services. Další informace naleznete v tématu Vytváření webových rozhraní API JSON z gRPC.
Nečitelný člověk
Požadavky HTTP API se odesílají jako text a můžou je číst a vytvářet člověkem.
zprávy gRPC jsou ve výchozím nastavení kódované pomocí Protobuf. I když je Protobuf efektivní pro posílání a přijímání, jeho binární formát není čitelný lidmi. Protobuf vyžaduje, aby byl popis rozhraní zprávy zadaný v souboru . proč správně deserializován. K analýze datových částí Protobuf na lince a k vytváření požadavků rukou je potřeba další nástroje.
Funkce jako reflexe serveru a Nástroj příkazového řádku gRPC existují pro pomoc s binárními Protobuf zprávami. Také zprávy Protobuf podporují Převod do formátu JSON a zněj. Integrovaný převod JSON poskytuje efektivní způsob, jak převést zprávy Protobuf do nebo z lidského čitelného formuláře při ladění.
Scénáře alternativních platforem
Další architektury se doporučují přes gRPC v následujících scénářích:
- Rozhraní API pro přístup přes prohlížeč: v prohlížeči se nepodporuje plně gRPC. gRPC-web může nabízet podporu prohlížeče, ale má omezení a zavádí proxy serveru.
- Komunikace v reálném čase: gRPC podporuje komunikaci v reálném čase prostřednictvím streamování, ale koncept vysílání zprávy do registrovaných připojení neexistuje. Například ve scénáři chatovací místnosti, kde mají být nové zprávy chatu odesílány všem klientům v chatovací místnosti, každé volání gRPC je požadováno k samostatnému streamování nových zpráv o konverzaci do klienta. SignalR je užitečnou architekturou pro tento scénář. SignalR má koncept trvalých připojení a integrovanou podporu pro vysílání zpráv.