¡Puedes ver la transmisión en vivo de Douyu, que ha abierto su propio proyecto en GitHub!

Lectura recomendada:

No hace mucho, Douyu abrirá Jupiter, un marco de microservicio basado en el lenguaje Go. Como empresa de transmisión en vivo por Internet conocida en China, esta es también la primera vez que Douyu lanza oficialmente un proyecto de código abierto en nombre de la empresa.

En los últimos años, gracias a la creciente demanda de servicios de alta concurrencia, la arquitectura de microservicios se ha popularizado gradualmente en China. Al mismo tiempo, el desarrollo del lenguaje Go y su ecología relacionada, que está diseñado para una alta concurrencia, también avanza rápidamente en China. En la actualidad, las arquitecturas de microservicios principales en el mercado incluyen Spring Cloud, Dubbo, etc., y los equipos han lanzado especialmente las versiones de Go correspondientes para que aprovechen al máximo las ventajas de alta concurrencia de Go en la arquitectura de microservicios.

Webcast es un negocio muy concurrente, y el modelo de negocio distribuido de Douyu siempre nos ha despertado mucha curiosidad. Para comprender mejor la diferencia entre Jupiter de Douyu y otros marcos de microservicio convencionales, así como el desarrollo de la pila de tecnología interna de Douyu, invitamos inmediatamente a Lu Chao, el ingeniero de I + D del equipo de Douyu Go, a revisar el proceso de código abierto de Jupiter y el de Douyu. La pila de tecnología de Fish ha cambiado en los últimos años.

El nacimiento de Júpiter

Se informa que Jupiter nació del marco de microservicios de Golang dentro de Douyu. Después de tres años de pulido, cientos de verificaciones en línea de servicios y múltiples evoluciones de infraestructura, como la construcción de salas de múltiples computadoras, la cloudificación y la contenerización. En la actualidad, Jupiter ha lanzado la versión 0.5.0, que básicamente cubre las principales funciones del marco interno. Pero debido a que el marco interno contiene muchas características personalizadas y cierto bagaje histórico, muchas funciones no se han liberado por completo. "También estamos clasificando y lanzando esta parte de la función lo antes posible".

Entonces, en el proceso de construcción de la arquitectura de microservicios, ¿por qué Douyu no adoptó el marco de microservicio listo para usar, sino que eligió "construir las ruedas" por sí mismo y recrear Júpiter? Lu Chao nos dijo que Douyu comenzó a usar la arquitectura de microservicio a fines de 2016 y también presentó la pila de tecnología Go en ese momento.

Júpiter no fue concebido desde el principio. "Al principio, utilizamos muchas bibliotecas de código abierto para crear aplicaciones. Las bibliotecas de código abierto tienen funciones insuficientes y los errores no se pueden corregir a tiempo, por lo que abriremos dos. Para satisfacer las necesidades de la comunicación interna de pila de múltiples tecnologías, comenzamos a escribir un marco RPC unificado Y formó gradualmente el primer Júpiter ". Con el crecimiento de la escala de servicios y la evolución de la infraestructura, Jupiter también se está convirtiendo en un marco de microservicio que admite múltiples escenarios de aplicaciones, se centra en la eficiencia del desarrollo y la gobernanza, y puede responder con calma a la evolución de la infraestructura .

Como proyecto de código abierto en crecimiento, Jupiter no es perfecto en comparación con los marcos maduros como Spring Cloud y Dubbo en el mercado. "En términos de funcionalidad, Júpiter todavía tiene muchas deficiencias. Pero Júpiter es nativo de Go, y muchas de las soluciones que adopta también son populares en la ecología de Go, como gRPC, ETCD, Prometheus, Jaeger, etc. Al mismo tiempo, Júpiter es una gobernanza orientada a servicios El marco está relativamente abierto al procesamiento de algunos módulos, como echo y gin, que son fáciles de integrar. Por supuesto, también incluye el marco RPC de desarrollo propio de varias empresas ”. Lu Chao dijo que aunque el Jupiter actual no es el marco más perfecto, Se basa en años de experiencia empresarial real acumulada por Douyu y actualmente es la arquitectura de microservicio más adecuada para Douyu.

Por qué elegir Go

El lenguaje Go es un lenguaje de programación relativamente nuevo lanzado por Google en 2009. Debido a su soporte nativo para alta concurrencia, se lo conoce como el lenguaje contenedor de la era nativa de la nube. Sin embargo, Go comenzó tarde en China. En la actualidad, la ecología relacionada con Go no es perfecta en China. Incluso hay muchos desarrolladores que todavía están al margen de este llamado nuevo lenguaje en la era nativa de la nube. En la comunicación con Lu Chao, supimos que Douyu, que se fundó en 2014, inicialmente no usaba Go.

"El Departamento Web de Douyu comenzó a utilizar PHP. Hasta finales de 2016, para hacer frente al rápido crecimiento de la escala empresarial, gradualmente introdujo Go y Java para formar una pila de múltiples tecnologías". Lu Chao dijo: "La introducción de Go también se trata de Aprovechando el desarrollo de aplicaciones de alta concurrencia y la contenerización de Go, de hecho, en la ingeniería de servicios de los dos años siguientes, Golang mostró esta ventaja ".

Sin embargo, el proceso de migración a Go no es sencillo. Según recordó Lu Chao, "El cambio de lenguajes de tipado débil a lenguajes de tipado fuerte, la falta de bibliotecas de clases y la confusión de las funciones de administración de paquetes de Go nos han causado muchas dificultades. Pero el mecanismo de lenguaje de Go es relativamente simple e intuitivo, no tanto Qué cosa tan elegante, esto también trae una ventaja potencial de que el costo de refactorización e iteración de las aplicaciones Go es muy bajo, lo que reduce la dificultad de la migración hasta cierto punto ".

Para mejorar la eficiencia del desarrollo de aplicaciones Go, el equipo de Douyu desarrolló Jupiter. "A medida que aumenta la escala de las aplicaciones, Jupiter también presta gran atención a la eficiencia de la gobernanza. Cuando el servicio está casi terminado, también comienza a realizar algunas obras de infraestructura, como la construcción de salas de múltiples computadoras, cloudificación, contenedorización e ingeniería caótica para garantizar la lógica empresarial. Conexión perfecta con estas infraestructuras. Por supuesto, hay más soporte para la plataforma PaaS que necesita plataforma de gobierno y operación y mantenimiento. Afortunadamente, nuestra plataforma de gobierno de servicios Juno también es de código abierto. A través de Jupiter y Juno, podemos lograr un rendimiento relativamente completo Experiencia en gobernanza de servicios ".

Diferencias con otros marcos de microservicios

Debido a que el lenguaje Go admite características de alta concurrencia, algunas arquitecturas de microservicio maduras también han lanzado recientemente versiones refactorizadas de Golang, como Dubbo Go, que informamos hace algún tiempo. Lu Chao dijo que su equipo ha estado prestando atención al proyecto Dubbo Go y también está muy feliz de ver un marco RPC tan excelente en el ecosistema de Golang. De hecho, en comparación con estos excelentes frameworks de RPC como Dubbo Go, Jupiter es más una relación complementaria.

Primero, en comparación con el marco RPC, Jupiter se centra más en la gobernanza de microservicios. Júpiter dentro de Douyu tiene marcos de eco y gRPC profundamente personalizados y es compatible con el marco de RPC de desarrollo propio de la empresa. Por un lado, es resolver la comunicación de datos de la pila multitecnológica interna de la empresa (php / Go / java / cpp), por otro lado, también es resolver el problema de funciones insuficientes de algunos frameworks de código abierto tempranos.

Sin embargo, con la integración del marco RPC interno de la empresa y la mejora continua del marco de código abierto, estos dos problemas se han aliviado enormemente. "Así que estamos simplificando gradualmente el marco de RPC y centrándonos en la gobernanza del servicio. El código abierto Jupiter también continúa con este concepto. A través de una adaptación simple, se pueden integrar fácilmente marcos excelentes como gin / Goframe. La adaptación aquí se refiere principalmente a Algunos paquetes necesarios basados ​​en necesidades de gestión y gobernanza ".

En segundo lugar, Júpiter no es solo un marco RPC. Jupiter se enfoca en la administración de servicios de aplicaciones. Además de RPC, las aplicaciones también incluyen almacenamiento en caché, colas de mensajes y programación de tareas. Todos estos deben ser administrados. Además de la troika observable: enterramiento de registros, recopilación de índices, seguimiento de enlaces, Jupiter también admite funciones básicas como códigos de error unificados, creación de perfiles en línea, modo de desarrollo, configuración dinámica, etc., con mayor precisión de administración Dimensiones altas y más ricas.

Sabemos que un punto clave en la arquitectura de microservicios es la comunicación entre servicios, especialmente la comunicación entre idiomas en escenarios de pila de múltiples tecnologías. Dentro de Douyu, el equipo de Java utiliza el marco de Dubbo. Para lograr la comunicación entre las aplicaciones Go y las aplicaciones Java, el equipo adoptó un método de compromiso:

  • El marco Dubbo del equipo de Java utiliza Dubbo-gRPC como protocolo de comunicación para lograr la intercomunicación en el protocolo de comunicación.

  • El marco de Jupiter del equipo de Go admite el protocolo de registro basado en interfaz de Dubbo a través de varias claves de registro para lograr la interoperabilidad entre el registro y el descubrimiento del servicio.

"Aunque este método se puede utilizar, no es tan elegante. Para resolver realmente el problema, todavía tenemos que abrir el contrato de registro del servicio. Hemos notado el progreso de Dubbo y Dubbo Go basado en el registro de la aplicación. Estamos deseando que llegue esto y también estamos estudiando cómo usar Jupiter Haga una combinación con Dubbo Go, para interoperar elegantemente con Dubbo ". Lu Chao dijo que una mejor interoperabilidad entre la arquitectura Jupiter y Dubbo es el próximo problema que el equipo se esforzará por resolver.

El significado de la arquitectura de microservicios

La arquitectura de microservicios distribuidos ha sido objeto de mucha controversia desde su nacimiento Algunas personas en Internet creen que muchas empresas pueden seguir utilizando la arquitectura tradicional de implementación unificada sin buscar ciegamente nuevas tecnologías. Combinando la experiencia empresarial de Douyu, Lu Chao compartió sus puntos de vista sobre las perspectivas de aplicación de la arquitectura de microservicios: "Creo que la arquitectura técnica es un proceso evolutivo, siguiendo la ley de Conway: la estructura organizativa determina la arquitectura técnica".

Con el desarrollo del negocio y los cambios en la estructura organizacional, Douyu ha causado ciertos problemas en el mantenimiento y gobierno de la arquitectura de aplicación única original, por lo que gradualmente migró a microservicios. Los microservicios ayudaron a Douyu a resolver los siguientes problemas:

  • Mantenibilidad del servicio: la cohesión de los subsistemas aclara las responsabilidades y los límites de los subsistemas, lo que puede reducir efectivamente los costos de comunicación y conexión de cada sistema, y ​​la arquitectura puede ser más razonable y eficiente.

  • Alta disponibilidad de servicios: la división de subsistemas SLA, de acuerdo con diferentes niveles de SLA, puede optimizar los servicios centrales y la recuperación ante desastres, y mejorar la disponibilidad del servicio.

  • Escalabilidad del servicio: la división de subsistemas QPS puede estimar la capacidad del servicio de acuerdo con diferentes niveles de QPS, y el servicio puede ser escalable

En general, los microservicios tienen muchas ventajas de buen mantenimiento y gobernanza cuando su escala empresarial y estructura organizativa alcanzan un cierto nivel. "En otras palabras, ** no es que elijamos reemplazar los monolitos con microservicios, sino que los microservicios son necesarios para el desarrollo empresarial hasta cierto punto. ** La forma más fácil de evaluar si una empresa necesita una arquitectura de microservicios es la teoría de dos pizzas. . Si mantiene un único código de aplicación que excede los dos equipos de pizza, es posible que haya demasiadas personas para causar problemas de comunicación. En este momento, es posible que necesitemos hacer algunas divisiones ".

Adopte el pez luchador de código abierto

No hay pocos ejemplos de grandes empresas nacionales que adopten el código abierto. Como plataforma de webcast muy conocida en China, Douyu sigue siendo una cara nueva en la industria del código abierto. Le pedimos a Lu Chao que compartiera las opiniones del equipo técnico de Douyu sobre el código abierto.

"Antes de Jupiter de código abierto, muchos de mis colegas también participaron en la comunidad de código abierto en diversos grados y contribuyeron con código. El propósito de la participación temprana en la comunidad de código abierto se debió principalmente a necesidades internas, abrimos muchas bibliotecas de código abierto. Si es oportuno La introducción de cambios en la comunidad puede reducir en gran medida nuestros costos de mantenimiento. A medida que aumenta el número de participantes, las ideas de código abierto han ido surgiendo gradualmente. Al mismo tiempo, el esquema de integración nativo de Go para la gobernanza de microservicios es relativamente escaso. No nativo, de otros El marco que ha movido la ecología del lenguaje tiene un cierto costo de comprensión. Varias razones nos han llevado a considerar abrir el marco de microservicio Jupiter y la plataforma de gobierno Juno al mismo tiempo para contribuir un poco a la solución de arquitectura de microservicio ".

A través de Jupiter de código abierto, Lu Chao y su equipo analizaron exhaustivamente el diseño de la arquitectura del marco básico y resumieron la experiencia de la gobernanza del servicio. "Esto será de gran ayuda para nuestra arquitectura de servicios internos y nuestro sistema de gobernanza en el futuro". Al mismo tiempo, el código abierto Los comentarios positivos de la comunidad también han traído muchas opiniones y sugerencias valiosas al equipo de Douyu.

"La retroalimentación de los colaboradores es todavía relativamente grande, algunos analizan las soluciones de gobernanza del servicio, algunos preguntan sobre el diseño de la arquitectura e incluso discuten una línea específica de código. Como un nuevo proyecto que acaba de ser de código abierto, estas retroalimentaciones son extremadamente valiosas para nosotros . "Dentro de medio mes de la fuente abierta del proyecto, Júpiter ya ha obtenido 1066 estrellas. Al mismo tiempo, a medida que la comunidad de Júpiter continúa mejorando e interactuando con otras comunidades de código abierto, Lu Chao cree que esto definitivamente fortalecerá el sistema de gobierno interno de Júpiter y Douyu.

"Antes, era una participación más personal y los proyectos también estaban relativamente dispersos. Con esta oportunidad de código abierto, integraremos algunos recursos de desarrollo y apuntaremos a algunos proyectos de código abierto que estamos usando o usaremos, y participaremos. Luego, promocionar estos proyectos en Nuestro uso interno forma una interacción benigna ".

Lu Chao resumió sus puntos de vista sobre la participación en código abierto. Desde una perspectiva personal, participar en código abierto puede mejorar de manera efectiva la calidad del código personal. Desde el punto de vista de la empresa, los recursos compartidos se pueden utilizar de forma más eficaz para mejorar la eficiencia. En general, es algo muy beneficioso.

Acerca del futuro

¿Douyu abrirá más proyectos en el futuro?

Lu Chao nos reveló que el plan actual del equipo es continuar promoviendo el código abierto en torno al marco de microservicios Jupiter y la plataforma de gobierno de servicios Juno. En los últimos dos años, Douyu ha acumulado muchas bibliotecas internas, como bigmap de almacenamiento de objetos basado en memoria, redis cliente redis de alta concurrencia, soporte para pruebas de estrés de enlace completo, etc. Debido a que contiene algunas características de personalización internas, temporalmente no es de código abierto . Pero luego el equipo organizará aún más y lanzará gradualmente estos proyectos internos a través de Júpiter.

"Como Juno, el sistema de backend que soporta Jupiter, nuestro plan de seguimiento continuará mejorando el centro de configuración, el centro de registro, el centro de monitoreo, el centro de gobierno, etc. Juno no solo será compatible con Júpiter, sino que también será compatible con otros marcos de código abierto, lo que se suma al ecosistema de microservicios de Go. "

Supongo que te gusta

Origin blog.csdn.net/weixin_45784983/article/details/108129013
Recomendado
Clasificación