fcbk
Conéctate con TwitterConéctate con Facebook
9

3 consejos para ti, futuro SysAdmin

4957Puntos

hace 5 meses

Si estás trabajando en un proyecto de desarrollo web o móvil probablemente estás esperando que crezca rápidamente. En este artículo te daré 3 consejos sobre la escalabilidad de una aplicación, que probablemente te ayudarán cuando te enfrentes a este desafío.

La cruda realidad

Cuando uno comienza a trabajar hay mucho desconocimiento, así se tengan las mejores habilidades técnicas. En mi caso entré a Platzi como Backend Developer y terminé también administrando los servidores de la aplicación. Resulta que no es lo mismo administrar un sitio o aplicación con unos pocos miles de usuarios a administrar los servidores de cientos de miles al mes. Parece obvio, pero no lo es. Gracias a esta experiencia aprendí varias cosas a veces por las malas de cómo se logra escalar una aplicación web en la nube o en cualquier servicio de infraestructura que tengas a tu disposición y que te explicaré a continuación.

Escalar una aplicación horizontalmente

Por lo general en un sitio pequeño si necesitas más recursos solo contratas un servidor más grande y migras la aplicación, eso es totalmente válido. Sin embargo, cuando tu aplicación crece demasiado vienen nuevos retos: ¿Cómo reaccionas ante una subida de tráfico? ¿Cómo obtienes alta disponibilidad? ¿Qué hacer si el servidor muere? Es aquí cuando el escalamiento horizontal entra en juego. Agregar más nodos de una aplicación soluciona estos problemas y trae otros, como el de la configuración, pero al menos ganas terreno y tiempo contra el problema de subida de tráfico y alta disponibilidad.

Algo a tener en cuenta, sobre todo si usas proveedores de cloud como AWS, Azure o Google Cloud, es que ellos tienen formas de escalar automáticamente -que requieren configuración-. Muchas veces esto funciona mejor de lo que uno pudiera hacer, así que te recomiendo que uses, por ejemplo, Auto Scaling Groups, CloudWatch + Load Balancers para tu aplicación, no es algo indispensable pero hará tu vida más fácil.

Sobre costos, escalar verticalmente puede traerte más gastos a largo plazo porque debes mantener un servidor encendido todo el día y muy probablemente usando una porción del total de sus recursos.

Escalar bases de datos

Al contrario de una aplicación web, escalar una base de datos puede ser difícil algunas veces, o quizás más crítico porque al final del día es la información de tu aplicación/empresa. Si crees que tu aplicación tendrá millones de registros y que podrías estar ante un gran proyecto, lo que te recomiendo es configurar tu base de datos con opción de escalamiento desde el primer día. Está claro que muchas veces uno no hace eso y se encuentra con una base de datos de gran tamaño que ya toca escalar o incluso migrar, como en nuestro caso pasando de MySQL a PostgreSQL, pero eso es tema de otro artículo.

Si ya tienes una base de datos andando y no está configurada correctamente para escalar, lo mejor es atacarlo ahora, porque seguirá creciendo y después será más delicado hacer cambios que puedan corromper la base de datos.

El escalamiento en base de datos SQL por lo general es vertical. Si te quedas corto con el servidor actual una acción fácil es instalar más RAM, disco y procesador, eso es rápido y no requiere una configuración especial más allá de las optimizaciones que desees hacer.

Con respecto a las bases de datos NoSQL, en muchos casos es más sencillo porque están pensadas para escalar horizontalmente. Siempre hay que tener cautela porque es la información de tu aplicación/empresa. HAZ BACKUPS.

Administrar servidores con WebSockets (WS)

Cuando uno está desarrollando un chat, que es lo más común que usa WebSockets, parece una tarea trivial. Montas un servidor, un Nginx o HAProxy y listo. Eso andará hasta obtener 5 millones de usuarios con tu servidor de 1GB de RAM y 1 CPU. No hay nada más falso que eso.

WebSocket es algo que al principio se ve sencillo pero su administración se complica, sobre todo con la forma de escalar. En este caso el escalamiento vertical es la mejor opción si el crecimiento de tu aplicación es constante pero lento.

Si creces rápido, necesitas aumentar tu disponibilidad en momentos críticos. Por ejemplo un partido de fútbol: si tu aplicación es un chat de fútbol, los domingo serán días muy movidos. Debes pensar cómo configurar HAProxy o Nginx para que mantenga sesiones entre el usuario y el servidor que inició la conexión, porque sino tendrás muchos problemas de re-conexión que terminarán aumentando el consumo de tus servidores y haciendo que pierdas dinero e incluso tu aplicación se caiga en medio del momento más importante para tu aplicación.

Ten en mente que los WS podrían consumir muchos recursos de red, es decir tráfico de entrada o salida, así que es importante que tengas ese problema en tu radar para tomar una buena decisión sobre elegir escalamiento vertical u horizontal.

Resumen

En la mayoría de los casos, en mi humilde opinión, escalar horizontalmente es lo mejor, no lo más fácil pero si lo mejor a largo plazo para tu aplicación. Entiendo también que a veces no hay suficiente presupuesto o tiempo así que no te sientas cohibido de usar el escalamiento vertical si es tu salvación en el momento, lo importante es que tus usuarios puedan acceder a tu aplicación ten en mente eso.

Te recomiendo que veas el siguiente vídeo

Me gustaría que compartieras en los comentarios si ya has trabajado como SysAdmin. ¿Cuál es la mayor lección que has aprendido en ese proceso? ¿qué te parece más importante a la hora de administrar un servidor?

Espero tu comentario 😃

Yohan
Yohan
@yograterol

4957Puntos

hace 5 meses

Todas sus entradas
Top
Nuevas
4
259Puntos
5 meses

Si justo como dices “pero resulta que no es lo mismo administrar un sitio o aplicación con unos pocos miles de usuarios a administrar los servidores de cientos de miles de usuarios al mes” en mi antiguo trabajo se hace el uso mas ineficiente que se podria hacer del servidor y aun asi nada se muere el motivo no llegabamos a miles de usuarios solo cientos

Aunque debo admitir que mas de una vez estuvimos a 90% de uso de RAM 8GB teniamos, otra experiencia fue cuando la aplicacion se moria debido a lo lenta que era la base de datos(Mysql) luego de migrar de un server a otro el motivo pues teniendo en cuanto que las tablas eran innodb el innodb_buffer_pool_size estaba en 256MB en otras palabras la base de datos no tenia RAM, en consecuencia usaba el disco duro y bueno…

Lo mas importante en mi experiencia como sysadmin son los backups de todo tipo ejemplo si vas a actualizar 1766 registros de una tabla es bueno que antes hagas un select de estos 1766 registros a una copia de esta tabla y que tengas el SQL para hacer el update a la tabla original para asi restaurar los 1766 registros en caso de que algo salga mal, tambien es bueno tener copia de toda la base de datos por si se vuelve peor

Gracias por tu aporte aprendi conceptos que desconocia

0
13Puntos
4 meses

@johnnypacheco De forma simple: Escalamiento vertical = aumentas los recursos de tu servidor actual (ram, disco, cpu), Escalamiento horizontal = distribuyes la carga entre más equipos/software pero de manera que parezcan una sola unidad.

0
10843Puntos
5 meses

Excelente aporte muchas gracias.

0
4 meses

Disculpa mi ignorancia, el post me gustó, pero a que te refieres con escalonaminto vertical y horizontal?

0
250Puntos
2 meses

Yo recién estoy empezando y te agradezco que compartas tu experiencia esto me va a ser muy util.

0
477Puntos
2 meses

mantener registro de los servidores en una kmdb es para mi lo mas impprtante

0
6072Puntos
4 meses

Gracias por contarnos tu experiencia, lo mejor que se pudo haber creado para administración de servidores es la nube elástica, algo que usa mucho el concepto de eficiencia.

0
4 meses

Saludos Yoher, usas CentOS en tus servidores? como se configuran estas herramientas en un servidor con dicho sistema linux?

Existe algo llamado Fedora Cloud, que utilidad tendria esto en un entorno de produccion?

Soy novato y me encantaría aprender