¿Qué es arquitectura de alta concurrencia?

2/17
Recursos

Aportes 18

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Un sistema de alta concurrencia es cuando se habla de un numero de usuario que ya no puede manejar un solo servidor
Monolítica: Nosotros empezamos a codear nuestra aplicación, y esta aplicación corre en un solo servidor.
Microservicios: Cuando se empieza a desarrollar con muchas personas a la vez.
Metodologías para la concurrencia de un sistema.
Los microservicios se usan por:
*Poder escalar de forma independiente
*Nos permiten desarrollar mucho mas fácil
Que modelos y patrones debe conocer un desarrollador
*Uso de proveedores en la Cloud

Se debe comenzar a pensar en un sistema de alta concurrencia cuando se tiene una cantidad de usuarios que ya no puede ser manejada por un solo servidor o un monolito.

Los microservicios generalmente se usan cuando se quiere comenzar a desarrollar con muchas personas a la vez.

Lo microservicios se usan por dos razones:

  • Para poder escalar de forma independiente. Ejemplo: una aplicación (monolito) que procesa videos y también autentica usuarios; el procesamiento de videos tarda varios minutos mientras que consume muchos recursos, y por otro lado la autenticación tarda milisegundos y no consume prácticamente recursos. Si se quisiera escalar la aplicación, se debe escalar el servidor, y sería un desperdicio de recursos cuando no se esté procesando videos.
  • Permiten que las aplicaciones sean desarrolladas mucho más fácilmente. Un ejemplo claro es cuando 10, 50 o 100 desarrolladores trabajan al tiempo sobre un mismo repositorio; por más que utilicen un flujo de ramificación, no deja de ser difícil de manejar.
    No siempre hay que utilizar microservicios, sólo hay que saber evaluar en qué casos es conveniente implementar este modelo.

¿Qué patrones debe conocer un desarrollador al enfrentarse a un problema de alta concurrencia?
Lo principal es entender el uso de proveedores en la nube y los servicios que ellos nos brindan. Un ejemplo muy fácil, son los Object Stores, que en el caso de AWS, el equivalente serían los S3 Buckets. Este servicio nos permite almacenar archivos y hostear contenido de una forma fácil por medio de una API, y tiene muchas características, donde una de ellas es que no hay un límite de capacidad de almacenamiento; es decir, no debemos preocuparnos por tener discos grandes en nuestros servidores ni tener que estar pendientes para ampliarlos o limpiarlos. Esto nos permite crecer indefinidamente.

Hasta para dar soporte o hacer actualizaciones, en un monolito la piensas, haces miles de pruebas, etc. Si le mueves a algo mas servicios pueden verse afectados, en cambio en sistemas distribuidos puedes modificar un servicio sin afectar la infraestructura donde viven los demás

Buena explicación. NO volvernos locos con los Micro Servicios

está genial la música de fondo, así deberían ser todos los cursos. ayuda a concentrarse

Un sistema de alta concurrencia es difícil de definir, porque a variables como la vertical de negocio, revenue entre otros conceptos.

Pero una vez tengamos claridad del negocio, de los SLA, entre otras métricas, con estos ingredientes, se define un dimensionamiento correcto para la aplicación de misión crítica.

Arquitectura de alta concurrencia es relativo, pero en general hace referencia a una cantidad de usuarios que hacen que un sólo servidor no lo pueda manejar (sigue siendo relativo dado que 1 servidor puede tener diferentes capacidades), más o menos de 16-32GB de RAM, a partir de ahí ya se puede comenzar a pensar en arquitectura de alta concurrencia.

  • Inicialmente las aplicaciones suelen construir de en forma de monolito eso quiere decir que cuando esté en producción todo correrá en el mismo servidor
  • Cuando queremos comenzar a trabajar con más personas lo que suele hacerse es que separamos esa aplicación en microservicios
<h5>Microservicios</h5>

Usados generalmente por alguna de las siguientes razones:

  • Escalado independiente: Cuando tengo dos servicios que requieren diferente poder de procesamiento es posible que tenga que escalar todo el servidor incluso para los servicios que no requieren tanto pdoer de cómputo, por eso se suele dividir en microservicios para no desperdiciar recursos.
  • Desarrollo con más facilidad: Cuando el equipo comienza a crecer imagina lo que ocurre cuando se va a modificar un proyecto, por esta razón se puede separar para manejarlo más fácilmente.
<h5>Modelos y patrones de conocimiento (problemas de alta concurrencia)</h5>
  • Uso de proveedores en la nube y los servicios que ellos prestan

Arquitectura de Alta Concurrencia:
Número de usuarios que ya no puede manejar un sólo servidor. o monolito. Dada esta situación aquí se debe
implementar la Arquitectura de Alta Concurrencia.

Los Microservicios se utiizan generalmente cuando quieres empezar a poder desarrollar con muchas personas a la vez

Los Microservicios se usan por 2 razones:

  • Poder escalar de forma independiente
    Separar funciones, estas diferentes partes de nuestra aplicación en diferentes servicios, podemos crecer por ejemplo
    la parte de procesamiento de vídeos y la parte de autenticación dejarla más pequeña.
  • Nos permiten desarrollar mucho más facilmente
    Por ejemplo teniendo un equipo de 100, 50 o 10 desarrolladores se empieza a complicar el modificar ese código de
    un sólo repositorio o mismo lugar. No quiere decir que siempre hay que separar, simplemente hay que pensar,
    que aplica en cada caso…

Modelos y patrones que debe conocer un desarrolladoral tener un problema de Alta Concurrencia:
Entender el uso de los proveedores de la nube y conocer los servicios que ellos nos brindan.
Ejemplo:
Object Storage o los Bucket S3
Nos permiten subir contenido o archivos de una forma fácil por medio de una API. No nos preocupamos por lo que
guardamos, ya que nos permite crecer indefinidamente (Storage infinito). Nos permite escalar, podemos poner muchos
de estos archivos en estos Object Store (No dependeremos de Servidores con Discos grandes o Servidores Grandes).

Microservicios: Cuando se empieza a desarrollar con varias personas a la vez. Se usan:

  • Escalar de forma independiente
    -Permiten desarrollar fácilmente
    No siempre es necesario, primero se debe evaluar

¿Qué es arquitectura de alta concurrencia?

  • Una arquitectura de alta concurrencia resulta necesaria cuando tu aplicación, que está desplegada en uno o pocos servidores (con 16 o 32 GiB de RAM), ya no satisface los requerimientos funcionales y no funcionales del negocio y del sistema debido a que el número de usuarios ha crecido más allá de la capacidad del sistema.
  • Inicialmente, el estilo monolítico, desplegado en un solo servidor, puede funcionar, pero a medida que crece el número de usuarios este se queda atrás
    • Un monolito es una aplicación desplegada y desarrollada en un mismo lugar, todas las funcionalidades en un solo lugar
  • Los microservicios son útiles cuando se quiere dividir la carga de trabajo del sistema y de los desarrolladores,
    • No hay que volverse loco con los microservicios, no es necesario tratar de dividir todo, solo lo necesario
    • Permite escalar de manera independiente
      • Ejemplo con youtube
        • Un servicio del sistema de youtube se encarga de procesar videos, esta parte puede crecer de manera independiente según las necesidades del negocio
        • Otro servicio del sistema puede encargarse de la autenticación de usuarios, este puede ser más pequeño
    • De esta manera no se concentra todo el trabajo en un solo servidor, cada microservicio tendría su propio servidor
    • Cada equipo de trabajo se encarga de un microservicio de manera independiente, una ventaja de esto es que los repositorios de código no están sobrecargados con cientos de programadores, además, permite que se pueda usar un stack de tecnología distinto para microservicio
  • Es necesario conocer la computación en la nube
    • Buckets S3 de AWS u “Object Store”
      • Permiten subir y almacenar archivos pesados a través de una API
      • Almacenamiento “infinito”
      • Sirven para escalar y no preocuparse por el almacenamiento en los servidores de la apliación

Empezar una aplicacion como un monolito esta genial, asi puedes enfocar tus esfuerzos en el modelo de negicio y en tus clientes, estas probando el mercado, lo que se conoce como un minimum viable product (MVP), si la aplicacion es un exito estara claro que sera mas concurrida y entonces tendras que pensar en formas de poder escalarla.
Los microservicios son la manera mas natural de poder escalar, ya que nos permite escalar aquillos servios que necesitan ser escalados, independiente de los demas servicios.

Conocer los diferentes servios que un cloud provider ofrece es importante a la hora de construir una arquitectura de alta concurrencia

Ahora si viene lo chido

Es necesario conocer la computación en la nube
Buckets S3 de AWS u “Object Store”

Gracias

Los microservicios permiten dividir en varias partes un monolito, de esta forma se establecen equipos para cada parte, estos equipos tienen la libertad (si no hubo una restricción) de elegir los lenguajes para implementar sus respectivas soluciones.

Los microservicios, permite hacer un escalamiento de una manera más sencilla, también se utilizan en equipos de trabajo bastante grandes, dentro de AWS creo que esta parte de microservicios se puede implementar con los servicios de: AWS EKS, ECS, Fargate, y EC2 para hostear nuestros containers tipo docker por ejemplo.

En un sistema que se basa en microservicios tiene la posibilidad de balancear los recursos y solo incrementar los recursos en donde es necesario, lo que finalmente se traduce en un aprovechamiento del recurso y finalmente del costo.