Gran actualización del protocolo Dubbo Triple: soporte para conectar microservicios Web y back-end a través de HTTP

El protocolo Triple recientemente actualizado

En términos de selección de protocolo de microservicio, vemos que cada vez más aplicaciones están migrando del protocolo binario Dubbo2 TCP al protocolo Dubbo3 Triple (compatible con gRPC) para aprovechar al máximo el modelo de comunicación de Streaming de alta eficiencia, dúplex completo y otras capacidades de Triple; la combinación de Triple+HTTP/2 resuelve el problema de la penetración del servicio back-end, pero en la práctica de Ali y muchas empresas comunitarias, descubrimos que los microservicios basados ​​en Triple todavía tienen costos de acceso relativamente altos para los dispositivos front-end y los usuarios. necesita pasar a través de la puerta de enlace La conversión de protocolo para acceder a los servicios de triple backend (similar a la llamada de generalización anterior de Dubbo2) es muy costosa para las pruebas de desarrollo, la operación y el mantenimiento, etc.

Sobre la base de los antecedentes anteriores, hemos actualizado completamente el protocolo Triple en Dubbo3: El protocolo Triple es una especificación de protocolo de comunicación RPC basada en HTTP diseñada por Dubbo3. Es totalmente compatible con el protocolo gRPC, admite Solicitud-Respuesta, Streaming y otros modelos de comunicación, y puede ejecutarse en HTTP/1 y HTTP/2 al mismo tiempo.

Puede utilizar herramientas HTTP estándar como cURL para acceder a los servicios publicados por el protocolo Triple.

curl \
    --header "Content-Type: application/json" \
    --data '{"sentence": "Hello Dubbo."}' \
    https://host:port/org.apache.dubbo.sample.GreetService/sayHello

Basado en el protocolo Triple, puede crear fácilmente un sistema de microservicio de back-end Dubbo. Debido al diseño fácil de usar de Triple para el protocolo HTTP, los dispositivos front-end como Web, Mobile y HTTP estándar pueden acceder más fácilmente al sistema de back-end. Al mismo tiempo, Triple es totalmente compatible con el protocolo gRPC para lograr la interoperabilidad con el sistema gRPC.

El marco Dubbo proporciona implementaciones en varios idiomas del protocolo Triple, que pueden ayudarlo a crear una interfaz API HTTP compatible con navegador y gRPC: solo necesita definir un servicio de formato de búfer de protocolo estándar e implementar la lógica comercial Dubbo es responsable de ayudar a generar el código auxiliar del servidor y el código auxiliar del cliente relacionados con el idioma, y ​​conectar sin problemas todo el proceso de llamada a los sistemas Dubbo, como el enrutamiento y el descubrimiento de servicios. Para algunas versiones de lenguaje, el marco Dubbo también proporciona un modo de programación que está más en línea con las características del lenguaje, es decir, una definición de servicio y un modo de desarrollo que no está vinculado a IDL. Por ejemplo, en Dubbo Java, puede optar por usar la interfaz Java y la clase Pojo para definir los servicios de Dubbo y publicarlos como microservicios basados ​​en la comunicación del protocolo triple.

Objetivos del diseño del protocolo y escenarios aplicables

Basado en el protocolo Triple, puede lograr los siguientes objetivos:

Cuando Dubbo actúa como Cliente

Dubbo Client puede acceder al servicio de triple protocolo publicado por el servidor Dubbo (Servidor), y también puede acceder al servidor gRPC estándar.

  • Llame al servidor de gRPC estándar y envíe una solicitud cuyo tipo de contenido sea el tipo de gRPC estándar: application/grpc, application/grpc+proto y application/grpc+json
  • Llame al servidor Dubbo y envíe una solicitud cuyo tipo de contenido sea Triple: aplicación/json, aplicación/proto, aplicación/triple+envoltura

Cuando se usa Dubbo como servidor

De manera predeterminada, Dubbo Server publicará soporte para protocolos HTTP y gRPC comunes al mismo tiempo, y el protocolo Triple puede funcionar en HTTP/1 y HTTP/2 al mismo tiempo. Por lo tanto, Dubbo Server puede procesar solicitudes de protocolo triple de clientes Dubbo, solicitudes de protocolo gRPC estándar y solicitudes HTTP de cURL y navegadores. Distinguir por Tipo de contenido es:

  • Manejar solicitudes enviadas por clientes de gRPC cuyo tipo de contenido sea el tipo de gRPC estándar: application/grpc, application/grpc+proto, application/grpc+json
  • Procese la solicitud triple de tipo de contenido enviada por el cliente Dubbo: application/json, application/proto, application/grpc+wrapper
  • Manejar solicitudes con tipo de contenido triple enviadas por cURL, navegadores, etc.: application/json, application/proto, application/grpc+wrapper

escena de ejemplo

De acuerdo con la especificación gRPC, el protocolo Triple es totalmente compatible con la comunicación del tipo de contenido: protocolo application/grpc. Según este modo, Triple Client puede llamar a cualquier servidor gRPC y viceversa.

El protocolo Triple admite un formato común basado en json, lo que expone cualquier servicio al exterior, y cualquier cliente que admita el protocolo HTTP estándar (como cURL, navegador, terminal) puede iniciar llamadas directamente sin ninguna conversión de protocolo.

Triple admite la serialización de Hessian, Kryo, etc. compatibles con Java encapsulados sobre el protocolo HTTP. Desde la perspectiva de la capa de red, es un mensaje de protocolo HTTP estándar. Naturalmente, es compatible con cualquier WAF, puerta de enlace, etc. que admita el protocolo HTTP, y puede reutilizar la infraestructura de la capa de red actual.

Especificación de protocolo (Especificación)

Consulte los detalles de la especificación del protocolo triple Especificación triple [1] aquí .

Relación detallada con el protocolo gRPC

Como se mencionó anteriormente, Triple es totalmente compatible con el protocolo gRPC. Dado que gRPC proporciona oficialmente una implementación de marco de trabajo en varios idiomas, ¿por qué Dubbo lo vuelve a implementar a través de Triple? Hay dos objetivos fundamentales:

  • Primero, en términos de diseño de protocolo, Dubbo diseñó un protocolo Triple personalizado con referencia a los dos protocolos gRPC y gRPC-Web: Triple es un protocolo RPC basado en el protocolo de capa de transporte HTTP, que es totalmente compatible con gRPC y puede ejecutarse en HTTP/1 y HTTP/2.
  • En segundo lugar, el framework Dubbo sigue el concepto de diseño en línea con el posicionamiento del propio framework durante la implementación de cada lenguaje.En comparación con bibliotecas de framework como grpc-java y grpc-go, la implementación del protocolo Dubbo es más simple y pura, tratando de evitar una serie de problemas en la biblioteca oficial de gRPC.

gRPC en sí mismo es una excelente especificación de protocolo RPC, pero hay una serie de problemas en el uso real de la implementación de la biblioteca gRPC nativa, incluida la implementación compleja, la vinculación de IDL y la dificultad en la depuración. Dubbo comienza con la práctica en el diseño e implementación de protocolos, y evita bien estos problemas:

  • La implementación nativa de gRPC está limitada por la especificación de interacción HTTP/2 y no puede proporcionar métodos interactivos para navegadores y API HTTP. Para lograrlo, necesita componentes de proxy adicionales, como grpc-web, grpc-gateway, etc. En Dubbo, puede usar curl y el navegador directamente para acceder a los servicios del protocolo Triple.
  • La biblioteca oficial de gRPC es obligatoria para vincular los búferes de protocolo, y la única opción de desarrollo es usar IDL para definir y administrar los servicios, lo cual es una carga muy pesada para algunos usuarios que no tienen un fuerte atractivo multilingüe. Si bien es compatible con IDL, Dubbo proporciona métodos de desarrollo y definición de servicios específicos del lenguaje para Java, Go, etc.
  • En la etapa de desarrollo, los servicios publicados con el protocolo gRPC son muy difíciles de depurar, solo puede usar herramientas específicas de gRPC y muchas herramientas son relativamente rudimentarias e inmaduras. A partir de Dubbo3, puede usar directamente curl | jq o las herramientas de desarrollo de Chrome para depurar su servicio y pasar directamente la estructura JSON para llamar al servicio.
  • En primer lugar, la biblioteca de protocolos gRPC tiene una escala de más de 100 000 líneas de código, pero Dubbo (Go, Java, Rust, Node.js, etc.) solo tiene unas pocas miles de líneas de código para la implementación del protocolo, lo que facilita el mantenimiento del código y la resolución de problemas.
  • La biblioteca de implementación de gRPC proporcionada por Google no utiliza bibliotecas de protocolos de idiomas oficiales o de terceros, sino que elige mantener un conjunto de implementaciones por sí mismo, lo que hace que todo el mantenimiento y la expansión ecológica sean más complicados. Por ejemplo, grpc-go mantiene un conjunto de bibliotecas HTTP/2 en lugar de la biblioteca go oficial utilizada. Si bien Dubbo usa la biblioteca oficial, mantiene el mismo nivel de rendimiento en comparación con la biblioteca del protocolo http mantenida por gRPC.
  • La biblioteca gRPC solo proporciona la implementación del protocolo RPC y requiere mucho trabajo adicional para introducir capacidades de gobierno de servicios en ella. Dubbo en sí mismo es un marco de desarrollo de microservicios que no vincula protocolos, y la implementación del protocolo HTTP/2 incorporado se puede conectar mejor con las capacidades de gobierno de servicios de Dubbo.

más fácil de implementar

La implementación del marco Dubbo se centra en el propio protocolo Triple, mientras que la comunicación de red subyacente, el análisis del protocolo HTTP/2, etc. optan por confiar en aquellas bibliotecas de red que han sido probadas durante mucho tiempo. Por ejemplo, Dubbo Java se basa en Netty, mientras que Dubbo Go es la biblioteca oficial Go HTTP que se usa directamente. La implementación del protocolo Triple proporcionado por Dubbo es muy simple. En correspondencia con la implementación del componente Protocolo en Dubbo, puede descubrir la implementación del código del protocolo Dubbo en solo una tarde.

Inspección del entorno de producción a gran escala

Desde el lanzamiento de Dubbo3, el protocolo Triple se ha utilizado ampliamente en Alibaba y en muchas empresas de evaluación comparativa de la comunidad, especialmente en algunos escenarios de interconexión de proxy y puerta de enlace. Por un lado, se ha demostrado que Triple es confiable y estable a través de la práctica de producción en masa. Por otro lado, el diseño IDL simple, fácil de depurar y no vinculante de Triple también son factores importantes para su amplia aplicación.

Soporte multiprotocolo nativo

Cuando se utiliza el marco Dubbo como servidor para publicar servicios, puede admitir de forma nativa los protocolos Triple, gRPC y HTTP/1 en el mismo puerto, lo que significa que puede acceder a los servicios publicados por el servidor Dubbo de varias formas, y todos los formularios de solicitud eventualmente se reenviarán a la misma implementación de lógica comercial, lo que le brinda una mayor flexibilidad. Dubbo es totalmente compatible con el protocolo gRPC y las funciones relacionadas, que incluyen transmisión, avances, detalles de errores, etc. Si elige usar el protocolo Triple directamente en el marco de Dubbo (además, también puede elegir usar el protocolo gRPC nativo), entonces puede usar directamente el cliente Dubbo, curl, navegador, etc. para acceder a los servicios que publica. En términos de interoperabilidad con el ecosistema gRPC, cualquier cliente gRPC estándar normalmente puede acceder a los servicios Dubbo; los clientes Dubbo también pueden llamar a cualquier servicio gRPC estándar, aquí hay un ejemplo de interoperabilidad [2] El siguiente es un ejemplo del uso del cliente cURL para acceder al servicio de triple protocolo del servidor Dubbo :

curl \
    --header "Content-Type: application/json" \
    --data '{"sentence": "Hello Dubbo."}' \
    https://host:port/org.apache.dubbo.sample.GreetService/sayHello

Acceso a la gestión de servicios de ventanilla única

Todos sabemos que Dubbo tiene ricas capacidades de gobierno de microservicios, como descubrimiento de servicios, equilibrio de carga, control de tráfico, etc. Esta es también la ventaja de usar el marco Dubbo para desarrollar aplicaciones. Para usar la comunicación del protocolo gRPC bajo el sistema Dubbo, hay dos formas de lograrlo, una es introducir directamente el paquete binario lanzado oficialmente por gRPC en el marco Dubbo, y la otra es proporcionar una implementación de código fuente compatible con el protocolo gRPC de forma nativa en Dubbo. En comparación con el primer método de introducción de dependencias binarias, el marco de Dubbo admite de forma nativa el protocolo gRPC a través de la implementación del protocolo Triple integrado. La ventaja de este método es que el código fuente está completamente controlado por sí mismo, por lo que la implementación del protocolo está más integrada con el marco de Dubbo y puede conectarse de manera más flexible al sistema de gobierno de servicios de Dubbo.

Implementación multilingüe

Con base en el diseño del protocolo Triple, planeamos proporcionar implementaciones de protocolo RPC livianas para tantos idiomas como sea posible, de modo que la intercomunicación del protocolo Triple pueda cubrir completamente varias pilas de idiomas, y sea compatible con gRPC y tenga una mejor usabilidad. Al mismo tiempo, Dubbo continuará brindando capacidades integrales de gobernanza de microservicios en algunos lenguajes que se usan ampliamente en el desarrollo de microservicios (como Java, Go, etc.), lo que convierte a Dubbo en un conjunto de sistemas de desarrollo de microservicios que pueden conectarse front-end y back-end.

Actualmente, el lenguaje Dubbo Java ha completado el objetivo preliminar de la actualización del protocolo triple anterior en la versión 3.3.0-triple-SNAPSHOT, que se puede experimentar en la muestra samples/dubbo-samples-triple-unary (haga clic para leer el texto original y saltar al enlace de la muestra ) . Las implementaciones multilingües en el avance síncrono del protocolo Triple también incluyen implementaciones de back-end como Go, Node.js y Rust, e implementaciones de Javascript web-end.

lenguaje java

En la implementación de la biblioteca Dubbo Java, además del método IDL, puede usar el método de la interfaz Java para definir servicios, lo que puede reducir en gran medida el costo de usar el protocolo gRPC para muchos usuarios de Java que están familiarizados con el sistema Dubbo.

Además, el rendimiento de la implementación del protocolo de la versión Java es básicamente el mismo que el de la biblioteca grpc-java, e incluso mejor que el de grpc-java en algunos escenarios. Y todo ello basado en que la complejidad de implementación del protocolo de la versión Dubbo es mucho menor que la de la versión gRPC, ya que grpc-java mantiene una versión personalizada de la implementación del protocolo HTTP/2.

Dirección del almacén: https://github.com/apache/dubbo

Ir a la implementación del lenguaje

Dubbo Go recomienda el modo de desarrollo IDL. Para generar código auxiliar a través del complemento protoc que viene con Dubbo, solo necesita proporcionar la implementación de lógica empresarial correspondiente. Puede acceder al servicio gRPC lanzado por Dubbo Go a través de curl y el navegador. Dirección del almacén: https://github.com/apache/dubbo-go/

Óxido

Dubbo Rust ha implementado completamente la parte de compatibilidad del protocolo gRPC y actualmente promueve la compatibilidad con llamadas RPC unarias en HTTP/1 y otros modos.

Dirección del almacén: https://github.com/apache/dubbo-rust/

Nodo.js

El lenguaje Node.js ha implementado completamente la parte de compatibilidad del protocolo gRPC y actualmente promueve la compatibilidad con llamadas RPC unarias en HTTP/1 y otros modos.

Dirección del almacén: https://github.com/apache/dubbo-js/

Web

A través de la biblioteca de cliente de Javascript proporcionada por Dubbo, puede escribir la página de inicio que se ejecuta en el navegador e iniciar directamente una llamada de solicitud al servicio de Dubbo de back-end en el lado del navegador. Dirección del almacén: https://github.com/apache/dubbo-js/

Enlaces relacionados:

[1] Especificación triple

https://cn.dubbo.apache.org/zh-cn/overview/reference/protocols/triple-spec/

[2] Ejemplo de interoperabilidad

https://github.com/apache/dubbo-samples/tree/triple-protocol-sample-0719/2-advanced/dubbo-samples-triple-grpc

Autor: Liu Jun

¡Haga clic para probar los productos en la nube de forma gratuita ahora para comenzar el viaje práctico en la nube!

Enlace original

Este artículo es el contenido original de Alibaba Cloud y no se puede reproducir sin permiso.

Los 8 lenguajes de programación más demandados en 2023: Fuerte PHP, baja demanda de C/C++ Notas del programador CherryTree 1.0.0.0 lanzado Proyecto CentOS declarado "abierto a todos" MySQL 8.1 y MySQL 8.0.34 lanzados oficialmente GPT-4 ¿cada vez más estúpido? La tasa de precisión cayó del 97,6 % al 2,4 %.Microsoft : mayores esfuerzos para usar Rust Meta en Windows 11 Acercar: lanzar el modelo de lenguaje grande de código abierto Llama 2, que es gratuito para uso comercial.El padre de C# y TypeScript anunció el último proyecto de código abierto: ¿TypeChat no quiere mover ladrillos, pero también quiere cumplir con los requisitos? Tal vez este proyecto de código abierto de GitHub de 5k estrellas pueda ayudar: el 25.° aniversario de MetaGPT Wireshark, el analizador de paquetes de red de código abierto más poderoso
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/yunqi/blog/10089939
Recomendado
Clasificación