Fui a Alibaba para una entrevista con confianza, pero no esperaba que Ryo estuviera en DUboo, y resumí la entrevista cuidadosamente por la noche.

Preste atención, no se pierda; ¡continúe actualizando las tecnologías e información relacionadas con Java! ! !

 

Temas de entrevistas de Dubbo

1. La diferencia entre Dubbo y DubboX

Dubbox y Dubbo son esencialmente lo mismo. El significado del nombre es solo una extensión de Dubbo. Las siguientes funciones expandidas también son consideraciones importantes para elegir Dubbox.

  • Admite llamadas remotas de estilo REST (HTTP + JSON / XML);
  • Apoyar la implementación de serialización Java eficiente basada en Kryo y FST;
  • Admite la serialización JSON basada en Jackson;
  • Admite el sistema de comunicación remota HTTP basado en Tomcat integrado;
  • Actualice Spring a 3.x;
  • Actualice el cliente ZooKeeper;
  • Admite la configuración de Dubbo basada completamente en código Java;

2. Zookeeper en Dubbo sirve como registro. Si todos los grupos de registro están inactivos, ¿pueden los editores y suscriptores comunicarse?

Sí, cuando se inicia Dubbo, los consumidores extraerán datos como la interfaz de dirección del productor registrado de zk y los almacenarán localmente. Cada vez que se llama, se llama de acuerdo con la dirección almacenada localmente

  • El centro de registro es un clúster peer-to-peer, después de que uno deja de funcionar, automáticamente cambia a otro
  • El registro está inactivo, los proveedores de servicios y los consumidores aún pueden comunicarse a través de la caché local
  • El proveedor de servicios es apátrida, después de que alguno esté inactivo, no afectará el uso
  • Todos los proveedores de servicios están inactivos, los consumidores de servicios no estarán disponibles y se volverán a conectar indefinidamente y esperarán a que el servidor se recupere.

3. ¿Cuáles son los roles en Dubbo?

①. Registro

Registry. Es una plataforma para la publicación y suscripción de servicios, se utiliza para reemplazar el bus de servicio ESB en el marco SOA.

  • Publicar: Una vez finalizado el desarrollo del código del servidor, se publicará la información del servicio y se hará público un servicio.
  • Suscripción: El programa cliente descarga el contenido del servicio desde el centro de registro Este proceso es la suscripción.

Al suscribirse al servicio, toda la información del servicio publicado se descargará al cliente de una vez.

El cliente también puede personalizar y modificar parte de la información de configuración del servicio, tales como: duración del tiempo de espera, reintentos de llamadas, etc.

②. Consumidor

El consumidor del servicio es el cliente del servicio.

Los consumidores deben utilizar la tecnología Dubbo para desarrollar parte del código, básicamente es una definición de archivo de configuración.

③. Proveedor

El proveedor del servicio es el servidor.

El servidor debe utilizar la tecnología Dubbo para desarrollar parte del código, principalmente con archivos de configuración.

④. Envase

Contenedor: El servidor de tecnología Dubbo (Proveedor), cuando inicia la ejecución, debe confiar en que el contenedor se inicie normalmente.

La dependencia predeterminada es el contenedor Spring, y la tecnología Dubbo no se puede separar del marco Spring.

En la versión 2.5.3 de Dubbo, la dependencia predeterminada es la tecnología de la versión Spring 2.5.Se pueden usar Spring 4.5 o versiones inferiores.

En Dubbo de la versión 2.5.7, la dependencia predeterminada es la tecnología de la versión Spring 4.3.10 Puede elegir cualquier versión de Spring.

⑤. Monitor

Centro de Monitoreo Es un proyecto jar proporcionado por Dubbo.

La función principal es monitorear los datos de uso del servidor (Proveedor) y del consumidor (Consumidor). Por ejemplo: qué es el servidor, cuántas interfaces, cuántos métodos, el número de llamadas, información de presión, etc. Cuántos clientes hay, qué servicios se han llamado Fin, cuantas veces se han llamado etc.

4. ¿Cómo resuelve Dubbo el mecanismo de seguridad?

Dubbo usa Token para evitar que los usuarios eludan el centro de registro para conectarse directamente y luego administrar la autorización en el centro de registro. Dubbo también proporciona servicio de listas blancas y negras para controlar las personas que llaman permitidas por el servicio.

5. ¿Proceso de ejecución de Dubbo?

  1. Inicio: cuando se inicia el contenedor Spring, el proveedor de Dubbo se inicia automáticamente
  2. Registro: El proveedor de Dubbo irá automáticamente al centro de registro para registrar el contenido después del inicio. El contenido registrado incluye:
    2.1 IP del
    proveedor 2.2 Puerto del proveedor.
    2.3 Lista del proveedor de interfaces proporcionadas externamente. Qué métodos. Qué clases de interfaz
    2.4 Versión de Dubbo.
    2.5 El acuerdo de acceso al proveedor.
  3. Suscripción: Suscripción Cuando el Consumidor inicia, automáticamente pasa al Registro para obtener la información del servicio registrado.
  4. Notificar: Notificación.Cuando cambia la información del Proveedor, el Registro enviará notificaciones automáticamente al Consumidor.
  5. Invoke: Invoke. El consumidor llama al método en Provider
    5.1 Solicitud síncrona. Consume cierto rendimiento. Pero debe ser una solicitud síncrona porque necesita recibir el resultado de llamar al método.
  6. Recuento: Número de veces. Cada 2 minutos, Provocador y Consumidor envían automáticamente el número de visitas al Monitor. El Monitor realiza estadísticas.

6. ¿Qué protocolos admite Dubbo?

①. Acuerdo de Dubbo (Acuerdo de recomendación oficial)

  • Ventajas: use NIO para reutilizar una sola conexión larga y use el grupo de subprocesos para procesar solicitudes simultáneamente, reducir el protocolo de enlace y aumentar la eficiencia de la concurrencia, y tener un mejor rendimiento (recomendado)
  • Desventajas: pueden ocurrir problemas al cargar archivos grandes (no use la carga de archivos Dubbo)

②. Protocolo RMI (Invocación de método remoto)

  • Ventajas: capacidades propias de JDK. Interoperable con RMI nativo, basado en protocolo TCP
  • Desventajas: ocasionalmente falla la conexión.

③. Acuerdo de Hesse

  • Ventajas: Interoperable con Hessian nativo, basado en protocolo HTTP
  • Desventajas: necesita soporte Hessian.jar, la conexión Http corta es costosa

7. ¿Cuáles son los centros de registro admitidos por Dubbo?

①. Zookeeper (recomendación oficial)

  • Ventajas: Soporte distribuido Muchos productos periféricos.
  • Desventajas: Limitado por la estabilidad del software Zookeeper. Software auxiliar distribuido especial Zookeeper, la estabilidad es mejor

②. Multidifusión

  • Ventajas: Descentralización, no es necesario instalar software por separado.
  • Desventajas: el proveedor, el consumidor y el registro no pueden cruzar salas de computadoras (enrutamiento)

③. Redis

  • Ventajas: grupos de soporte, alto rendimiento
  • Desventajas: es necesaria la sincronización de la hora del servidor, de lo contrario, puede producirse un fallo del clúster.

④. Sencillo

  • Ventajas: servicio RPC estándar. Sin problemas de compatibilidad
  • Desventajas: no admite clústeres.

8. ¿Estrategia de equilibrio de carga del servicio Dubbo?

①. l Balance de carga aleatorio

Aleatorio, establezca la probabilidad aleatoria por peso. La probabilidad de colisión en una sección transversal es alta, pero cuanto mayor es la cantidad de llamadas, más uniforme es la distribución y más uniforme se usa el peso de acuerdo con la probabilidad, lo que es beneficioso para ajustar dinámicamente el peso del proveedor. (El peso se puede configurar en la consola de control Dubbo)

②. l RoundRobin LoadBalance

Round robin, la proporción de round robin se establece de acuerdo con el peso después de la convención. Existe un problema de acumulación de solicitudes de proveedores lentos. Por ejemplo, la segunda máquina es lenta pero no se cuelga. Cuando la solicitud se transfiere a la segunda máquina, se bloquea allí. Con el tiempo, todas las solicitudes se bloquean en la segunda máquina.

③. l Equilibrio de carga menos activo

El número mínimo de llamadas activas, el mismo número activo es aleatorio, el número activo se refiere a la diferencia entre los recuentos antes y después de la llamada. El proveedor más lento recibe menos solicitudes, porque cuanto más lento el proveedor tendrá una mayor diferencia en los recuentos antes y después de la llamada.

④. l ConsistentHash LoadBalance

Hash consistente, las solicitudes con los mismos parámetros siempre se envían al mismo proveedor. Cuando un determinado proveedor cuelga, la solicitud enviada originalmente a ese proveedor se extenderá a otros proveedores basados ​​en el nodo virtual sin causar cambios drásticos. Por defecto, solo el primer parámetro Hash, si desea modificarlo, configure

9. ¿Cuáles son las configuraciones principales de Dubbo? ¿Qué protocolo recomienda Dubbo?

核心 配置 有 dubbo: servicio / dubbo: referencia / dubbo: protocolo / dubbo: registro / dubbo: aplicación / dubbo: proveedor / dubbo: consumidor / dubbo: método /

El protocolo Dubbo se utiliza por defecto.

10. La diferencia entre el centro de registro de dubbo y la conexión directa

En el entorno de desarrollo y prueba, a menudo es necesario omitir el registro y probar únicamente a los proveedores de servicios designados. En este momento, es posible que se requiera una conexión directa punto a punto o una conexión directa punto a punto. La interfaz de servicio se utilizará como unidad y se ignorará la lista de proveedores del registro. El registro, que registra y descubre servicios dinámicamente, hace que la ubicación del servicio sea transparente y logra un equilibrio suave de carga y una conmutación por error al obtener la lista de direcciones del proveedor de servicios en el lado del consumidor, y el registro devuelve la lista de direcciones del proveedor de servicios al consumidor, si hay cambios. , El registro enviará los datos modificados a los consumidores en función de la conexión larga. Los consumidores de servicios, de la lista de direcciones de proveedores, según el algoritmo de equilibrio de carga suave, seleccionan un proveedor para llamar y, si la llamada falla, seleccionan otra llamada. El registro es responsable del registro y la búsqueda de direcciones de servicios, lo que equivale a un servicio de directorio. Los proveedores de servicios y los consumidores solo interactúan con el registro al inicio. El registro no reenvía solicitudes. Los consumidores de servicios obtienen la lista de direcciones de proveedores de servicios del registro, y Según el algoritmo de carga, se llama directamente al proveedor, el registro, el proveedor de servicios y el consumidor del servicio son conexiones persistentes, excepto el centro de monitoreo. El registro percibe la existencia del proveedor de servicios a través de la conexión persistente, y el proveedor de servicios está inactivo y registrado El centro presionará inmediatamente el evento para notificar al consumidor que el registro y el centro de monitoreo están inactivos, y no afectará a los proveedores y consumidores que ya están funcionando. El consumidor almacena en caché la lista de proveedores localmente. El registro y el centro de monitoreo son opcionales. Consumo del servicio La persona puede conectarse directamente con el proveedor de servicios.

11. Protocolo de comunicación Dubbo ¿Por qué el protocolo Dubbo no puede transmitir paquetes grandes?

Debido a que el protocolo Dubbo usa una única conexión larga, si el tamaño del paquete de cada solicitud es de 500 KByte, asumiendo que la red es una tarjeta de red gigabit (1024 Mbit = 128 MByte), el valor máximo de cada conexión es de 7 MByte (diferentes entornos pueden ser diferentes, como referencia),

  • El TPS máximo (transacciones por segundo) de un único proveedor de servicios es: 128 MByte / 500 KByte = 262.
  • El TPS máximo (transacciones procesadas por segundo) para que un solo consumidor llame a un solo proveedor de servicios es: 7MByte / 500KByte = 14.

Si es aceptable, considere usarlo, de lo contrario, la red se convertirá en un cuello de botella.

12. Protocolo de comunicación Dubbo ¿Por qué el protocolo Dubbo requiere más consumidores que proveedores?

Debido a que el protocolo Dubbo usa una sola conexión larga, asumiendo que la red es una tarjeta de red gigabit (1024Mbit = 128MByte), de acuerdo con los datos de la experiencia de prueba, cada conexión solo puede llenar hasta 7MByte (diferentes entornos pueden ser diferentes, como referencia), teóricamente 1 servicio El proveedor necesita 20 consumidores de servicios para completar la tarjeta de red.

13. Protocolo de comunicación Dubbo ¿Por qué el protocolo Dubbo adopta una conexión larga única asíncrona?

Debido a que el estado actual del servicio es principalmente que hay pocos proveedores de servicios, generalmente solo unas pocas máquinas, y muchos consumidores del servicio, es posible que todo el sitio web esté accediendo al servicio. Por ejemplo, el proveedor de Morgan solo tiene 6 proveedores, pero hay cientos de consumidores. Hay 150 millones de llamadas por día. Si se utiliza el servicio de Hessian convencional, el proveedor de servicios se abruma fácilmente. A través de una sola conexión, se garantiza que un solo consumidor no aplastará al proveedor, las conexiones largas y reducirá la verificación del protocolo de enlace de la conexión. Y use E / S asíncrona, reutilice el grupo de subprocesos para evitar problemas de C10K.

14. Protocolo de comunicación Dubbo Alcance del protocolo Dubbo y escenarios de aplicación

①. Acuerdo de Dubbo

  • Ámbito de aplicación: los paquetes de datos de parámetros entrantes y salientes son pequeños (se recomienda que sean menos de 100 K), hay más consumidores que proveedores y un solo consumidor no puede llenar los proveedores. Trate de no utilizar el protocolo dubbo para transferir archivos grandes o cadenas grandes.
  • Escenarios aplicables: llame a métodos de servicio remoto convencionales

Complemento del acuerdo dubbo:

  • Número de conexiones: conexión única
  • Modo de conexión: conexión larga
  • Protocolo de transmisión: TCP
  • Método de transmisión: transmisión asíncrona NIO
  • Serialización: serialización binaria hessiana

②. Protocolo RMI

El protocolo RMI se implementa usando el estándar JDK Java.rmi. *, Usando bloqueo de conexiones cortas y serialización estándar JDK, y el protocolo estándar de llamadas remotas Java.

  • Número de conexiones: múltiples conexiones
  • Modo de conexión: conexión corta
  • Protocolo de transmisión: TCP
  • Método de transmisión: transmisión síncrona
  • Serialización: serialización binaria estándar de Java
  • Ámbito de aplicación: los tamaños de paquetes de datos de parámetros entrantes y salientes se mezclan, el número de consumidores y proveedores es similar y los archivos se pueden transferir.
  • Escenarios aplicables: llamadas al método de servicio remoto convencional, interoperabilidad con servicios RMI nativos

③. Acuerdo de Hesse

El protocolo Hessian se usa para integrar los servicios de Hessian. La capa inferior de Hessian usa la comunicación Http y usa Servlet para exponer los servicios. Dubbo incrusta Jetty como servidor de forma predeterminada; se basa en el protocolo de llamada remota de Hessian.

  • Número de conexiones: múltiples conexiones
  • Modo de conexión: conexión corta
  • Protocolo de transmisión: HTTP
  • Método de transmisión: transmisión síncrona
  • Serialización: serialización binaria hessiana
  • Ámbito de aplicación: los paquetes de datos de parámetros entrantes y salientes son más grandes, el número de proveedores es mayor que el de consumidores, y los proveedores están bajo mayor presión y los archivos se pueden transferir.
  • Escenarios aplicables: transferencia de páginas, transferencia de archivos o interoperabilidad con servicios nativos de arpillera

④. http

Implementado por Spring's HttpInvoker; protocolo de invocación remota basado en formulario Http.

  • Número de conexiones: múltiples conexiones
  • Modo de conexión: conexión corta
  • Protocolo de transmisión: HTTP
  • Método de transmisión: transmisión síncrona
  • Serialización: serialización de formularios (JSON)
  • Ámbito de aplicación: los paquetes de datos de parámetros entrantes y salientes tienen tamaños mixtos. Hay más proveedores que consumidores. Se pueden ver en un navegador. Los parámetros se pueden pasar a través de formularios o URL. Actualmente, no se admite la carga de archivos.
  • Escenarios aplicables: servicios que las aplicaciones y el navegador JS deben utilizar al mismo tiempo.

⑤. Servicio web

Implementación de Frontend-simple y Transports-http basado en CXF; protocolo de llamada remota basado en WebService.

  • Número de conexiones: múltiples conexiones
  • Modo de conexión: conexión corta
  • Protocolo de transmisión: HTTP
  • Método de transmisión: transmisión síncrona
  • Serialización: serialización de texto SOAP
  • Escenarios aplicables: integración del sistema, llamada en varios idiomas.

⑥. Thrif

Thrift es un marco RPC donado por Facebook a Apache. El protocolo de ahorro actual compatible con dubbo es una extensión del protocolo de ahorro nativo. Se agrega información adicional de encabezado al protocolo nativo, como el nombre del servicio, el número mágico, etc.

 

¡Este es el final de este artículo sobre!

 

Las respuestas a las preguntas de la entrevista anteriores están organizadas en notas de documentos. También clasifiqué algunos materiales de la entrevista y las últimas preguntas de la entrevista recopiladas por algunas grandes empresas en 2020 (todo organizado en documentos, una pequeña parte de las capturas de pantalla), si es necesario, puede  hacer clic para ingresar para ver los materiales .

 

¡Presta atención, no te pierdas! Si este artículo es útil para ti, ¡no olvides dar me gusta y apoyar!

Supongo que te gusta

Origin blog.csdn.net/SQY0809/article/details/108710247
Recomendado
Clasificación