Ya nadie duda de los beneficios de la nube. La factura, en cambio, es otra cosa. Reducirla es un esfuerzo que incluye a los desarrolladores.
Por Peter Wayner | Original de IDGN
Nada levanta el ánimo de un equipo de desarrollo como ver cómo una aplicación se vuelve viral.
Es una sensación maravillosa que vale lo que dura… hasta que llega la factura mensual de la nube. Auch.
Algunos desarrolladores creen que administrar el costo de la computación es responsabilidad del equipo de desarrollo.
Creen que los codificadores escriben el software, lo lanzan y confían en que alguien más se preocupe por pagarlo. Nada mas lejos de la verdad.
Los desarrolladores inteligentes saben que sus decisiones de codificación marcan una gran diferencia para los resultados de la empresa.
Un código voluminoso es más lento y requiere más recursos de la nube para ejecutarse.
Por ello, elegir mejores algoritmos y escribir un código más estricto es algo más que velocidad. El código bien escrito cuesta menos al ejecutarlo.
Del desktop a la nube
Los desarrolladores no siempre ven la conexión. Es fácil escribir códigos en sus máquinas: allí tanto la RAM como el espacio adicional en disco se pagaron cuando se compró el equipo. Por un lado.
Por otro, si tiene dos terabytes de espacio en disco, es posible que no note cuánto consume su código.
Con esa capacidad, si un nuevo algoritmo tarda el doble en ejecutarse, es posible que su escritorio ni siquiera parpadee y, además, ¿quién nota unos milisegundos adicionales?
Pero es casi seguro que duplicar el cálculo dará como resultado una factura más grande del servicio en la nube.
El cloud computing moderno sobresale en la conversión de la utilización de recursos en un cargo por artículo.
Los buenos desarrolladores de la nube entienden que tienen el poder de tomar decisiones más inteligentes al escribir su código.
Puede ser tan simple como ejecutar un generador de perfiles para identificar puntos lentos o evitar el almacenamiento de datos innecesarios para una menor huella de memoria.
Aquí hay 12 formas de optimizar su código para que sea más eficiente, más rápido y más barato de ejecutar.
1.- Escriba códigos más rápidos
La mayoría de los desarrolladores no dedican mucho tiempo a optimizar su código.
Si se ejecuta en una fracción de segundo en su computadora portátil, no notan si está funcionando un 20%, un 30% o incluso un 300% más lento con el tiempo.
El programa sigue respondiendo en fracciones de segundo.
Pero estas diferencias se suman cuando ocurren millones de veces en el servidor.
Un perfilado cuidadoso puede marcar las partes lentas. Reescribirlos podría reducir la cantidad de instancias que necesita su aplicación.
2.- Reduzca su huella de RAM en la nube
La cantidad de RAM que se utiliza es un parámetro importante para fijar el precio de las instancias en la nube.
En muchos casos, duplicar su RAM también duplica el costo. Los programadores pueden reducir su huella de RAM al evitar mantener datos en la memoria.
Algunos algoritmos de transmisión, como las clases Stream de Java, están diseñados para trabajar con grandes archivos de datos sin cargarlos todos en la memoria.
El proyecto Apache DataSketches genera respuestas aproximadas para estadísticas complejas de big data sin ocupar toda la memoria.
Como beneficio adicional, el consumo cuidadoso de RAM también puede acelerar sus algoritmos.
A veces, el sistema operativo comenzará a descargar datos en el disco utilizando la memoria virtual. Esto evita bloqueos, pero puede ralentizar drásticamente sus programas.
3.- Use imágenes y videos de baja resolución
El uso de imágenes y videos de menor resolución puede dar sus frutos de múltiples maneras.
En primer lugar, almacenarlos será más económico.
En segundo lugar, los cargos por exfiltración de datos serán más bajos.
Tercero, la aplicación les parecerá más ágil a los usuarios.
Todas las imágenes estáticas deben minimizarse desde el principio.
La cantidad de minimización, por desgracia, no es simple porque en algún momento la calidad visual se degrada lo suficiente como para ser evidente para los usuarios.
Encontrar la compensación adecuada es una decisión de diseño que algunos programadores no están preparados para tomar.
Algunas aplicaciones que usan imágenes cargadas también pueden crear miniaturas más pequeñas y versiones de resolución reducida después de recibir la imagen.
Se desarrollaron herramientas como ImageMagik y formatos como WebP para este propósito.
4.- Descarte los datos innecesarios de su nube
Muchos desarrolladores son ratas de paquete digital que almacenan información en caso de que la necesiten algún día.
Llenan tablas con columnas interminables y luego nunca eliminan las filas.
Los datos adicionales no cuestan nada si posee el hardware y la unidad de disco tiene suficiente espacio.
Pero la nube cobra por todo.
¿Realmente necesitarás todos esos valores en el futuro?
¿El usuario quiere tantos detalles?
Deshacerse de algunos de esos datos antiguos le ahorrará dinero en almacenamiento y exfiltración de datos.
5.- En la nube, limita el almacenamiento en disco
Usar el disco local en las instancias de la nube no solo es peligroso, sino que también puede ser costoso.
El espacio del disco local a menudo está diseñado para ser lo suficientemente rápido como para mantener el sistema operativo funcionando de manera eficiente.
Muchos desarrolladores crean su código en una máquina personal con uno o más terabytes de almacenamiento.
El almacenamiento de máquinas en la nube rara vez es tan barato o tan fácilmente disponible.
Las nubes a menudo facturan directamente el almacenamiento según el tamaño, por lo que el mejor enfoque es usar la menor cantidad de almacenamiento posible.
Considere formas de minimizar no solo los archivos temporales que crea su aplicación, sino también las bibliotecas del sistema y los paquetes de software necesarios.
6.- Limpie sus registros en la nube
Los archivos de registro son excelentes para identificar problemas y depurar software durante el desarrollo. Pero una vez que el código está en producción, no necesita conservarlos todos.
Toda la información adicional obstruye el disco local o el almacenamiento de objetos.
Cuando diseñe el sistema de registro, configúrelo para eliminar registros con frecuencia. Muchos paquetes de registro como Log4j se pueden configurar para mantener una cantidad mínima de registros y eliminarlos de forma continua.
7.- Ir sin servidor
Los planes de arquitectura sin servidor solo facturan cuando su código se está ejecutando, lo que puede ahorrarle mucho cuando las cargas son intermitentes. Incluso las aplicaciones que tienen un flujo constante de usuarios tienen más tiempo muerto de lo que cabría esperar.
Muchos planes de precios sin servidor recompensan la codificación cuidadosa y el rendimiento muy rápido con un consumo mínimo de RAM. La fórmula de facturación cuenta el tiempo de respuesta en milisegundos y cobra solo por el tiempo que el procesador está ocupado. Como desarrollador, obtiene comentarios inmediatos porque puede realizar un seguimiento del tiempo de respuesta directamente y ver cómo lo afectan los cambios en el código.
El enfoque sin servidor es ideal para proyectos más pequeños o más experimentales y la factura a menudo puede ser tan baja como unos pocos centavos por mes. Si su aplicación ejecuta algunas funciones solo ocasionalmente, podría tener sentido optar por una solución sin servidor.
8.- Archivar datos antiguos fuera de la nube
A medida que los datos envejecen, se accede a ellos con menos frecuencia.
Puede anticipar esto configurando su aplicación para migrar datos más antiguos a una ubicación más económica.
Algunas nubes cobran mucho menos por el llamado “almacenamiento en frío”, que puede tardar minutos o incluso horas en entregar los bits.
Otras nubes como Wasabi o Backblaze se especializan en el almacenamiento de archivos para objetos de Amazon S3 y cobran muchísimo menos que las nubes principales. En algunos casos, ni siquiera cobran por la exfiltración de datos.
La descarga de datos, tan pronto como ya no tengan una gran demanda, puede ser extremadamente rentable.
9.- Simplifica tus diseños CSS
Si ha visto las etiquetas HTML generadas por algunos marcos, sabe lo ridículos que pueden llegar a ser los diseños.
Son solo etiquetas DIV anidadas en etiquetas DIV hasta el final, lo que cuesta dinero para generar y entregar.
Un diseñador web que conozco se jacta de haber reducido su factura de ancho de banda en un 30% simplemente creando un diseño más simple con un uso más juicioso de CSS.
10.- Construye sitios estáticos
Algunos marcos como React requieren bastante potencia computacional, especialmente si usan funciones como la representación del lado del servidor.
Todo ese código aumenta la factura mensual de la nube. La filosofía opuesta es crear un sitio estático, construido a partir de bloques inmutables de HTML, CSS y JavaScript que se sirven desde un caché palabra por palabra.
El uso de una red de entrega de contenido puede acelerar aún más la entrega al acercar sus cachés al usuario.
Varios marcos adoptan esta filosofía estática. Jekyll, Hugo, Gridsome y Pelican son solo algunas de las herramientas que empaquetarán todo su contenido en un conjunto de archivos compactos e inalterables.
Todavía puede crear personalización en las páginas con llamadas AJAX, pero la mayor parte del sitio genera poca carga en los servidores.
11.- Externalizar el cómputo y el almacenamiento
A medida que los navegadores se vuelven más potentes, algunos marcos simplifican el traslado de más cómputo directamente al cliente.
Un buen código JavaScript o WebAssembly puede enviar una mayor parte de la carga a la máquina del usuario y fuera de sus servidores en la nube.
Algunos desarrolladores están reduciendo su capa de nube para que sea poco más que una base de datos con un poco de lógica empresarial para la autenticación.
Un amigo ejecuta todo con HTML estático y una versión del lado del servidor de PostgreSQL con procedimientos integrados que generan JSON.
Los navegadores también tienen opciones más elaboradas para almacenar información localmente, como el estándar de almacenamiento web HTML y la API de base de datos indexada W3C.
Ya no se trata solo de cadenas cortas y cookies.
Estos datos están disponibles más rápido porque no viajan a través de Internet y brinda a los usuarios cierta tranquilidad al saber que sus datos no se almacenan en una base de datos centralizada y pirateable.
¿Por qué pagar por el almacenamiento y la exfiltración de datos cuando pueden vivir en la máquina de un usuario de forma gratuita?
12.- Designar un ingeniero de costos
Algunos desarrolladores se especializan en cuidar bases de datos. A algunos les gusta crear hermosas primeras impresiones con un frente bien diseñado.
Ahora que los costos de la nube son tan flexibles, algunos equipos están designando oficialmente a “ingenieros de costos” para administrar los costos y la eficiencia del código.
El primer enfoque de un ingeniero de costos es lograr que el código de la aplicación se ejecute de manera:
- Más limpia
- Más rápida
- Más liviana
- Y, por lo tanto, más económica
Hacer que esta tarea sea parte del trabajo de alguien envía un mensaje sobre la importancia de administrar los costos del código como parte del rol y la responsabilidad del equipo de desarrollo.