¿Quieres entrar en una gran fábrica? Dubbo ordinario 9 pregunta ya sabes

Autor | Tecnología Miao Miao

Fuente | Tecnología Miao Miao (ID: kajimiumiu)

Imagen de la cabeza | Descarga de CSDN de Oriental IC

Dubbo en sí no es complicado, y los documentos oficiales son muy claros y detallados. Los problemas de Dubbo en las entrevistas generalmente no son muchos. Desde las capas hasta los principios de funcionamiento, las estrategias de equilibrio de carga, los mecanismos de tolerancia a fallas y los mecanismos SPI son básicamente los mismos. El más grande La pregunta es generalmente cómo diseñar un marco RPC, pero si comprende el principio de funcionamiento en capas, esta pregunta es en realidad equivalente a una respuesta, ¿verdad?

¿Hablar de las capas de Dubbo? 

A gran escala, dubbo se divide en tres capas. La capa de lógica empresarial es nuestra para proporcionar interfaces e implementaciones, así como cierta información de configuración. La capa RPC es la capa central de las llamadas RPC reales, que encapsula todo el proceso y la carga de llamadas RPC. El equilibrio, la tolerancia a fallas de clúster, el proxy y la comunicación remota son la encapsulación del protocolo de transmisión de red y la conversión de datos.

Dividido en un nivel más detallado, es el modelo de 10 capas en la figura. Toda la capa depende de arriba a abajo. Excepto por la lógica empresarial, las otras capas son todos mecanismos SPI.

¿Puedes decirme cómo funciona Dubbo? 

  • Cuando se inicia el servicio, el proveedor y el consumidor se conectan al registro de registro de acuerdo con la información de configuración y se registran y suscriben al registro respectivamente.

  • Register devuelve la información del proveedor al consumidor de acuerdo con la relación de suscripción del servicio, y el consumidor almacena en caché la información del proveedor localmente. Si la información cambia, el consumidor recibirá un empujón desde el registro.

  • El consumidor genera un objeto proxy, selecciona un proveedor de acuerdo con la estrategia de equilibrio de carga y registra el número de llamadas de interfaz y la información de tiempo en el monitor con regularidad.

  • Después de obtener el objeto proxy, el consumidor inicia llamadas de interfaz a través del objeto proxy.

  • Una vez que el proveedor recibe la solicitud, deserializa los datos y luego usa el proxy para llamar a la interfaz específica para lograr

¿Por qué comunicarse a través de proxy? 

El propósito principal es implementar un proxy transparente de la interfaz, encapsular los detalles de la llamada, para que los usuarios puedan llamar a métodos remotos como métodos locales, y también implementar algunas otras estrategias a través del proxy, como:

1. Estrategia de equilibrio de carga denominada

2. Mecanismo de tolerancia a fallos, tiempo de espera, degradación y fallos de llamada

3. Realice algunas operaciones de filtrado, como agregar caché y datos simulados

4. Estadísticas de datos de llamadas de interfaz

¿Hablar del proceso de exposición al servicio? 

  1. Cuando se inicia el contenedor, las etiquetas se analizan mediante ServiceConfig y se crea un solucionador de etiquetas dubbo para analizar las etiquetas dubbo. Una vez creado el contenedor, se activa la devolución de llamada del evento ContextRefreshEvent para comenzar a exponer el servicio.

  2. Invoker se obtiene a través de ProxyFactory, que contiene la información del objeto y la dirección URL específica del método a ejecutar.

  3. Luego, a través de la implementación de DubboProtocol, el invocador empaquetado se convierte en un exportador y luego se inicia el servidor servidor para monitorear el puerto

  4. Finalmente, RegistryProtocol guarda la relación de mapeo entre la dirección URL y el invocador, y se registra en el centro de servicio al mismo tiempo.

¿Hablar sobre el proceso de referencia del servicio? 


Una vez que se expone el servicio, el cliente debe consultar el servicio y luego el proceso de invocación.

  1. Primero, el cliente se suscribe al servicio desde el registro de acuerdo con la información del archivo de configuración

  2. Después de eso, DubboProtocol se conecta al servidor servidor de acuerdo con la dirección del proveedor y la información de interfaz obtenida de la suscripción, abre el cliente cliente y luego crea el invocador.

  3. Una vez creado el invocador, se genera un objeto proxy para la interfaz de servicio a través del invocador. Este objeto proxy se utiliza para llamar de forma remota al proveedor y se completa la referencia del servicio.

¿Cuáles son las estrategias de equilibrio de carga? 

  1. Ponderado aleatorio: supongamos que tenemos un conjunto de servidores = [A, B, C], sus pesos correspondientes son pesos = [5, 3, 2], y el peso total es 10. Ahora coloque estos valores de peso en valores de coordenadas unidimensionales, [0, 5) el intervalo pertenece al servidor A, [5, 8) el intervalo pertenece al servidor B y [8, 10) el intervalo pertenece al servidor C. A continuación, use un generador de números aleatorios para generar un número aleatorio en el rango [0, 10) y luego calcule en qué intervalo caerá este número aleatorio.

  2. Número mínimo activo: cada proveedor de servicios corresponde a un número activo activo Inicialmente, el número activo de todos los proveedores de servicios es 0. Cada vez que se recibe una solicitud, el número de activos aumenta en 1 y, una vez que se completa la solicitud, el número de activos se reduce en 1. Después de que el servicio ha estado funcionando durante un período de tiempo, los proveedores de servicios con buen rendimiento pueden procesar las solicitudes más rápido, por lo que la cantidad de activos disminuye más rápido. En este momento, dichos proveedores de servicios pueden recibir nuevas solicitudes de servicio primero.

  3. Hash consistente: a través del algoritmo de hash, genere un hash a partir de los nodos aleatorios y de invocación del proveedor, y proyecte este hash en el círculo de [0, 2 ^ 32-1]. Al realizar la consulta, realice md5 y luego hash de acuerdo con la clave para obtener El valor del primer nodo es mayor o igual que el invocador del hash actual.

Imagen del funcionario de dubbo
  1. Round-robin ponderado: por ejemplo, la relación de peso de los servidores A, B y C es 5: 2: 1, luego, de 8 solicitudes, el servidor A recibirá 5 de ellas y el servidor B recibirá 2 de ellas. C recibe una de estas solicitudes.

¿Cuáles son los métodos de tolerancia a fallas del clúster? 

  1. Conmutación automática por falla del clúster de conmutación por error: el esquema tolerante a fallas predeterminado de Dubbo cambiará automáticamente a otros nodos disponibles cuando la llamada falle. El número específico de reintentos y el intervalo se puede configurar cuando se hace referencia al servicio. El número predeterminado de reintentos es 1, lo que significa que solo se llama una vez.

  2. El clúster de conmutación por error falla rápidamente: cuando la llamada falla, se registra la información del registro y la llamada, y luego los resultados vacíos se devuelven al consumidor y la llamada fallida se reintenta cada 5 segundos mediante una tarea cronometrada

  3. Recuperación automática de fallas de clúster Failfast: solo se llamará una vez y se lanzará una excepción inmediatamente después de la falla

  4. Failsafe Cluster Failure safety: se produce una excepción en la llamada, el registro no se lanza y se devuelve un resultado vacío

  5. Forking Cluster llama a varios proveedores de servicios en paralelo: se crean varios subprocesos a través del grupo de subprocesos, se llaman a varios proveedores al mismo tiempo y los resultados se guardan en la cola de bloqueo. Siempre que un proveedor devuelva los resultados correctamente, los resultados se devolverán inmediatamente

  6. Modo de difusión del cluster de difusión: llame a cada proveedor uno por uno, si uno de ellos informa un error, se lanzará una excepción después de que finalice la llamada de bucle.

¿Entiendes el mecanismo Dubbo SPI? 

El nombre completo de SPI es Service Provider Interface, que es un mecanismo de descubrimiento de servicios. La esencia es configurar el nombre completo de la clase de implementación de la interfaz en un archivo, y el cargador de servicios lee el archivo de configuración y carga la clase de implementación, para que pueda estar dinámicamente en tiempo de ejecución. Reemplace la clase de implementación de la interfaz.

Dubbo también implementa muchas funciones extendidas a través del mecanismo SPI, y dubbo no usa el mecanismo SPI nativo de Java, pero se ha mejorado y mejorado en alineación.

SPI tiene muchas aplicaciones en dubbo, incluida la extensión de protocolo, la extensión de clúster, la extensión de enrutamiento, la extensión de serialización, etc.

El uso se puede configurar en el directorio META-INF / dubbo:

key=com.xxx.value

Luego use el ExtensionLoader de Dubbo para cargar la clase de implementación correspondiente de acuerdo con la clave especificada. La ventaja de esto es que se puede cargar bajo demanda y el rendimiento está optimizado.

¿Cómo diseñar si desea implementar un marco RPC? 

  1. Primero, se necesita un centro de registro de servicios para que los consumidores y proveedores puedan registrarse y suscribirse a los servicios.

  2. Se necesita un mecanismo de equilibrio de carga para determinar cómo el consumidor llama al cliente, que por supuesto también incluye tolerancia a fallas y mecanismos de reintento.

  3. Se requiere un protocolo de comunicación y un marco de herramientas, como la comunicación a través de protocolos http o rmi, y luego elegir qué marco y herramientas usar para la comunicación de acuerdo con el protocolo. Por supuesto, se debe considerar la serialización de la transmisión de datos

  4. Además de los elementos básicos, algunas páginas de supervisión, administración de configuración y registros son consideraciones de optimización adicionales.

Entonces, en esencia, siempre que esté familiarizado con uno o dos marcos RPC, es fácil entender cómo podemos implementar un marco RPC nosotros mismos.


更多精彩推荐
☞感动!盲人计算机科学家研发语音浏览器,致力科技改善盲人生活
☞1024 程序员节重要议程曝光,开源技术英雄会聊开源“真心话”
☞蓝色版苹果iPhone 12开箱上手视频流出;谷歌回应司法部反垄断诉讼:存在严重漏洞;Git 2.29 稳定版发布|极客头条
☞我是一个平平无奇的AI神经元
☞对话阿里云:开源与自研如何共处?
☞10 月中旬的 Medalla 测试网失常:如何开始,将如何结束?
点分享点点赞点在看

Supongo que te gusta

Origin blog.csdn.net/csdnsevenn/article/details/109212859
Recomendado
Clasificación