Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
3 Hrs
45 Min
42 Seg

Tipos de escalamiento: vertical y horizontal

3/17
Recursos

Aportes 26

Preguntas 1

Ordenar por:

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

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)

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é

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.

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.

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.

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.

Ojo, porque suena muy bonito decir: Escalamos de manera horizontal o vertical dependiendo del caso de uso. Pero aqui la verdadera pregunta seria, como se cuando hay que escalar un servicio? Bueno, con el monitorio de nuestros recursos nosotros podemos registrar ciertos thresholds o limites para que una vez esos limites se hayan superado, empecemos a escalar nuestros servers, containers, etc

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.

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.