Octubre 05, 2023
ibonelli
Desarrollo de Aplicaciones para la nube y los servicios disponibles
En mis artículos anteriores se vió la visión general de la nuebe y el primer paso sencillo que puedes dar para migrar a la nube. A medida que avanzas en la adopción de este modelo, te darás cuenta de que esto es solo un primer paso en tu camino. Si bien reduce la cantidad de trabajo que necesitas hacer inicialmente, no debería ser tu objetivo final. Tu objetivo final debe ser abrazar lo que se llama Plataforma como Servicio (PaaS) o lo que yo preferiría llamar “diseñar para la nube”.
Entonces, ¿qué significa abrazar un diseño de Plataforma como Servicio? Significa comenzar a utilizar proveedores de soluciones para la construcción de tus aplicaciones. Esto significa que no tendrás un sistema operativo o una única aplicación monolítica. Tus principales componentes serán APIs y servicios en la nube.
Permíteme describir esto mediante un ejemplo, y para ello propongo pensar en un sitio web de comercio electrónico diseñado de esta manera:
- Para la solución general utilizarás un Framework de Aplicación Web. Ejemplos comunes son Django, MERN, Symfony, etc. Es importante elegir un framework que utilice un lenguaje de programación ampliamente adoptado, ya que esto te brindará más opciones a la hora de elegir soluciones sin servidor (serverless).
- Para la persistencia normalmente ejecutarías tu propio servidor de bases de datos, pero en la nube debes utilizar una base de datos como servicio. No importa si eliges una base de datos relacional o una NoSQL, simplemente puedes usarla como un servicio y trasladar el mantenimiento a tu proveedor.
- Lo que solíamos llamar alojamiento web ahora se corre sin servidores (Serverless Computing). Hay proveedores que se centran específicamente en este tipo de servicios. Por ejemplo un actor importante dentro de este sector es Heroku, pero no está solo.
- Tampoco construirás tu propia solución autenticación y autorización, en su lugar, utilizarás un servicio/API que manejará la mayor parte de las complicaciones por ti. Existe un actor importante en este segmento: Auth0.
- Como mencioné en el artículo anterior, el registro y la monitorización son aspectos muy importantes a incluir cuando estás diseñando para la nube. Hay muchos proveedores en este campo, pero me gustaría mencionar especialmente a New Relic en esta categoría.
- Para el almacenamiento de imágenes o archivos, puedes depender de servicios de almacenamiento de objetos. Hay otros, pero (al menos para mí) el más reconocible en esta categoría es S3 de AWS.
En este ejemplo de Comercio Electrónico, puedes ver que tenemos categorías, y cada una de estas categorías tiene proveedores. Los tres principales actores en la nube (AWS, Azure y GCP) tienen soluciones para cada una de las categorías mencionadas, pero también existen otros proveedores. Solo para darte una idea, echa un vistazo a esta tabla:
Servicio | AWS | Azure | GCP | Otros |
---|---|---|---|---|
Computación sin Servidor | Lambda | Azure Functions | Cloud Functions | Heroku |
Almacenamiento de Objetos | Simple Storage Service (S3) | Azure Blob | Cloud Storage | Digital Ocean Spaces |
Base de Datos Relacional | Relational Database Service (RDS) | SQL Database | Cloud SQL | SkySQL |
Base de Datos NoSQL | DynamoDB | Cosmos DB | Firestore | MongoDB Atlas |
Red de Entrega de Contenido | CloudFront | Azure CDN | Cloud CDN | Cloudflare |
Servicio DNS | Route 53 | Traffic Manager | Cloud DNS | DNSimple |
Autenticación y Autorización | IAM | Azure Active Directory | Cloud IAM | Auth0 |
Gestión de Claves | KMS | Azure Key Vault | KMS | HashiCorp Vault |
Servicios de API | API Gateway | API Management | Google Cloud APIs | - |
Monitorización | CloudWatch | Azure Monitor | Cloud Monitoring | New Relic |
A estas alturas, te habrás dado cuenta de que la gama de opciones es amplia. Para mantener esto “simple”, solo proporcioné una alternativa a las tres principales opciones en la nube. Existen muchas más, pero quiero mantener el artículo lo más conciso posible.
Una vez que comienzas a construir con un proveedor, estás incluyendo dependencias en tu solución. Pero afortunadamente para nosotros, la mayoría de los framework web tienen abstracciones que podemos usar para mantener nuestra solución lo más agnóstica posible. Un ejemplo de estas abstracciones para el almacenamiento de objetos implica el uso de bibliotecas como object-store python o SMCloudStore. Para ser honesto, no he utilizado ninguna de estas bibliotecas que doy como ejemplo, pero espero que ayuden a entender la idea que intento transmitir. Como los proveedores de servicios siempre comparten ejemplos de código para sus soluciones, también podremos construir nuestras propias abstracciones utilizando su código básico. Es importante tener esto en cuenta para poder cambiar de proveedores de servicios si fuera necesarios.
Lo más importante que debes aprender para construir tu propia solución en la nube es lo que pueden proporcionar las categorías mencionadas anteriormente. Sé que puede ser un poco abrumador al principio, pero es importante aprender a utilizar estos servicios. La escalabilidad es muy simple cuando se utilizan soluciones centradas en la nube, el mantenimiento la mayor parte del tiempo está integrado y, en la mayoría de los casos, solo pagas por lo que usas (aunque puede haber algunos costos básicos).
Supongo que la lección más importante de este artículo es entender que necesitas aprender a diseñar soluciones de software de manera diferente para la nube. Aprender a utilizar este nuevo modelo trae muchas ventajas: acelera el desarrollo, mantenimiento y contribuye a la evolución de la solución. Para mí, la forma más fácil de aprender fue centrarse primero en un proveedor (en mi caso fue AWS). Una vez quelo aprendes a usar, el siguiente paso sería asegurarse de poder utilizar otros proveedores también.