Kafka, Lamoda y unas ganas irresistibles de aprender





Nikita Galushko, desarrollador de la división Online Shop Lamoda, mientras visitaba el centro de formación Slurm, compartió sus impresiones del curso Kafka, contó cómo se utiliza esta tecnología y qué problemas se resuelven en el departamento de I + D (Investigación y Desarrollo).



"¿Con qué rapidez llegaremos al canal de red que utiliza Kafka, en dos años o menos?"


Lamoda es una de las tiendas en línea más grandes de Rusia y la CEI. Para que los compradores utilicen el sitio sin problemas y disfruten de un envío y entrega rápidos, 340 empleados se dedican a los sistemas de TI en Lamoda: desarrolladores, ingenieros de control de calidad, analistas, especialistas en DevOps, gerentes de producto, diseñadores. Averigüemos cómo giran los engranajes en este sistema.



Dime algo sobre ti. ¿Qué haces en Lamoda y cuánto tiempo llevas trabajando allí?



Cómo me gusta decir: "Apreto los botones y me pagan dinero". He estado presionando botones durante unos seis años. Todo este tiempo he estado escribiendo en Go. Hace no mucho que estoy en Lamoda, desde octubre de 2020, pero ya he conseguido soltar mis tentáculos en muchos proyectos de servicio.



Trabajo en el departamento de RnD (Investigación y Desarrollo): este es un departamento en el que una semana escribe un servicio en Kafka y decide cómo realizar una transacción distribuida entre Kafka y PostgreSQL, y la siguiente escribe un generador de código para Aerospike. Este es un trabajo muy interesante.



¿Entiendo correctamente que la I + D está fuertemente ligada a la analítica?



Sí, trabajamos en estrecha colaboración con científicos de datos. Realizan análisis, entrenan y construyen modelos, y luego vienen a nosotros con una solicitud para integrar estos modelos en el funcionamiento de una aplicación o sitio web. Por ejemplo, un modelo que muestra a los usuarios una lista personalizada de recomendaciones o sugiere qué talla de ropa o calzado es más adecuada para un cliente.



¿Qué tareas te gustan de tu trabajo? ¿Qué es lo que le interesa en el departamento de I + D?



Probablemente esto sea libertad. No está limitado a ningún dominio de conocimiento, servicio o un pequeño conjunto de servicios. En I + D, puede realizar cambios en el servicio en Go y, al día siguiente, cambiar en Java. Para algunos, esto puede ser una desventaja, ya que con este enfoque es difícil concentrarse en un solo servicio. Pero para mí, esta es una oportunidad para probar suerte en diferentes áreas, ver qué enfoques usaron los desarrolladores para resolver diferentes problemas, aprender algo nuevo por mí mismo.



Recientemente comenzamos a hacer un generador de código para analizar los resultados de Aerospike. Dado que proporciona datos sin procesar, es necesario analizarlos constantemente a mano. Y estos son errores potenciales y una pérdida de tiempo precioso: olvidó algo o no revisó algo, y el resultado no es el esperado. Por lo tanto, lo pensamos y decidimos escribir nuestro propio generador de código. Hasta ahora funciona en modo de prueba, pero espero que pronto lo abramos.



¿Lamoda hace a menudo proyectos de código abierto?



Lamoda tiene un proyecto de código abierto relativamente conocido llamado Gonkey . Puedes leer más sobre esto en nuestro artículo .



Gonkey es un conjunto estandarizado de soluciones que facilita la escritura de autotest en el lenguaje de marcado Yaml. Esto es conveniente porque tales pruebas pueden ser escritas tanto por desarrolladores como por evaluadores, lo que aumenta el porcentaje de cobertura de la prueba.



Ahora, esta herramienta no se está desarrollando tan rápidamente dentro de la empresa como nos gustaría, pero planeamos contribuir con más tiempo en el futuro: cerrar paquetes que se abren en github, responder preguntas, mejorar.



Lo más probable es que para esto necesite tener una amplia pila de conocimientos, para estudiar el doble de lo habitual. ¿Es tan?



Yo diría que solo necesitas tener una perspectiva amplia.



¿Superficial?



Ciertamente no de esa manera. Existe algo llamado revelador en forma de T. Entiende muy bien, incluso excelentemente, en un área, pero al mismo tiempo está más o menos versado en otras áreas. Ya dije que ahora escribo en Java, pero todavía el 99% del código lo escribo en Go. Por lo tanto, cuando conoce muy bien la pila de Go y al mismo tiempo sabe cómo mirar a su alrededor, esto es bueno no solo cuando se trabaja en I + D, sino en general. Puede aprender algunas ideas y enfoques de otras tecnologías y lenguajes.



Conozco personas que escribieron en Python durante un tiempo y luego cambiaron a Go; les gustó cómo este lenguaje aborda el manejo de errores. Ahora están tratando de llevar el mismo enfoque a los proyectos que escriben en Python.



Probablemente, todos los desarrolladores que quieran desarrollar no tienen otra opción: necesita actualizar en diferentes áreas. No podrá sentarse eternamente a comprender solo un área altamente especializada. Si trabaja en cualquier lugar, necesita desarrollarse.



Según tengo entendido, las tareas de I + D son diversas. ¿Tuviste que aprender algo en el proceso?



Aprendizaje y desarrollo conmigo, desde que me familiaricé con la programación en el décimo grado del liceo. Siento placer cuando aprendo algo nuevo o cuando les cuento a otros sobre algo nuevo. Antes de Lamoda, trabajé en VKontakte y me desarrollé de la misma manera, leí artículos, tomé cursos, vi discursos de conferencias.



No insto a correr a leer libros y desarrollarme desinteresadamente, todos deciden por sí mismos. Incluso si toma un ejemplo de uno de mis trabajos anteriores: escribimos todo en Go, y en paralelo miré hacia Rust. Todavía no era tan popular entonces, y los artículos sobre el tema "Go versus Rust" de aquellos tiempos lejanos me resultaron muy interesantes. Al mismo tiempo, no lo necesitaba para trabajar.



Si hablamos de trabajar en Lamoda, ¿qué ha necesitado actualizar durante el último año, además de Kafka?



Trabajar con Kubernetes y escribir gráficos de timón. Por cierto, hice un curso sobre Kubernetes contigo, porque no había trabajado con él antes. Por lo general, se trataba de máquinas virtuales o hardware físico, y todo pasaba por los administradores o usted mismo tenía acceso para implementar el paquete deb. Por lo tanto, tuve que dominar Kubernetes: no en el nivel "a través de kubectl para ver el estado del pod-a", sino en el nivel de escribir correctamente el gráfico del timón y comprender cómo funciona por dentro.



Ya que estamos en el tema de los cursos, hablemos de Kafka. ¿Por qué hiciste el curso de Kafka?



Vi un banner en el sitio web: " Próximamente el curso de Kafka ". Y pensé: "¡Debemos irnos!"



Como mencioné, me encanta aprender cosas nuevas. No es necesario tener siete pulgadas de frente para enviar o leer un mensaje en Kafka al nivel mínimo. Pero en general, Lamoda Kafka se ha utilizado durante mucho tiempo y con firmeza. Por lo tanto, una inmersión profunda en esta tecnología era inevitable para mí.



¿Qué es Kafka para ti?



Para mí, este es un registro distribuido y tolerante a fallas con una interfaz de interacción simple que puede bombear una cantidad increíblemente grande de datos a través de sí mismo.



¿Cómo se usa Kafka en Lamoda?



Me parece que encontrar un servicio que de alguna manera no use Kafka en Lamoda es muy difícil. Hemos implementado event-bus en él.Es un autobús de eventos para todo Lamoda. Alguien escribe algunos eventos, y cualquier otro participante que esté conectado a este bus puede leerlos y reaccionar de alguna manera a ellos.



Si hablamos de nuevos proyectos, recientemente lanzamos un servicio para recopilar datos analíticos de backends xlog (este es su nombre interno). También a través de Kafka, ya que requiere un alto rendimiento de todo el sistema.



Kafka también es necesario para trabajar con ClickHouse, que tiene un motor Kafka. Es decir, simplemente escribimos en Kafka y ClickHouse lee y escribe datos en sí mismo. Esto es muy conveniente, porque estamos trabajando en uno de los proyectos en los que necesita hacer muchas entradas en ClickHouse y con frecuencia. Y como sabemos, ClickHouse no sabe cómo hacer esto bien desde el primer momento: necesita un proxy adecuado. Ahora el mercado tiene una solución de Yandex y VKontakte, pero como Lamoda ya tiene una buena experiencia en Kafka, decidimos usarla para comunicarnos con ClickHouse.



También lo usamos activamente para todo tipo de análisis.



¿Cómo utiliza Kafka el equipo de I + D? Si dice que Kafka es registros para usted, ¿entiendo correctamente que está desarrollando servicios usándolo, es decir, que está trabajando con Kafka Streams?



Tenemos nuestro propio contenedor sobre la biblioteca para trabajar con Kafka, que proporciona algún tipo de abstracción. Pero, de hecho, Go tiene canales: los desarrolladores leen desde el canal y escriben allí. Puede que ni siquiera piensen si es Kafka o no.



¿Qué problemas han enfrentado usted y su equipo con Kafka? ¿Cómo trataste de resolverlos?



Ahora tenemos una pregunta, ¿qué tan rápido llegaremos al canal de red que usa Kafka, en dos años o antes? Y detrás de ella surge otra pregunta: ¿qué compresión debería habilitarse y para qué temas en Kafka para posponer esta historia?



Convencionalmente, el mismo servicio de recopilación de datos analíticos es el primer candidato para la compresión. Pero no podemos simplemente tomar y habilitar la compresión, porque esto es una especie de compensación entre el uso de CPU por parte de productores y consumidores.



Ahora estoy intentando preparar un documento con pruebas y análisis. Por cierto, su curso me ayudó mucho con esto, porque hay una lección separada sobre cómo comparar Kafka. En este documento, quiero reflejar si ahora es necesario habilitar la compresión en este servicio. Si es así, cuál incluir, porque existen diferentes algoritmos de compresión. Me parece que este es el tema de mejora más obvio.



¿Hay algún problema de quemado actual con Kafka?



Cuando configuramos ClickHouse para trabajar con Kafka, hubo un problema de que los derechos para describir en el grupo que usamos no estaban configurados correctamente.



Parece menos aterrador que un plan para ejecutar ancho de banda.



También te preguntaré sobre lo que aprendí recientemente. KIP500 fue lanzado desde Kafka 2.8 para abandonar ZooKeeper. Y según tengo entendido, Kafka se basó en la presencia de ZooKeeper, sus limitaciones. Prometen que si se abandona ZooKeeper, el número de particiones aumentará a dos millones. ¿Esto de alguna manera resuelve tu problema?



Si responde directamente, entonces no, no se resuelve, porque no nos estamos topando con el trabajo de Kafka, sino con el canal de red que usamos antes. Ella hace frente fácilmente a la cantidad de datos que le enviamos; el canal no cambia de esto.



Si hablamos del KIP500, entonces dieron el primer paso para abandonar ZooKeeper, pero hasta ahora no parece una solución confiable: probablemente no valga la pena abandonar abruptamente ZooKeeper y cambiar a 2.8 para algunos sistemas de producción más o menos cargados.



El punto es que las operaciones generalmente se ocupan de Kafka y necesitan comprender cómo resolver los problemas emergentes. Ahora lo saben: si sucedió algo, deben hacer algo específico en Kafka y en ZooKeeper otra cosa. Y cuando él no está allí, el plan para resolver los problemas no funciona y tendrá que desarrollar experiencia en este asunto.



Entendí bien: te topas con la red y el escalado horizontal de Kafka no ayuda, es decir, ¿es solo un problema de red?



En general, Kafka está hecho de tal manera que se encontrará con la red o con algo más, pero no con su rendimiento. Recuerdo exactamente lo que se dice sobre esto en el curso, y los profesores explican en detalle por qué es así. Pero no hablaremos de esto para que los interesados ​​puedan ir a ver el curso.



En la gran tarea, todo está claro: el ancho de banda. Y para solucionar este problema, fuiste al curso para animarla y aportar algo al equipo. ¿Es esto una coincidencia o sucedió deliberadamente?



Coincidencia, porque originalmente fui a ver el curso, no solo para aprender a escribir en Kafka. De hecho, para una replicación buena y correcta, debe configurar los acks correctos. El curso lo sumerge en el interior del sistema y cómo funciona.



Si hablamos de un curso, entonces no hay división entre desarrolladores y administradores. ¿Pasaste por todos los temas o te desplazaste por el administrador?



Repasé todos los temas porque todo me resulta interesante. Me divierte aprender cosas nuevas. Por lo general, tomo notas, y después de un tiempo vuelvo a estas notas, las releo, tiro algo. Si algo no está claro, voy a revisar parte del curso y reescribir parte de la sinopsis.



¿Has hecho tu pasantía? ¿Le resultó difícil implementarlos, especialmente los que son administradores?



Lo logré, pero no todo todavía. No, todo estaba lo suficientemente bien planeado, cómo y qué se debe hacer y qué resultado esperar. Fue interesante para mi.



Primero, se utiliza una aplicación Java para algunos trabajos prácticos. Estaba interesado no solo en hacer este trabajo, sino que pasé algún tiempo aprendiendo el código en Java que funciona con Kafka. Necesita mirar un poco más profundo y más amplio cuando realiza tareas tan prácticas.



Es decir, estás buscando tecnología.



Si. Cuando trabajaba en particiones, se trataba de replicación. Y pensé, ¿qué pasaría si lo hiciera de manera un poco diferente? Me tomé el tiempo para jugar y comprobar qué pasa si apago un nodo. ¿Y si dos? ¿Y si hago otra cosa? Es bueno que haya un soporte para la práctica, no tienes que levantar nada de ti mismo. No hay necesidad de perder tiempo en esto.



Cuéntanos qué fue lo más interesante para ti. ¿Qué averiguaste sobre eso, por qué te sorprendiste tanto?



Por ejemplo, que de hecho Kafka es una cola en memoria. Estamos acostumbrados al hecho de que las bases de datos no solo escriben en el disco, sino que también llaman a fsync para que el sistema operativo descargue los datos en el disco. Porque simplemente llamar a write no garantiza que los datos se escriban.



Kafka no hace esto: solo llama a write, una llamada al sistema, y ​​eso es todo. Simplemente dice: "Tú eres el sistema operativo, tú decides cuándo reiniciarlo". Y, de hecho, la fiabilidad de Kafka está garantizada mediante la replicación. No sabía eso. Pensé que Kafka llama a fsync y honestamente persiste todos los datos en el disco. Así de astuta es.



También fue interesante escuchar acerca de los problemas de varios centros de datos.



Tus tareas de ancho de banda. ¿Qué consiguió sacar del curso para afrontar los retos del futuro?



Cómo medir el rendimiento de Kafka y cómo funciona con datos comprimidos. Kafka no los descomprime, sino que los escribe en el disco y los entrega a los consumidores tal como están. Esto dejó en claro que es necesario considerar los costos de la CPU no solo en el productor que escribe en Kafka, sino también en el consumidor que lee. Bueno, y cómo compararlo correctamente.



¿O quizás hubo algo difícil para ti en el curso? ¿O fue la práctica particularmente difícil?



Fue exactamente así: vi un video varias veces. Exactamente revisado sobre el reequilibrio del grupo de consumidores. Desde la primera visualización, no quedó del todo claro cómo sucede esto. No me refiero a un simple reequilibrio, sino a uno incremental. Esto tuvo que ser revisado y releído.



El tema es complejo en sí mismo. Viste el video y parece ser remotamente claro, pero quieres comprender claramente todos los procesos, por lo que debes revisarlo. Simplemente sentado con un lápiz para dibujar, entonces te das cuenta de que todo parece haberse aclarado.



Y para concluir te preguntaré: ¿qué tienes en tus planes de formación y trabajo?



Empecé a bloguear. Compré un dominio y lo elevé a DigitalOcean de forma gratuita: distribuyen contenido estático de forma gratuita. Bloguear me da un incentivo para aprender algo, escribirlo y compartirlo con otros. Entiendes el tema cuando puedes contárselo a alguien para que él también lo entienda.



Y el blog solo da la habilidad de volver a contar. Ahora me estoy ocupando de la eficiencia de los índices GIN. Pronto habrá un artículo sobre este tema, que se basa en la charla GolangConf del año pasado.



Siempre debes buscar por ti mismo: si tienes la fuerza, ¿por qué no leer el artículo sobre cómo funciona Go?



All Articles