El objetivo es introducir un protocolo de capa de aplicación y transporte que sea mejor en cuanto a latencia y rendimiento de red . Actualmente, la aplicación usa REST con HTTP / 1.1 y experimentamos una alta latencia. Necesito resolver este problema de latencia y estoy abierto a usar gRPC (HTTP / 2) o REST / HTTP2 .
HTTP / 2:
- Multiplexado
- Conexión TCP única
- Binario en lugar de textual
- Compresión de encabezado
- Empuje del servidor
Soy consciente de todas las ventajas anteriores. Pregunta No. 1: Si uso REST con HTTP / 2 , estoy seguro de que obtendré una mejora significativa en el rendimiento en comparación con REST con HTTP / 1.1 , pero ¿cómo se compara esto con gRPC (HTTP / 2) ?
También soy consciente de que gRPC usa proto buffer, que es la mejor técnica de serialización binaria para la transmisión de datos estructurados en el cable. Proto buffer también ayuda a desarrollar un enfoque independiente del lenguaje. Estoy de acuerdo con eso y puedo implementar la misma función en REST usando graphQL. Pero mi preocupación es la serialización: Pregunta No. 2: Cuando HTTP / 2 implementa esta característica binaria , ¿el uso de proto buffer brinda una ventaja adicional sobre HTTP / 2?
Pregunta No. 3: En términos de transmisión, casos de uso bidireccionales , ¿cómo se compara gRPC (HTTP / 2) con (REST y HTTP / 2)?
Hay tantos blogs / videos en Internet que comparan gRPC (HTTP / 2) con (REST y HTTP / 1.1) de esta manera . Como se indicó anteriormente, me gustaría conocer las diferencias y los beneficios de comparar GRPC (HTTP / 2) y (REST con HTTP / 2).
Respuestas:
gRPC no es más rápido que REST sobre HTTP / 2 de forma predeterminada, pero le brinda las herramientas para hacerlo más rápido. Hay algunas cosas que serían difíciles o imposibles de hacer con REST.
Como dijo nfirvine, verá la mayor parte de la mejora de su rendimiento solo con el uso de Protobuf. Si bien puede usar proto con REST, está muy bien integrado con gRPC. Técnicamente, podría usar JSON con gRPC, pero la mayoría de la gente no quiere pagar el costo de rendimiento después de acostumbrarse a los protos.
fuente
library
enlace de equilibrio de cargaNo soy un experto en esto de ninguna manera y no tengo datos para respaldar nada de esto.
La "característica binaria" de la que estás hablando es la representación binaria de tramas HTTP / 2. El contenido en sí (una carga útil JSON) seguirá siendo UTF-8. Puede comprimir ese JSON y configurarlo
Content-Encoding: gzip
, como HTTP / 1.Pero gRPC también realiza compresión gzip. Entonces, realmente, estamos hablando de la diferencia entre JSON comprimido con gzip y protobufs comprimidos con gzip.
Como puede imaginar, los protobufs comprimidos deberían vencer al JSON comprimido en todos los sentidos, o de lo contrario los protobufs no han logrado su objetivo.
Además de la ubicuidad de JSON vs protobufs, el único inconveniente que puedo ver en el uso de protobufs es que necesitas el .proto para decodificarlos, digamos en una situación tcpdump.
fuente