Porovnání služeb gRPC pomocí rozhraní HTTP API
Autor: James Newton-King
Tento článek vysvětluje, jak služby gRPC porovnávají s rozhraními HTTP API s JSon (včetně webových rozhraní API ASP.NET Core). Technologie použitá 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 HTTP API. Tento článek popisuje silné a slabé stránky gRPC a doporučuje scénáře použití gRPC oproti jiným technologiím.
Porovnání vysoké úrovně
Následující tabulka nabízí základní porovnání funkcí mezi gRPC a rozhraními HTTP API s JSON.
Funkce | gRPC | Rozhraní HTTP API s on-endem JS |
---|---|---|
Kontrakt | Povinné (.proto ) |
Volitelné (OpenAPI) |
Protokol | HTTP/2 | HTTP |
Datová část | Protobuf (malý, binární) | JSZAPNUTO (velké, čitelné člověkem) |
Prescriptiveness | Striktní specifikace | Volné. Jakýkoli protokol HTTP je platný. |
Streamování | Klient, server, obousměrný | Klient, server |
Podpora prohlížečů | Ne (vyžaduje grpc-web) | Ano |
Zabezpečení | Přenos (TLS) | Přenos (TLS) |
Generování kódu klienta | Ano | OpenAPI + nástroje třetích stran |
silné stránky gRPC
Výkon
Zprávy gRPC jsou serializovány pomocí Protobuf, efektivní binární formát zprávy. Protobuf serializuje velmi rychle na serveru a klientovi. Serializace Protobuf vede k malým datovým částem zpráv, které jsou důležité ve scénářích s omezenou šířkou pásma, jako jsou mobilní aplikace.
GRPC je navržená pro HTTP/2, hlavní revize PROTOKOLU HTTP, která poskytuje významné výhody výkonu oproti HTTP 1.x:
- Binární rámování a komprese. Protokol HTTP/2 je kompaktní a efektivní jak při odesílání, tak přijímání.
- Multiplexování více volání HTTP/2 přes jedno připojení TCP. Multiplexing eliminuje blokování hlavy řádku.
HTTP/2 není výhradní pro gRPC. Mnoho typů požadavků, včetně rozhraní HTTP API s JSON, může využívat protokol HTTP/2 a těžit z jeho vylepšení výkonu.
Generování kódu
Všechny architektury gRPC poskytují prvotřídní podporu pro generování kódu. Základním souborem .proto
pro vývoj gRPC je soubor, který definuje kontrakt služeb a zpráv gRPC. Z tohoto souboru generují rozhraní gRPC základní třídu služby, zprávy a kompletního klienta.
Sdílením .proto
souboru mezi serverem a klientem je možné generovat zprávy a kód klienta od konce do konce. Generování kódu klienta eliminuje duplicitu zpráv na klientovi a serveru a vytvoří pro vás silného klienta. Nemusíte psát klienta, ale šetří významnou dobu vývoje v aplikacích s mnoha službami.
Striktní specifikace
Formální specifikace pro rozhraní HTTP API s JSON neexistuje. Vývojáři diskutují o nejlepším formátu adres URL, příkazů HTTP a kódů odpovědí.
Specifikace gRPC je preskriptivní pro formát, který musí služba gRPC dodržovat. gRPC eliminuje debatu a šetří čas vývojářů, protože gRPC je konzistentní napříč platformami a implementacemi.
Streamování
HTTP/2 poskytuje základ pro dlouhotrvající komunikační streamy v reálném čase. gRPC poskytuje prvotřídní podporu streamování prostřednictvím protokolu HTTP/2.
Služba gRPC podporuje všechny kombinace streamování:
- Unární (bez streamování)
- Streamování serveru do klienta
- Streamování klienta na server
- Obousměrné streamování
Konečný termín/vypršení časových limitů a zrušení
gRPC umožňuje klientům určit, jak dlouho budou ochotni čekat na dokončení rpc. Konečný termín se odešle na server a server může rozhodnout, jakou akci provést, pokud překročí konečný termín. Server může například zrušit probíhající požadavky gRPC/HTTP/database při vypršení časového limitu.
Rozšíření konečného termínu a zrušení prostřednictvím podřízených volání gRPC pomáhá vynucovat limity využití prostředků.
Doporučené scénáře gRPC
GRPC je vhodný pro následující scénáře:
- Mikroslužby: GRPC je navržená pro komunikaci s nízkou latencí a vysokou propustností. GRPC je skvělá pro jednoduché mikroslužby, kde je důležitá efektivita.
- Komunikace typu point-to-point v reálném čase: gRPC má vynikající podporu pro obousměrné streamování. Služby gRPC můžou odesílat zprávy v reálném čase bez dotazování.
- Polyglotová prostředí: nástroje gRPC podporují všechny oblíbené vývojové jazyky, takže gRPC je dobrou volbou pro vícejazyčná prostředí.
- Síťová omezená prostředí: zprávy gRPC jsou serializovány pomocí Protobuf, zjednodušeného formátu zpráv. Zpráva gRPC je vždy menší než ekvivalentní JSzpráva ON.
- Komunikace mezi procesy (IPC):: Přenosy IPC, jako jsou sokety domény unixu a pojmenované kanály, lze použít s gRPC ke komunikaci mezi aplikacemi na stejném počítači. Další informace naleznete v tématu Komunikace mezi procesy s gRPC.
Slabá místa gRPC
Omezená podpora prohlížeče
Dnes není možné přímo volat službu gRPC z prohlížeče. GRPC silně využívá funkce HTTP/2 a žádný prohlížeč neposkytuje úroveň kontroly vyžadované webovými požadavky na podporu klienta gRPC. Prohlížeče například neumožňují volajícímu vyžadovat použití protokolu HTTP/2 nebo poskytnutí přístupu k podkladovým rámcům HTTP/2.
GRPC na ASP.NET Core nabízí dvě řešení kompatibilní s prohlížečem:
gRPC-Web umožňuje aplikacím prohlížeče volat služby gRPC pomocí klienta gRPC-Web a Protobuf. gRPC-Web vyžaduje, aby aplikace prohlížeče vygenerovala klienta gRPC. gRPC-Web umožňuje aplikacím v prohlížeči využívat výhod vysokého výkonu a nízkého využití sítě gRPC.
.NET má integrovanou podporu gRPC-Web. Další informace najdete v tématu gRPC-Web v aplikacích ASP.NET Core gRPC.
Transkódování gRPC JSON umožňuje aplikacím v prohlížeči volat služby gRPC, jako by šlo RESTo ful rozhraní API s JSON. Aplikace prohlížeče nemusí generovat klienta gRPC ani nic vědět o gRPC. RESTful API je možné automaticky vytvořit ze služeb gRPC přidáním poznámek k
.proto
souboru s metadaty HTTP. Překódování umožňuje aplikaci podporovat rozhraní gRPC i JSON web API bez duplikování úsilí o vytvoření samostatných služeb pro oba..NET má integrovanou podporu pro vytváření JSwebových rozhraní API na webu ze služeb gRPC. Další informace najdete v tématu gRPC JSON transkódování v aplikacích ASP.NET Core gRPC.
Poznámka
Transkódování gRPC JSON vyžaduje .NET 7 nebo novější.
Nečitelný člověk
Požadavky rozhraní HTTP API se odesílají jako text a můžou je číst a vytvářet lidé.
Zprávy gRPC jsou ve výchozím nastavení kódovány pomocí Protobuf. I když je protobuf efektivní k odesílání a příjmu, jeho binární formát není čitelný člověkem. Protobuf vyžaduje, aby popis rozhraní zprávy zadaný v .proto
souboru správně deserializovat. K analýze datových částí Protobuf na drátě a k ručnímu vytváření žádostí je potřeba další nástroje.
Existují funkce, jako je odraz serveru a nástroj příkazového řádku gRPC, které pomáhají s binárními zprávami Protobuf. Zprávy Protobuf také podporují převod na a z JSON. Integrovaný JSpřevod ON poskytuje efektivní způsob, jak při ladění převést zprávy Protobuf do a z lidské čitelné formy.
Alternativní scénáře architektury
V následujících scénářích se doporučují jiné architektury než gRPC:
- Přístupná rozhraní API prohlížeče: GRPC není v prohlížeči plně podporovaná. gRPC-Web může nabízet podporu prohlížeče, ale má omezení a zavádí proxy serveru.
- Komunikace vysílání 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 na registrovaná připojení neexistuje. Například ve scénáři chatovací místnosti, ve kterém by se nové zprávy chatu měly posílat všem klientům v chatovací místnosti, je každé volání gRPC potřeba k individuálnímu streamování nových chatových zpráv klientovi. SignalR je užitečná architektura pro tento scénář. SignalR má koncept trvalých připojení a integrovanou podporu pro vysílání zpráv.
Další prostředky
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro