Arquitectura de microservicios = Computación distribuida

¡Saludos a todos los lectores de Habr! Mi nombre es Igor Rybakov y soy el director técnico de la empresa de TI de Kazajstán DAR. Hoy compartiré con ustedes la comprensión y el uso de los principios de la computación paralela en los sistemas de información modernos. Para comprender esto más profundamente, me gustaría dar argumentos a favor del estudio y la aplicación práctica de los conceptos de computación paralela y distribuida en el desarrollo de sistemas de información modernos.


Computación paralela o qué hace el fundador de Intel


Primero, un poco de historia. En 1965, Gordon Moore, uno de los fundadores de Intel, descubrió un patrón: la aparición de nuevos modelos de microcircuitos se observó aproximadamente un año después de los predecesores, mientras que el número de transistores en ellos casi se duplicó cada vez. Resulta que el número de transistores colocados en el chip del circuito integrado se duplicó cada 24 meses. Esta observación llegó a llamarse la ley de Moore. El fundador de Intel predijo que el número de elementos en el chip aumentaría de 2 ^ 6 (aproximadamente 60) en 1965 a 2 ^ 16 (65 mil) en 1975 .


Ahora, para poder poner en práctica esta potencia informática adicional que Moore predijo, se hizo necesario utilizar la informática paralela. Durante varias décadas, los fabricantes de procesadores han aumentado constantemente la velocidad del reloj y el paralelismo a nivel de instrucción, de modo que en los nuevos procesadores las viejas aplicaciones de un solo subproceso se ejecutan más rápido sin ningún cambio en el código del programa.


Desde mediados de la década de 2000, los fabricantes de procesadores comenzaron a preferir una arquitectura multinúcleo, pero para aprovechar al máximo el mayor rendimiento del procesador central, los programas deben reescribirse de manera adecuada. Aquí surge un problema, porque de acuerdo con la ley de Amdahl , no todos los algoritmos pueden ser paralelizados, lo que determina el límite fundamental de la eficiencia para resolver un problema computacional en supercomputadoras.


Para superar este límite, se utilizan enfoques de computación distribuida. Esta es una manera de resolver problemas informáticos que requieren mucha mano de obra utilizando varias computadoras, que a menudo se combinan en un sistema informático paralelo. Los cálculos secuenciales en los sistemas de información distribuida se realizan teniendo en cuenta la solución simultánea de muchos problemas computacionales. Una característica de los sistemas informáticos multiprocesadores distribuidos, en contraste con las supercomputadoras locales, es la posibilidad de un aumento ilimitado en el rendimiento debido al escalado .


A mediados de 2005, las computadoras están equipadas de forma masiva con procesadores de múltiples núcleos, lo que permite la computación paralela. Y las modernas tecnologías de red le permiten combinar cientos y miles de computadoras. Lo que condujo a la aparición de la llamada "computación en la nube".


El uso de la computación paralela


Los sistemas de información actuales, como el comercio electrónico, tienen una gran necesidad de proporcionar servicios de calidad a sus clientes. Las empresas están compitiendo, inventando nuevos servicios y productos de información. Los servicios deben estar diseñados para alta carga y alta tolerancia a fallas, como usuarios de servicios, no una oficina, no un país, sino el mundo entero.


Al mismo tiempo, es importante preservar la viabilidad económica de los proyectos y no gastar fondos innecesarios en costosos equipos de servidor si el software antiguo que usa solo una parte de la potencia informática funcionará en él.


Los desarrolladores de sistemas de aplicaciones enfrentaron un nuevo problema: la necesidad de reescribir los sistemas de información para cumplir con los requisitos de las empresas modernas y la necesidad de utilizar mejor los recursos del servidor para reducir el costo total de propiedad. Las tareas que deben ser abordadas por los sistemas de información modernos son diversas.


A partir del aprendizaje automático y el análisis de big data, para garantizar un funcionamiento estable de la funcionalidad básica del sistema existente durante los períodos pico. Por ejemplo, aquí puede citar ventas masivas en la tienda en línea. Todas estas tareas se pueden resolver utilizando una combinación de computación paralela y distribuida, por ejemplo, implementando una arquitectura de microservicio.


Servicio de control de calidad


Para medir la calidad real de los servicios para un cliente, se utiliza el concepto de acuerdo de nivel de servicio (SLA), es decir, algunas métricas estadísticas del rendimiento del sistema.


Por ejemplo, los desarrolladores pueden establecer la tarea de que el 95% de todas las solicitudes de los usuarios se atiendan con un tiempo de respuesta que no exceda los 200 ms. Por cierto, son requisitos no funcionales bastante reales, porque a los usuarios no les gusta esperar.


Para evaluar la satisfacción del usuario con el servicio, puede usar el indicador Apdex, que refleja la proporción de respuestas exitosas (satisfechas) a insatisfactorias (insatisfactorias). Por ejemplo, nuestro valor umbral es SLA = 1.2 segundos, luego con el 95% del tiempo de respuesta de las solicitudes <= 1.2 segundos, el resultado será exitoso. En el caso de una gran cantidad de solicitudes de más de 1.2 segundos, pero menos de 4T (4.8 segundos), el resultado se considera satisfactorio, y cuando una gran cantidad de solicitudes excede de 4T, esos> 4.8 segundos, el resultado se considera un fracaso.


Conclusiones


Como resultado, me gustaría decir que el desarrollo de microservicios en realidad implica la comprensión y la aplicación práctica de la Computación Distribuida y Paralela.


Por supuesto, tendrás que sacrificar algunas cosas:


  • La simplicidad del desarrollo y mantenimiento: los esfuerzos de los desarrolladores para implementar módulos distribuidos;
  • Cuando se trabaja con bases de datos, la consistencia estricta (ACID) puede eliminar y requerir otros enfoques;
  • Se está gastando el poder de cómputo en comunicaciones de red y serialización;
  • Pasamos tiempo implementando prácticas de DevOps para un monitoreo y despliegue más complejo.

A cambio, obtenemos, en mi opinión, mucho más:


  • la capacidad de reutilizar módulos completos listos para usar y, como resultado, el lanzamiento rápido de productos en el mercado;
  • alta escalabilidad de los sistemas, lo que significa más clientes sin perder SLA;
  • Usando la consistencia eventual, basada en el teorema de CAP, tenemos la capacidad de administrar grandes cantidades de datos, de nuevo, sin perder SLA;
  • La capacidad de registrar cualquier cambio en el estado del sistema para su posterior análisis y aprendizaje automático.

Source: https://habr.com/ru/post/443988/


All Articles