Crea una cuenta o inicia sesión

¬°Contin√ļa aprendiendo sin ning√ļn costo! √önete y comienza a potenciar tu carrera

Tipos de escalamiento: vertical y horizontal

3/17
Recursos

Aportes 25

Preguntas 1

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

AUTOSCALING ANIDADO

Es un poco complejo implementar el escalado, ya que en mi caso requerí de mucha información y parametrización para poder implementar lo que le llamamos escalado horizontal anidado.

Teníamos una aplicación corriendo en Kubernetes y que tenía mínimo 1 pod y máximo 3 corriendo. Todo bien, después con el tiempo nos dimos cuenta de que la usabilidad de la aplicación iba creciendo exponencialmente y al no estar preparados la aplicación comenzó a experimentar fallos (a pesar de usar kubernetes en AWS).

Que decidimos hacer?

  • medimos las horas pico de usabilidad
  • medimos la cantidad de recursos que se utilizan en esas horas
  • con base a ello se parametriz√≥ de manera m√°s eficiente la cantidad de pods que se utilizar√°n y los disparadores que crear√°n estos pods.

Pero la legión del mal atacó nuevamente. Sin embargo esta vez el servidor que servía como worker node estaba saturado por lo que teníamos que tomar una decisión:
¬ŅLe incrementamos en recursos?
Sabíamos que incrementar en recursos no era muy eficiente, puesto que solo se utilizaría en cierta cantidad de tiempo. Por otro lado el hecho de incrementarle recursos implicaba apagar la máquina virtual así como tratar de parametrizar la hora más eficiente para subir los recursos

¬ŅQu√© decidimos hacer??

  • volver a medir, medir y medir.
  • separamos el plano de datos (media) que viv√≠an en el servidor (worker node) y lo implementamos via EFS con el fin de evitar inconsistencias de datos.
  • implementamos crecimiento horizontal de los worker nodes con el uso de autoscaling groups.
  • voila (como dicen en Espa√Īa ese servicio no lo tumba ni Dios)

Escalamiento vertical: Aumentar la potencia de servidor
Escalamiento horizontal: Aumenta el numero de servidores

Un ejemplo de DB:

  • MySQL (escalamiento vertical)
  • MongoDB (escalamiento horizontal)

Escala verticalmente cuando las tareas que se realizaran sean pesdas y horizontalmente cuando las tereas sean muy concurrentes.
ahora si la tarea es pesda y muy concurrente, reviza tu app y sino se puede hacer mas, escala de ambas formas, pero para no gastar demaciodos recursos, escala solamente en las hroas pico cuando tu app este mas saturada.

¬ŅC√≥mo se sabe que una aplicaci√≥n o microservicio necesita escalamiento vertical u horizontal?

  • El escalamiento vertical es simplemente agrandar el tama√Īo de las instancias.
  • El escalamiento horizontal se da cuando en vez de agrandar los servidores, se crean m√°s servidores.

Un tipo de escalamiento no es mejor que otro, se debe implementar uno u otro dependiendo de las necesidades.

¬ŅExiste alg√ļn caso de uso donde se prefiera un escalamiento vertical a horizontal al momento de atender problemas de alta concurrencia?
En el caso de que tengamos muchas peticiones cortas, no necesitamos un escalamiento vertical, sino uno horizontal. Esto nos permitirá recibir más peticiones y escalar independientemente; las diferentes partes de nuestra aplicación pueden crecer sin necesidad de estar involucradas en otras.

Continuando con el ejemplo de la clase anterior, podríamos escalar verticalmente los recursos encargados del procesamiento de videos y escalar horizontalmente los recursos encargados de la autenticación de usuarios (se pueden implementar los dos tipos de escalamientos en una misma infraestructura a diferentes recursos). De esta forma seremos más eficientes a la hora de usar recursos. Y esto no solamente nos permitirá ahorrar dinero, sino que podemos elegir recursos que sean mejores en unas cosas que en otras; por ejemplo, en algunos proveedores de nube hay algunas instancias de servidores que especiales para GPU (tienen un procesador de gráficas mucho mejor que el de los servidores comunes), otras especiales en CPU (tienen más procesamiento) u otras con más memoria RAM (pueden ser usadas por ejemplo para caché).

Debemos siempre tener en cuenta que tenemos diferentes tipos de recursos y diferentes formas de escalar que pueden ser aplicadas de diferentes maneras dependiendo del uso de nuestra aplicación.

Algo que manejamos en el equipo al que pertenezco:

  1. Comprender el objetivo de los servicios que manejamos en nuestros servidores.
  2. Tener una medición de la cantidad de solicitudes que se atienden, asi como el consumo de los recursos

En base a la información debemos definir una metrica con respecto al performance (por lo general entiendo es tipo de respuesta del servicio, para casos sincronos), definiendo el margen aceptable para el redimiento de nuestros servicios por ejemplo que el tiempo de respuesta sea de (.5 a 1 segundo).

Con este Margen:

  1. Si no llegamos a los tiempos de los servicios debido a que no tenemos recursos, se debe pensar en escalar verticalmente. Generalmente existen parametros dependiendo de la tecnología, por ejemplo hasta cuanta memoria se puede asignar a una JVM, etc.
  2. Si notamos que en base a la cantidad de requerimientos procesados el performance se ve impactado, se debe pensar en escalar horizontalmente.

Tipos de escalamiento: vertical y horizontal

  • Escalamiento vertical
    • Consiste en aumentar los recursos computacionales de un servidor o m√°quina (ya sea virtual o no). Por ejemplo, incrementar la memoria RAM de 16GiB a 32GiB, de esta manera disminuyen los fallos de paginamiento del sistema operativo, lo que incrementa la velocidad de ejecuci√≥n de los procesos
    • Este tipo de escalamiento es √ļtil en el procesamiento de video, puesto que el servidor o m√°quina en cuesti√≥n tiene que ser capaz de ejecutar todos los procesos necesarios para procesar el video en un tiempo aceptable para el negocio y sin fallas
  • Escalamiento horizontal
    • Consiste en crear m√°s servidores, es decir, r√©plicas
    • Este tipo de escalamiento es √ļtil cuando se quiere poder atender un mayor n√ļmero de peticiones concurrentes en una misma ventana de tiempo. Por ejemplo, si se quiere pasar de cien mil autenticaciones exitosas concurrentes cada segundo a ciento cincuenta mil cada segundo, ser√≠a buena idea agregar r√©plicas de los componentes de autenticaci√≥n de usuarios
  • Ambos tipos de escalamiento se pueden combinar
  • Existen varios tipos de servidores
    • Especializados en GPU, para procesamiento gr√°fico
    • Especializados en CPU, para procesos normales
    • Especializados en m√°s memoria RAM, pueden ser √ļtiles para cach√©

Yo una vez discuti con mi lider de área porque tengo un ambiente Web balanceado mediante un BIGIPF5 y solicité un par de servidores más de los que ya tenía para resolver solicitudes, y él me comentaba que porque no esclarlo de forma Vertical, para mi fue difícil decirle que lo que sufríamos no era de procesamiento si no de disponiblidad con los servicios que se saturaban con tareas y requeriamos de dejar servidores libres por lo tanto sugería escalar de forma horizontal, fue un kaos después de varias sesiones, diagramas y explicar el flujos de las apps por fin cedió en fin, es un tema difícil escoger una u otra porque los escenarios pueden ser muy diferentes.

Escalamiento horizontal en caso de ataques ddos o campa√Īas de marketing

Tipos de escalamiento
-Vertical: Agrandar el tama√Īo de la instancia
-Horizontal: Creamos m√°s servidores

Un Caso de Escalamiento es vertical puede ser para servidores de monitoreo, por lo cual se enfocan siempre en el procesamiento para realizar sus operaciones.

Un escalamiento vertical en un cluster de servidores (ej Hypervisores) sería ampliar la capacidad de mis nodos en RAM y Procesador de cada uno de ellos y el vertical claramente agregar mas nodos a mi cluster. Con una SAN vertical sería crecer en discos en mi cajon o mejorar los discos a All Flash, y horizontal sería agregar otra SAN a mi red.

Un ejemplo de escalamiento Horizontal: Tenemos un microservicio que procesa transacciones a nivel nacional, un d√≠a dej√≥ de operar por un problema de red en domingo al medio d√≠a, nadie se dio cuenta hasta el domingo a media noche, cuando entramos a revisar para echarlo a andar de nuevo, ya ten√≠a 120k transacciones atoradas y m√°s llegando, afortunadamente estaba en docker y k8s, se modific√≥ el deploy para que las replicas fueran 3, y se escal√≥ tambi√©n el n√ļmero de mensajes que pod√≠an consumir, como el n√ļmero de instancias hac√≠a match con sus indices cada instancia proces√≥ sus propios mensajes sin afectar a los dem√°s. La velocidad de procesamiento se increment√≥ x10 ¬Ī un proceso que podr√≠a haber durado unas 6 horas en atender transacciones atoradas termin√≥ en 40 minutos.
Un ejemplo de escalamiento Vertical: Una aplicación web de reportería tardaba como 20 mi en generar 1 sólo reporte, que aunque la conexión y consultas a BD eran optimas, internamente la aplicación hacia muchos cálculos, transformaciones y complementos de datos, La opción fue darle más poder de procesamiento al server y el tiempo bajó a 2 minutos.

El escalado vertical (o ‚Äúescalamiento hacia arriba‚ÄĚ) es un enfoque utilizado para aumentar el rendimiento de un sistema al agregar m√°s recursos a una sola m√°quina o servidor. Esto se logra mediante la adici√≥n de m√°s CPU, RAM, almacenamiento u otros recursos al servidor existente.

<h5>Escalamiento vertical</h5>

Agrandar el tama√Īo de la instancia por mayor demanda

  • En lugar de tener 4 GB de RAM escalar el servidor a 32GB por ejemplo
<h5>Escalamiento horizontal</h5>

Creamos m√°s servidores

  • En lugar de tener 1 tener 2 o m√°s
<h5>Casos de uso</h5> <h6>Muchas peticiones</h6>
  • Cuando tengo muchas peticiones a mi servidor no se solucionar√°n con un escalado vertical ya que el servidor ya est√° saturado por lo que en un caso como esos es recomendable aumentar la cantidad de servidores

Nota: Los servicios se pueden escalar de manera independiente

Gracias

Escalamiento vertical: el servidor de base de datos
Escalamiento horizontal: microservicio de notifications

en las bases de datos, por ejemplo, si tu aplicacion o modulo esta manejando datos sensiibles como transacciones de dinero, yo usaria una base de datos relacional, las cuales normalmente se escalan solo de forma vertical, pero me dan la ventaja de la integridad de data, si encambio la integridad no es lo mas omportante, podria usar una base de datos nosql y escalarla horizontalmente

Escalamiento Vertical: Crecimiento de los recursos del servidor. Comerte el pudin de un solo bocado.
Escalamiento Horizontal: Aumentar el numero de servidores. Comerte el pudin en muchos mas bocados al tiempo.

un ejemplo de Escalamiento vertical podría ser alguna aplicación que por su desarrollo, no soportaría el escalamiento horizontal y nos limitamos al vertical.

Ejemplos de tipos de escalamiento:

Para escalamiento vertical: Compresión de archivos, o incluso procesos automátizados de estadísticas que requieran mucho cálculo y se realicen x cantidad de veces durante un periodo de tiempo definido

Para escalamiento horizontal: Saturación de requests sobre un API, necesitaríamos crear más servidores para suplir esa demanda de tráfico

Escalamiento vertical: Un repositorio de almacenamiento, base de datos, im√°genes, fotos o videos

Escalamiento horizontal: Para dividir la aplicación en varios servicios, o levantar mas servidores para atender las solicitudes.

Grande Pelado muchas gracias

Para el caso de una aplicación de compras de ticketes, podemos usar el servicio de scale set de k8s para que en caso de altas concurrencias cree, las instancias necesarias a nivel horizontal. En tema vertical puede ser un servicio alojado en un contenedor el cual al momento de llegar al límite definido se le asigne más memoria o CPU con el fin de suplir la demanda temporal.

Totalmente de acuerdo.