Perfectamente precioso! Alibaba ¿Por qué no hacer el descubrimiento de servicios ZooKeeper?

Autor: Yu-kun

Fuente: yq.aliyun.com/articles/601745 SMC = 20140722.184.2.173?

De pie junto intersección, de vuelta vistazo a la historia de los perdidos, a menudo muy interesante, ya que inadvertidamente elevamos idea loca, por ejemplo, si algo sucedió a principios de año, y otra cosa que no ha sucedido va a pasar? Como heredero de la corona del archiduque Fernando años de Austria-Hungría a la pareja si no están apasionados tiro joven serbio Princip va a pasar, pero al año deben montículo carretera no es lo que sucederá después de Niu Jiacun?

A finales de 2008, Taobao abierta llamada "piedra de color" proyecto de remodelación de interiores, que más tarde se convirtió en Taobao como un servicio orientado distribuido tomar el camino de la auto-desarrollo de, fuera del comienzo del sistema de middleware de Internet, el servicio ConfigServer registro de Taobao nacido en el mismo año.

Alrededor de 2008, Yahoo era una vez que el gigante de Internet comenzó a predicar sus propios productos de grandes volúmenes de datos distribuidos coordinación ZooKeeper en público, en este documento de referencia del producto en rechoncha y Paxos de Google publicada.

Noviembre de 2010, ZooKeeper de Apache Hadoop desarrollo subproyecto del proyecto de nivel superior de Apache, anunció formalmente ZooKeeper convierta en un nivel industrial de madurar y producto estable.

En 2011, Alibaba código abierto Dubbo, con el fin de mejor fuente abierta, lo que necesita para relación cáscara con los sistemas internos Ali, Dubbo para apoyar la ZooKeeper de código abierto como su registro, y más tarde en casa, en el partido de los esfuerzos de la industria para la práctica, Dubbo + ZooKeeper de un esquema típico servicio como un centro de registro ZOOKEEPER logros de la fama.

2015 dobles 11, de servicios internos ConfigServer casi ocho años después, el Alibaba interno "tamaño de las porciones" súper millones, así como la promoción de los "miles de millas de distancia," la estrategia de recuperación de desastres de tecnología IDC, promover conjuntamente la Alibaba interna abrió ConfigServer ConfigServer 2,0 a 3,0 arquitectura ruta de actualización.

Tiempo para el año 2018, de pie en la intersección de 10 años, la cantidad de personas están dispuestas a perseguir a la siempre cambiante concepto de la tecnología moderna de tiempo, un poco más lentamente, mirando cuidadosamente en el descubrimiento de servicios en esta zona, el número de personas pensaron o pensaban en una problema:

descubrimiento de servicios, ZooKeeper lo que realmente es la mejor opción?

Y la espalda mirada a la historia, sino que también de vez en cuando mito, encontramos en la escena en el servicio, si el año de nacimiento de ZooKeeper qué va a pasar un poco antes de lo que ConfigServer registro del HSF?

No vamos a volver loco y comenzar con los servicios de renovación y reparación ZooKeeper ZOOKEEPER para adaptarse a las necesidades de la escena y desvíos Alibaba?

Sin embargo, de pie sobre los hombros de nuestros predecesores y hoy, tenemos nunca tan fuerte hoy en día reconocen que, en el campo de descubrimiento de servicios, ZooKeeper simplemente no puede ser la mejor opción, ya que estos años han estado con nosotros, y Eureka el artículo "Eureka! ¿por qué no se debe utilizar para el descubrimiento ZooKeeper servicio" como una firma que describe por qué no se debe hacer con el descubrimiento de servicios ZooKeeper!

Mi Dao no solo continuar.

Registro de análisis de las necesidades y las consideraciones de diseño críticas

A continuación, volvamos a la demanda de análisis de descubrimiento de servicios, combinada con la práctica Ali Baba en la escena clave, uno por uno el análisis, dijo ZooKeeper para discutir por qué el registro no es la solución más adecuada.

Registro es un CP o el sistema de AP?

PAC y la teoría BASE creen que los lectores ya están familiarizados, se ha convertido en uno de los principios claves de los sistemas distribuidos y aplicaciones de Internet construidas en esta teoría no va a guiar, vamos directamente al centro de datos de registro necesita consistencia y disponibilidad análisis:

  • Los datos de análisis de requisitos de consistencia

La función más esencial del registro puede ser visto como una función de consulta Si = F(service-name)a service-namelos parámetros de consulta service-namede servicios a disposición de los correspondientes endpoints (ip:port)la lista para el valor de retorno.

Nota: El texto se abrevia como SVC servicio.

Echemos un vistazo a los datos de llave de endpoints (ip:port)impacto causado por la inconsistencia, que las consecuencias de NAC por C no se cumple:

Como se muestra arriba, si un nodo 10 se despliega svcB (copias / réplica), si dos consultas para el mismo nombre de servicio svcB, nodo 2 devuelve el llamador de SVCA datos inconsistentes, por ejemplo: S1 = {ip1 , IP2, IP3 ..., iP9}, S2 = {IP2, IP3, .... IP10}, entonces el impacto de esta inconsistencia traer qué? Estoy seguro de que ya lo vi, svcB fluya de cada nodo será un poco irregular.

IP1 e IP10 8 con relación a otros nodos {IP2 ... iP9}, solicita a fluir un poco más pequeña, pero está claro que en un sistema distribuido, incluso para el despliegue de los servicios, ya que el tiempo de llegada de la solicitud, el estado del hardware, estado de los ganglios de la planificación del sistema operativo, y otra GC máquina virtual, cualquier punto en el tiempo, tales como el despliegue de estos no pueden ser exactamente lo mismo, pero no coincida con la situación del tráfico, siempre y cuando el registro en los compromisos de SLA de tiempo (por ejemplo, en 1 s) datos convergerá a un estado coherente (es decir, para cumplir con el acuerdo final), el tráfico será pronto converger en la significación estadística, por lo que el registro de modelo de diseño consistencia eventual práctica perfectamente aceptable en la producción.

  • tolerancia de partición y los requisitos de disponibilidad análisis

A continuación nos fijamos en la partición de red (Red de reparto) impacto del registro no está disponible la llamada al servicio en el caso, que no cumple con el impacto de la PAC A.

Considere un desastre habitación 5 ZooKeeper configuración de despliegue nodo típica de tres (es decir, 2-2-1 configuración), como se muestra a continuación:

Cuando el cuarto aparece 3 partición de red (Red de particionado), que la habitación 3 en la red se ha convertido en una isla, sabemos que aunque el servicio en general ZooKeeper está disponible, pero el nodo ZK5 no es modificable ya que no en contacto con el líder.

En otras palabras, esta vez el servicio de habitaciones aplicación svcB 3 no es nuevo despliegue, reinicio, la expansión o contracción de la capacidad, pero de pie en la perspectiva de la red y de servicio a ver, aunque la habitación SVCA 3 no puede ser llamada la sala de máquinas y sala de máquinas 2 1 la svcB, pero la red entre la sala de svcB 3, obviamente, está bien, ah, ¿por qué no me llaman a esto el servicio de habitaciones?

Ahora, debido a su registro para asegurar que los datos del cerebro consistencia división (C) en el (P) y dar a disponibilidad, no puede ser llevado a la aparición de las llamadas entre el mismo servicio a la habitación, que absolutamente no está permitido! Se puede decir, en la práctica, el registro por cualquier motivo no puede ser destruido en sí conectividad entre el servicio en sí, que es el hierro registros de abogados deben ser diseñados para seguir! Detrás en el registro de la tolerancia a desastres cliente vamos a seguir la discusión.

Después consideramos los datos, en este caso inconsistencia, si la habitación se convirtió en una isla, por lo que si SVCA por habitación sólo recibe svcB esta sala es la lista de IP, es decir, entre 1, 2 lista de direcciones IP de los datos de cada svcB habitación completamente inconsistentes, lo que los efectos son?

De hecho, nada gran impacto, pero en este caso, todo se convirtió en una llamada a la misma habitación, diseñamos el registro cuando a veces incluso tomar la iniciativa para usar esta inconsistencias en los datos del registro puede solicitar ayuda a la iniciativa de hacer con espacio para llamar con el fin de optimizar el efecto de enlace RT llamada de servicio!

Podemos ver en la exposición anterior, pesamos la PAC, la disponibilidad de los datos del registro es más valiosa que la consistencia fuerte, por lo que el diseño general debería tender a AP, pero no CP, las inconsistencias de datos en el rango aceptable, y renunciar a P menor un completo ha violado el principio no puede ser registro de conectividad por cualquier motivo en sí socavan el propio servicio.

escala de servicio, capacidad, servicios de conectividad

de su empresa "micro-servicios" ¿Qué tan grande? Cientos de micro-servicios? Desplegado cientos de nodos? Luego de 3 años a partir de ahora? Internet es un lugar de milagros, tal vez su "servicio" en un nombre familiar durante la noche, se duplicó el tráfico, se duplicó en tamaño!

Cuando el tamaño de los datos supera un determinado número del centro de servicios (servicio size = {pub digital de servicios, el número de sub servicio} F), tan pronto ZooKeeper registro asnos lo mismo que la figura abrumado

De hecho, cuando se utiliza para ZooKeeper hora local, que se utiliza en la cerradura distribuido grano grueso, escenario de coordinación distribuida, el número de conexiones ZooKeeper pueden apoyar TPS y el apoyo es adecuada, debido a que estas escenas para ZOOKEEPER escalabilidad y capacidad demandas no son muy fuerte.

Pero en el descubrimiento de servicios y la vigilancia de la salud escenarios, con el aumento del tamaño de la administración, si es el momento de la publicación de solicitud de inscripción servicio a menudo trae una petición de escritura, o condición cepillo milisegundos servicio de salud causados ​​por una solicitud de escritura, o deseó poder recipientes de la máquina o un centro de datos están registrados en el centro tiene una larga conexión para traer conexión de presión, ZooKeeper pronto ser impotente, y ZooKeeper de escritura no es escalable y no puede resolver el problema del nivel de escalabilidad mediante la adición de nodos.

Hacer de tripas corazón para resolver el problema del crecimiento en el tamaño de la administración ZooKeeper sobre la base de un método práctico que se puede considerar es encontrar maneras de resolver el negocio, la división vertical del dominio de negocio, que se dividirá en registro múltiple ZooKeeper, pero como la prestación de servicios generales instituciones plataforma del grupo, debido a la falta de capacidad para proporcionar servicios a las empresas de acuerdo con la tecnología de Baton negocio de gestión de la división, lo que realmente factible?

Y se ha violado porque el registro por sus propias razones puede conectividad (falta de capacidad) destruyó el servicio, dar un ejemplo sencillo, un negocio de búsquedas, un servicio de mapas, una gran empresa de entretenimiento, un negocio del juego, servicios entre ellas nunca se debe en contacto con ella? Tal vez hoy es sí, entonces hacer mañana, un año después de que, dentro de 10 años? ¿Quién sabe lo que el futuro será el de conseguir a través de varios dominios de negocio hacer lo maravillosa innovación empresarial? centro de registro como un servicio básico, el tiempo futuro impredecible, por supuesto que no interfieran con las necesidades de servicios de negocios para el futuro de la conectividad inherente.

Registro debe ser persistente y registro de transacciones que?

Necesidad, no es necesario.

Sabemos ZooKeeper de protocolo ZAB para cada solicitud de escritura, escritura a mantener un registro de transacciones en cada nodo ZooKeeper, y un montón de datos de la memoria normal de reflejo (Instantánea) en el disco para asegurar la consistencia y datos persistentes, y restaurar los datos después de tiempo de inactividad, que es una característica muy agradable, pero tenemos que preguntar, en el escenario de descubrimiento de servicios, sus datos básicos - salud en tiempo real de una lista de servicios realmente necesita para hacer frente a los datos de persistencia que?

Para estos datos, la respuesta es no.

Como se muestra anteriormente, si el servicio de registro experimentó svcB (IP1) para la expansión de los dos nodos (IP1, IP2) desciende debido a la reducción de volumen (IP1 hacia abajo), el proceso para producir tres veces la operación de escritura para ZooKeeper .

Sin embargo, un análisis cuidadoso, el registro de transacciones, persistencia registrar de manera continua el proceso de cambio es en realidad de poca importancia, ya que en el descubrimiento de servicios, llamada de servicio originador está más preocupado por la lista en tiempo real de direcciones y el estado en tiempo real de su servicio de salud que se invoca, cada cuando la llamada iniciada, no importa el servicio al servicio de lista de direcciones para ser invocado la historia, el estado de salud pasado.

Pero ¿por qué es necesario que se dijo, porque una completa registros de producción están disponibles, además de los servicios de lista de direcciones en tiempo real y el estado de salud en tiempo real, sino también para almacenar algunos servicios de información de metadatos, como la versión del servicio, la agrupación, donde centro de datos, los pesos, la información política de autenticación, etiqueta de servicio y otros meta-información, estos datos necesitan almacenamiento persistente, y el registro deben proporcionar la capacidad de búsqueda de estos meta-información.

Comprobar Servicio de Salud

ZooKeeper uso como un registro de servicios, la actividad de servicio de vigilancia de la salud a menudo utilizan mecanismo de Sesión Pista ZooKeeper y mecanismo vinculante términos simples efímero ZNode, se para monitorear los servicios de salud ligados a la ZooKeeper para la vigilancia de la salud de la sesión, o dijo obligado en la sonda activa TCP enlace de largo.

También puede causar a largo TCP vínculo entre el problema fatal detección de actividad normal, ZK con el equipo del proveedor de servicios cuando el servicio de salud es lo que en muchos casos? La respuesta, por supuesto, no es! El registro debe proporcionar más amplio programa de vigilancia de la salud, la salud de la lógica de servicio debe estar abierta a su propia definición del proveedor de servicios, en lugar de a través del tablero se convirtió en la actividad TCP detecta comprometido!

El diseño básico de un gran principio de detección de salud es tan verdadero estado real de votaciones de la salud del propio servicio o un servicio no puede ser invocado creen que los resultados de la evaluación de la salud que hay vigilancia de la salud.

Registro considere centro de recuperación

se ha mencionado anteriormente, en la práctica, el registro por cualquier motivo no puede ser destruido en sí conectividad entre el servicio en sí , entonces la disponibilidad, una cuestión esencial si el registro (registro) en sí va completamente hacia abajo, llamada SVCA svcB enlace debería verse afectado por ella?

Sí, no debería verse afectada.

llamada de servicio (petición de flujo de respuesta) debe ser un débil centro de registro dependencia de enlace, debe ser puesto en libertad sólo en el servicio, la máquina fuera de línea, servicio, etc., cuando se registro depende de la capacidad de escalado necesario.

Esto requiere centros de registro cuidadoso diseño para ofrecer a sus propios clientes, los clientes deben tener los medios para hacer el centro de registro para los servicios de recuperación de desastres completamente no disponibles, como mecanismo de memoria caché del cliente los datos de diseño (que llamamos instantánea cliente) es eficaz medios. Además, chequeo de salud registro del mecanismo debe ser cuidadosamente diseñado con el fin de dar la impresión de empuje esperado en vano tal situación no se levantará en este caso.

Native Client ZooKeeper y no tienen esta capacidad, a fin de tomar ventaja de la aplicación ZooKeeper del centro de registro cuando tenemos que preguntarnos, si todos los nodos ZooKeeper que matar a todos enlace de llamada de servicio en la producción de energía total sin ninguna me afectan? En este sentido y debe hacer regularmente ejercicios de culpa.

¿Tiene expertos ZOOKEEPER pueden confiar en?

ZOOKEEPER un producto aparentemente simple, pero el uso a gran escala en la producción y uso así, ¿no es una cuestión de rutina. Si ha decidido introducir ZooKeeper en la producción, es mejor estar preparado para buscar ayuda de expertos técnicos para ZOOKEEPER expectativas psicológicas, la manifestación más típica es de dos maneras:

  • Difícil de entender sesión de la máquina cliente / Estado

Native Client ZooKeeper absolutamente no se puede llamar fácil, curador poco mejor, pero en realidad las cosas, limitado a entender plenamente el acuerdo de la interacción entre el cliente y el servidor no está ZooKeeper simple, comprender y captar ZooKeeper Cliente / Sesión la máquina de estado (abajo) no es tan simple:

Pero el programa de descubrimiento de servicios basados ​​ZooKeeper tiene una larga ZooKeeper dependiente conexión proporcionada / Gestión de sesiones, efímero ZNode, Notificación de eventos, el mecanismo de ping, así que el uso ZooKeeper buen hacer de descubrimiento de servicios, sólo para entender cómo estos mecanismo central ZooKeeper, que a veces le hará en un genio, sólo quiero un servicio de encontrarlo, cómo sabes tanto? Y si usted entiende y no lo hace paso en la fosa, Felicidades, te has convertido en un experto técnico en el ZooKeeper.

  • manejo de excepciones insoportable

Cuando Alibaba acceso a las aplicaciones internas ZooKeeper, hay un "acceso a las aplicaciones deben saber ZooKeeper será," el wiki, en el manejo de excepciones que tenía la siguiente declaración:

Si desea seleccionar un desarrollador de aplicaciones utilizando el proceso ZooKeeper, la mayor necesidad de entender claramente qué? Así que basado en nuestra experiencia previa en apoyo, que debe ser el manejo de excepciones.

Cuando todo (ordenador principal, disco, red, etc.) son muy afortunado de trabajo, una aplicación se ejecutará con buena ZooKeeper posible, pero por desgracia, el día que se enfrentará a todo tipo de accidentes, y esto la ley de Murphy seguimiento, las cosas malas inesperados siempre sucede cuando se está más preocupado por.

Así que asegúrese de entender cuidadosamente las anomalías y errores ZOOKEEPER en algunos escenarios ocurrir, asegúrese de que usted entiende la correcta estas anomalías y errores, así como saber cómo su aplicación controla correctamente estas situaciones.

  • ConnectionLossException y eventos desconectados

En términos simples, se trata de una posible anomalía (recuperable) con una sesión ZooKeeper se recuperó, pero los desarrolladores de aplicaciones tiene que ser responsable de la recuperación de la aplicación al estado correcto.

Esto ocurre anomalía que hay muchas razones, como la red entre la aplicación y la máquina ZooKeeper flash de nodo, el nodo ZooKeeper deja de funcionar, el servidor completo GC mucho tiempo, y la muerte incluso colgar el proceso de solicitud, el proceso de recuperación después de la aplicación de Full GC mucho tiempo es probable.

Para entender esto requiere una comprensión de la anomalía de un problema típico de las aplicaciones distribuidas, como se muestra a continuación:

En una solicitud de un cliente típico, la respuesta del servidor, cuando el tiempo de desconexión vínculo entre ellos, que percibe el cliente cuando el incidente flash, estará en una posición bastante incómoda, y que es incapaz de determinar el cuando se produce un evento en las proximidades de esa petición, al final en qué estado, del lado del servidor que al final recibió una solicitud todavía? Hemos tratado con él? Porque no puede determinar esto, por lo que cuando una reconexión del servidor de cliente, si la petición debe ser juzgado (Reintentar) podría también colocar un signo de interrogación.

Por lo tanto, en el caso de tratamiento de desconexión, los desarrolladores de aplicaciones deben saber lo que la solicitud se encuentra en las proximidades del flash es (esto es a menudo difícil de determinar), si la solicitud es idempotente, para las solicitudes de servicio al final de los mangos de servicio Servidor para "solamente tratar con un "" manejar hasta un "" mango al menos una vez "la semántica tienen una opción y expectativas.

Por ejemplo, si la aplicación a la recepción ConnectionLossException, antes de la solicitud es una operación Crear, así que coge esta excepción a la aplicación, la lógica de aplicación es una posible recuperación, creado antes de la solicitud para determinar si un nodo ya existe, si existe no se vuelve a crear, si no, a crear.

Como otro ejemplo, si utiliza la aplicación existe reloj del monitor de eventos creado un nodo inexistente, a continuación, durante ConnectionLossException, hay probabilidades de ser encontrado es que durante este periodo de evaporación, el otro proceso cliente puede haber creado nodo, y se ha eliminado, por lo que para la aplicación actual, creada a perder el caso de un nodo de interés, lo que el impacto de esta aplicación es que se pierda? Es tolerable o inaceptable? Los desarrolladores de aplicaciones deben ser evaluados y tratados de acuerdo con sus propias semántica de negocio.

  • SessionExpiredException eventos y sessionExpired

el tiempo de espera de sesión es una excepción irrecuperable, que se refiere a la captura de aplicación de esta excepción cuando la aplicación no es posible restaurar el estado de la aplicación en la misma sesión, es necesario volver a establecer una nueva sesión, el nodo temporal asociada a la edad, la sesión también puede haber fallado, tiene un bloqueo puede haber fallado. ...

Alibaba nuestros socios en su propio pequeño intento de utilizar ZooKeeper hacer proceso de descubrimiento de servicios se ha llegado a la conclusión de su propia experiencia de compartir un pozo pisado nuestra red interna Technology Forum

Pertinente menciona en este artículo:

... encontrado una gran cantidad de obstáculos que puedan existir en el proceso de codificación, conjeturas Mao, por primera vez para poner en práctica la gestión de personas zk racimo deben tener más del 80% estará fuera hoyo, algunos, problemas de red escena más sutiles o inusual cuando aparezca, solamente pueden estar expuestos durante mucho tiempo fuera ...

Giro a la izquierda, a la derecha

Alibaba no es completamente sin el uso ZooKeeper? No!

Alibaba sistema de tecnología familiar sabe, de hecho, Alibaba mantener la corriente independiente y el grupo ZooKeeper más grande del mundo, la escala global de casi un millar de unidades de nodo de servicio ZooKeeper.

Mientras Alibaba también mantiene un middleware interno para la producción a gran escala, alta disponibilidad, monitoreo y ZooKeeper operación más fácil y el mantenimiento de ramas de código TaoKeeper, si practicamos casi 10 años de uso ZooKeeper en cada línea de negocio y de producción, a ZooKeeper evaluó utilizando una frase, entonces pensamos ZooKeeper debe ser "el rey de Coordinación para Big Data"!

En grano grueso Distributed Lock, distribuido maestro elecciones, en espera, etc. no requieren una alta disponibilidad de conmutación de papel insustituible en los escenarios de apoyo TPS, estas necesidades se concentran a menudo en los grandes volúmenes de datos, fuera de la línea de tarea relacionada con las áreas de negocio, porque el campo de datos de gran tamaño, prestar atención a dividir el conjunto de datos, y la mayor parte del proceso de multi-tarea por división de tiempo / subproceso de procesamiento paralelo de estos conjuntos de datos, pero siempre hay algo que necesita ser armonización de estas tareas y procesos sobre el terreno, esta vez es ZooKeeper jugar un papel significativo en el inútil.

Pero en el comercio en el enlace de la escena comercial en el principal acceso a los datos de negocio, detección de servicios a gran escala, el seguimiento de los aspectos a gran escala tabla corta natural de la salud, debe tratar de evitar la introducción de ZooKeeper En estos escenarios, las prácticas de producción en Alibaba tiempo de aplicación para el uso de aplicaciones ZooKeeper a escena estricta, la capacidad para evaluar los requisitos de SLA.

Así que usted puede utilizar ZooKeeper, pero por favor, grandes volúmenes de datos a la izquierda, y la transacción está a la derecha, izquierda distribuido coordinación, el descubrimiento de servicios a la derecha.

Escrito en los últimos

Gracias por su paciencia de leer aquí, ahora, estoy seguro de que entiende, escribimos este artículo no es negado ZooKeeper, pero sólo los últimos 10 años la práctica de producción en un servicio a gran escala de nuestra Alibaba para nosotros en el servicio descubrimiento y centro de registro de diseño y llevar a cabo las lecciones sobre el uso de un resumen de la esperanza a la industria sobre cómo utilizar mejor ZooKeeper, la forma de mejorar el diseño de su propio registro de servicios para inspirar y ayuda.

Por último, todos los caminos conducen a Roma, le deseo sinceramente un registro directo nació en Roma.

Publicado 50 artículos originales · ganado elogios 1706 · Vistas 2,22 millones +

Supongo que te gusta

Origin blog.csdn.net/zl1zl2zl3/article/details/105207165
Recomendado
Clasificación