Optimizando la Arquitectura de Microservicios para Alto Rendimiento y Resiliencia

Rate this content
Bookmark

- Adentrarse en las complejidades de optimizar la arquitectura de microservicios para lograr alto rendimiento y resiliencia.

- Explorar los desafíos relacionados con los cuellos de botella de rendimiento y la resiliencia en sistemas basados en microservicios.

- Profundizar en las estrategias para mejorar el rendimiento, como protocolos de comunicación eficientes, mensajería asincrónica y balanceo de carga, al mismo tiempo que se discuten técnicas para construir resiliencia, incluyendo interruptores de circuito, tolerancia a fallos e ingeniería del caos.

- Explorar herramientas y tecnologías relevantes, como service mesh y orquestación de contenedores, y ofrecer estudios de casos perspicaces y lecciones aprendidas de implementaciones del mundo real.

- Enfatizar la importancia de la mejora continua y la adaptación en entornos de microservicios, junto con reflexiones sobre la trayectoria futura de la arquitectura de microservicios.

Santosh Nikhil Kumar
Santosh Nikhil Kumar
24 min
04 Apr, 2024

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy discute estrategias de optimización de microservicios para sistemas distribuidos, centrándose específicamente en la implementación de consistencia casual para garantizar la sincronización de datos. Los relojes vectoriales se utilizan comúnmente para rastrear la relación casual entre eventos de escritura en sistemas distribuidos. La consistencia casual permite operaciones concurrentes e independientes sin sincronización, maximizando el paralelismo y la utilización de recursos del sistema. Permite una escalabilidad efectiva, mejor latencia y tolerancia a fallos en sistemas distribuidos a través de la coordinación, resiliencia, reconfiguración, recuperación y replicación de datos.

1. Microservices Optimization Strategies

Short description:

Hola, espectadores. Hoy hablaré sobre las estrategias de optimización de microservicios para sistemas distribuidos. La consistencia casual es crucial para garantizar la sincronización de datos en múltiples servidores. La implementación de algoritmos de consistencia casual puede mejorar el rendimiento del sistema. Un ejemplo del mundo real es Google Docs, donde varios usuarios pueden editar simultáneamente un documento. Las ediciones de los usuarios se envían a los servidores correspondientes, asegurando la consistencia casual.

Hola, espectadores. Soy Santosh. Actualmente trabajo en PyTance como líder de ingeniería en el área de la Bahía de San Francisco. Hoy hablaré sobre las estrategias de optimización de microservicios para el alto rendimiento y la resistencia de estos sistemas distribuidos. Así que hoy daré algunos ejemplos e intentaré explicar con esos ejemplos que están muy relacionados con todos nosotros en nuestro uso diario. Entonces, ¿qué son estos sistemas distribuidos o sistemas a gran escala? Puedo dar algunos ejemplos como Google Docs o algunos sistemas de reserva como reservas de vuelos o películas, donde muchos de nosotros hacemos solicitudes concurrentes, intentamos editar los documentos y Google Docs en paralelo. ¿Y qué se debe considerar? ¿Qué estrategias de optimización se deben considerar cuando construimos tales sistemas? Entonces, primero y ante todo, entremos en esto. Así que, consistencia casual. Ahora, a menudo hablamos de consistencia en sistemas distribuidos, donde no tenemos solo un servidor backend en los sistemas distribuidos. Tienes múltiples sistemas coordinando entre sí, digamos, las escrituras van a un sistema y las lecturas van a otro sistema. Y quieres que los datos entre el servidor de escritura y el servidor de lectura estén sincronizados. O tienes múltiples nodos ubicados geográficamente, uno en EE. UU., otro en, digamos, India o Europa, y los usuarios realizan algunas solicitudes de reserva. Y en última instancia, acceden a la misma base de datos. Están tratando de reservar el último asiento de un avión y el avión, todos intentan acceder al mismo asiento, las solicitudes llegan a diferentes servidores. Pero estos servidores necesitan coordinarse de alguna manera. Nuestros datos deben ser consistentes en estos servidores de alguna manera, de modo que brinden servicios de manera perfecta a todos los usuarios.

Entonces, la consistencia es cuando tienes diferentes servidores atendiendo las solicitudes de varios usuarios, quieres que los datos sean los mismos o consistentes en todos estos servidores. Y ahora, en eso, hay algo llamado consistencia casual. Y si como arquitecto de software podemos abordar esto, realmente podemos incorporar la consistencia casual o implementar algoritmos de consistencia casual en tus sistemas distribuidos backend que realmente pueden mejorar el rendimiento de tu sistema. Ahora, hablemos de un caso de uso. Entonces, es un caso de uso muy común, como puedes ver aquí, un Google Doc, ¿verdad? Como ejemplo del mundo real, la consistencia casual se puede ver en una aplicación de edición colaborativa como esta. En Google Docs, varios usuarios pueden editar simultáneamente un documento. Las ediciones de cada usuario se envían a sus servidores respectivos. Como puedes ver aquí, solicitud de escritura, el usuario 1 intenta escribir una oración en el documento y el usuario 2 también hace lo mismo, realiza la escritura. Y hay varios usuarios que intentan leer como los usuarios 3 y 4. Entonces, aquí, lo importante a tener en cuenta es que la escritura realizada por el usuario 1 y las escrituras realizadas por el usuario 2 están relacionadas. ¿Cómo están relacionadas? Como el usuario 1 escribe una oración 1 en el documento y el usuario 2 está escribiendo la oración 2 después de leer el documento, como puedes ver los pasos 2 y 3 en morado. Entonces, la actividad de escritura del usuario 1 y del usuario 2 dependen entre sí, eso significa que la oración 2 escrita por el usuario 2 depende del usuario 1. Entonces, cuando eso significa que en el mundo distribuido lo llamamos casual, relacionado casualmente, relación casual. Entonces, ahora si el usuario 3 y 4, intentan solicitar o intentar leer los documentos que se comparten con ellos, como puedes ver el paso número 4 por leer.

2. Implementando Consistencia Casual

Short description:

Primero, el orden de las ediciones en un documento colaborativo es crucial. La consistencia casual garantiza que las ediciones más recientes aparezcan después de las anteriores para una experiencia de edición fluida. Sin consistencia casual, los usuarios pueden ver diferentes versiones del documento en diferentes dispositivos. Incorporar consistencia casual asegura una vista consistente del historial del documento y preserva las relaciones entre las ediciones. Coordinar los nodos en un sistema distribuido es necesario para lograr consistencia casual.

del usuario 3 y 4, amarillo y azul, obtienen la respuesta. Primero obtienen la oración 1, porque esa es la que escribió el usuario 1. Y luego, cuando hacen una segunda lectura como paso número 5, obtienen la oración 2, porque esa es la oración escrita por el usuario 2 en esa secuencia. Entonces, primero, deben leer la oración 1 y luego deben leer la oración 2 en ese orden particular. Entonces, ¿por qué? Porque, como puedes pensar, cuando estás usando comúnmente el documento de Google y varias personas lo están editando, no quieres ver las ediciones más nuevas primero, sino que quieres ver las ediciones más antiguas primero. Entonces, porque estos son eventos dependientes. Esto significa que la oración del usuario b siempre aparecerá después de la oración del usuario a, independientemente del orden en que las ediciones sean recibidas por el servidor backend o por los otros dispositivos de los usuarios. Entonces, sin consistencia casual, ¿verdad? Eso significa que necesitamos identificar en el servidor backend que estos dos eventos o estas dos transacciones de escritura son dependientes entre sí y se mantienen de esa manera en el sistema distribuido, para que cada vez que se realicen operaciones de lectura por otros usuarios como los usuarios 3 y 4, se mantenga ese orden. Sin esa consistencia casual, los usuarios podrían ver diferentes versiones del documento con ediciones que aparecen en diferentes órdenes en diferentes dispositivos. Esto podría llevar a mucha confusión y dificultar la colaboración efectiva de los usuarios. Entonces, la consistencia casual es una estrategia crítica de optimización que debe incorporarse para garantizar que todos los usuarios tengan una vista consistente del historial del documento, preservando las relaciones casuales entre las ediciones y proporcionando una experiencia de edición fluida. Ahora, profundicemos un poco en esto. Como acabamos de discutir, hay operaciones de escritura que llegan a los nodos o servidores backend 1 y 2, y luego tienes los nodos 3 y 4 donde llegan las lecturas, y debe haber alguna forma en que todos estos nodos deben coordinarse, ¿verdad? Porque no puedes tener los datos de lectura en los nodos 3 y 4 sin

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced Conference 2022React Advanced Conference 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
React es una biblioteca para "renderizar" UI a partir de componentes, pero muchos usuarios se encuentran confundidos acerca de cómo funciona realmente el renderizado de React. ¿Qué significan términos como "renderizado", "reconciliación", "Fibers", y "committing"? ¿Cuándo ocurren los renderizados? ¿Cómo afecta el Contexto al renderizado, y cómo las bibliotecas como Redux causan actualizaciones? En esta charla, aclararemos la confusión y proporcionaremos una base sólida para entender cuándo, por qué, y cómo React renderiza. Veremos: - Qué es realmente el "renderizado" - Cómo React encola los renderizados y el comportamiento de renderizado estándar - Cómo se utilizan las claves y los tipos de componentes en el renderizado - Técnicas para optimizar el rendimiento del renderizado - Cómo el uso del contexto afecta al comportamiento del renderizado - Cómo las bibliotecas externas se integran en el renderizado de React
Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
¿Tienes un producto grande construido por muchos equipos? ¿Estás luchando para lanzar a menudo? ¿Se convirtió tu frontend en un monolito inmantenible masivo? Si, como yo, has respondido sí a cualquiera de esas preguntas, ¡esta charla es para ti! Te mostraré exactamente cómo puedes construir una arquitectura de micro frontend con Remix para resolver esos desafíos.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
¿Demasiado JavaScript te está agobiando? Los nuevos marcos que prometen no usar JavaScript parecen interesantes, pero tienes una aplicación React existente que mantener. ¿Qué tal si Qwik React es tu respuesta para un inicio de aplicaciones más rápido y una mejor experiencia de usuario? Qwik React te permite convertir fácilmente tu aplicación React en una colección de islas, que pueden ser renderizadas en el servidor y rehidratadas con retraso, e incluso en algunos casos, se puede omitir la rehidratación por completo. Y todo esto de manera incremental sin una reescritura.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
¡React 18! ¡Funciones concurrentes! Tal vez ya hayas probado las nuevas APIs como useTransition, o tal vez solo hayas oído hablar de ellas. Pero, ¿sabes cómo React 18 logra las mejoras de rendimiento que trae consigo? En esta charla, echemos un vistazo bajo el capó de las características de rendimiento de React 18: - Cómo React 18 reduce el tiempo que tu página permanece congelada (también conocido como TBT) - Qué sucede exactamente en el hilo principal cuando ejecutas useTransition() - Cuál es la trampa con las mejoras (¡no hay torta gratis!), y por qué Vue.js y Preact se negaron rotundamente a lanzar algo similar
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Nuestra comprensión del rendimiento y la experiencia del usuario ha evolucionado mucho a lo largo de los años. Las herramientas de desarrollo web necesitan evolucionar de manera similar para asegurarse de que sean centradas en el usuario, accionables y contextuales donde se refiere a las experiencias modernas. En esta charla, Addy te guiará a través de cómo Chrome y otros han estado pensando en este problema y qué actualizaciones han estado haciendo a las herramientas de rendimiento para reducir la fricción para construir grandes experiencias en la web.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
Remix es un marco de trabajo web que te ofrece el modelo mental simple de una aplicación de múltiples páginas (MPA) pero el poder y las capacidades de una aplicación de una sola página (SPA). Uno de los grandes desafíos de las SPA es la gestión de la red que resulta en una gran cantidad de indirecciones y código defectuoso. Esto es especialmente notable en el estado de la aplicación que Remix elimina por completo, pero también es un problema en los componentes individuales que se comunican con un punto final de backend de un solo propósito (como una búsqueda de combobox, por ejemplo).
En esta charla, Kent demostrará cómo Remix te permite construir componentes de interfaz de usuario complejos que están conectados a un backend de la manera más simple y poderosa que hayas visto. Dejándote tiempo para relajarte con tu familia o lo que sea que hagas para divertirte.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Depuración del Rendimiento de React
React Advanced Conference 2023React Advanced Conference 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos cómo analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Master Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Master Patrones de JavaScript
Workshop
Adrian Hajdin
Adrian Hajdin
Durante este masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debe conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final del masterclass, los participantes ganarán confianza en su capacidad para escribir código JavaScript de alta calidad que perdure en el tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento profesional y las oportunidades de avance en la industria del software