Me 5
Me 5
Me 5
UNIDAD Nº III
ADICION DE APIS Y DESPLIEGE EN AMBIENTES PRODUCTIVOS.
www.iplacex.cl
SEMANA 5
Introducción
www.iplacex.cl 2
Ideas Fuerza
Microservicios
Los microservicios son una arquitectura que nos sirve para diseñar aplicaciones de
manera desacoplada, este en comparación con la arquitectura monolítica que
comúnmente conocemos se desarrollan de forma independiente, además de ser auto
escalable.
Amazon Lambda
API Gateway
Es un servicio que nos provee Amazon web Services, con este servicio nosotros
podremos disponibilizar Apis de una forma sencilla y amigable además de forma ágil la
lógica implementada en nuestras funciones en Lambda.
DynamoDB
Dynamo DB es una base de datos no relacional dispuesta por Amazon Web Services,
en DynamoDB podemos almacenar grandes cantidades de información y procesar de
forma rápida, esta base de datos a diferencia de las relaciones está orientada a
documentos, lo que se diferencia con otros motores como mongo DB este toma una
característica de un valor como clave según sus columnas.
www.iplacex.cl 3
Desarrollo
1. MICROSERVICIOS
Las arquitecturas de Microservicios hacen que las aplicaciones sean más fáciles de
escalar y más rápidas de desarrollar. Esto permite la innovación y acelera el tiempo de
comercialización de las nuevas características.
www.iplacex.cl 4
Arquitectura monolítica en comparación con la arquitectura de Microservicios
Con las arquitecturas monolíticas, todos los procesos están estrechamente asociados y
se ejecutan como un solo servicio. Esto significa que, si un proceso de una aplicación
experimenta un pico de demanda, se debe escalar toda la arquitectura. Agregar o
mejorar las características de una aplicación monolítica se vuelve más complejo a
medida que crece la base de código. Esta complejidad limita la experimentación y
dificulta la implementación de nuevas ideas. Las arquitecturas monolíticas aumentan el
riesgo de la disponibilidad de la aplicación porque muchos procesos dependientes y
estrechamente vinculados aumentan el impacto del error de un proceso.
Autónomos
Cada servicio componente en una arquitectura de Microservicios se puede desarrollar,
implementar, operar y escalar sin afectar el funcionamiento de otros servicios. Los
servicios no necesitan compartir ninguno de sus códigos o implementaciones con otros
servicios. Cualquier comunicación entre componentes individuales ocurre a través de
API bien definidas.
www.iplacex.cl 5
Especializados
Cada servicio está diseñado para un conjunto de capacidades y se enfoca en resolver
un problema específico. Si los desarrolladores aportan más código a un servicio a lo largo
del tiempo y el servicio se vuelve complejo, se puede dividir en servicios más pequeños.
A través del desarrollo distribuido, los microservicios potencian a los equipos y las
rutinas. También puede desarrollar múltiples microservicios de forma simultánea.
Gracias a ello, más desarrolladores pueden trabajar en la misma aplicación
simultáneamente para reducir el tiempo invertido en el desarrollo.
Agilidad
Escalado flexible
Los Microservicios permiten que cada servicio se escale de forma independiente para
satisfacer la demanda de la característica de la aplicación que respalda. Esto permite a
los equipos adecuarse a las necesidades de la infraestructura, medir con precisión el
costo de una característica y mantener la disponibilidad si un servicio experimenta un
aumento en la demanda.
Implementación sencilla
www.iplacex.cl 6
Los Microservicios permiten la integración y la entrega continuas, lo que facilita probar
nuevas ideas y revertirlas si algo no funciona. El bajo costo de los errores permite
experimentar, facilita la actualización del código y acelera el tiempo de comercialización
de las nuevas características.
Libertad tecnológica
Código reutilizable
La división del software en módulos pequeños y bien definidos les permite a los equipos
usar funciones para diferentes propósitos. Un servicio escrito para una determinada
función se puede usar como un componente básico para otra característica. Esto permite
que una aplicación arranque por sí sola, ya que los desarrolladores pueden crear nuevas
capacidades sin tener que escribir código desde cero.
Resistencia
www.iplacex.cl 7
3. Arquitectura Serverless
Lo primero que hay que aclarar es que, a pesar de lo que diga su nombre, en las
arquitecturas serverless sí hay servidores. Y de hecho no es uno, sino muchos. La
diferencia respecto a las aplicaciones tradicionales es que no hay un servidor maestro
que controle el flujo de la aplicación, sino que los servidores simplemente hospedan
servicios que atienden peticiones de forma atómica y no están conscientes del flujo de
la aplicación, ya que éste se controla del lado del cliente. Dichos servicios pueden haber
sido implementados por nosotros (en el caso de comportamiento específico a nuestra
aplicación) o también podemos usar servicios proporcionados por terceros para resolver
aspectos comunes tales como, autenticación de usuarios, almacenamiento, mensajería.
Por último, los desarrolladores no tienen ninguna visibilidad a los servidores que
hospedan los servicios, ya que estos son administrados por terceros. Así que los
desarrolladores se pueden dedicar exclusivamente a implementar la funcionalidad de la
aplicación sin tener que preocuparse por administrar servidores.
Beneficios de Serverless
www.iplacex.cl 8
También nos proporciona un nivel elevado de desacoplamiento entre los diferentes
servicios, favoreciendo el desarrollo de arquitecturas basadas en microservicios. Esto
facilita mucho el ciclo de vida y los despliegues continuos, además de simplificar los
rollbacks si fueran necesarios.
Por último, una arquitectura serverless nos posibilita reducir el gasto en infraestructura,
generando costes únicamente cuando se realiza una petición, y, por tanto, cuando la
función se ejecuta.
Una función que se ejecuta en una arquitectura serverless debe ser procesada por un
wrapper del lenguaje apropiado (Python, NodeJS, etc.) que es capaz de recibir los datos
de entrada, entregarlos a la función, ejecutarla y enviar los datos de salida. Cada wrapper
www.iplacex.cl 9
genérico de un determinado lenguaje se denomina entorno. Estos entornos son
instanciados en forma de contenedor cuando una función necesita ser ejecutada.
El tiempo necesario para que una función esté lista para empezar su ejecución es de
unos cientos de milisegundos, dependiendo de la tecnología usada. Este valioso tiempo
de latencia puede ser reducido mediante las llamadas hot functions, que mantienen la
instancia en ejecución para evitar el overhead de arranque del contenedor, mejorando
sensiblemente el throughput en el caso de alta demanda del servicio en cuestión.
Las infraestructuras serverless actuales usan RPC para delegar la ejecución de un REST
API Gateway sobre un conjunto de servidores.
www.iplacex.cl 10
4. Microservicios vs Arquitectura monolítica
Aplicaciones Monolíticas
Aunque son fáciles de desarrollar, una aplicación que aglutina toda su funcionalidad no
es la mejor opción, en el caso de que se tengan aspiraciones de crecimiento complejas,
más usuarios, más desarrolladores.
Además, debes tener en cuenta que un gran inconveniente que caracteriza a las
aplicaciones monolíticas es que en el momento que se quiera realizar un nuevo
despliegue, se debería relanzar todo el sistema de nuevo.
Otra de las dificultades que plantean los sistemas monolíticos, son la imposibilidad de
trabajar en varios ambientes al mismo tiempo (por tiempos de carga), lo que dificulta
enormemente el trabajo de los arquitectos o desarrolladores de software.
Microservicio
Frente a estas aplicaciones monolíticas, surgen los microservicios. Una opción muy
efectiva que está cautivando a muchos desarrolladores de software, ¡y no es para menos!
“La arquitectura de microservicios tiene como objetivo aislar los distintos componentes
de una aplicación, con el fin de que cada uno sea una aplicación por sí misma.”
Podríamos considerar que los microservicios son una evolución del Service Oriented
Architecture o SOA, cuya función se basa en desarrollar servicios independientes para
el negocio, estando cada uno de estos asociados o unidos a una misma aplicación.
www.iplacex.cl 11
Servicios Cloud Microservicios
AWS Lambda
AWS Lambda es un servicio de informática sin servidor que ejecuta código en respuesta
a eventos y administra automáticamente los recursos informáticos subyacentes. Puede
usar AWS Lambda para ampliar la funcionalidad de otros productos de AWS con lógica
personalizada o bien crear servicios back-end propios que funcionen con el nivel de
seguridad, rendimiento y escala de AWS. AWS Lambda puede ejecutar código
automáticamente en respuesta a varios eventos, como solicitudes HTTP a través de
Amazon API Gateway, modificaciones realizadas en objetos en buckets de Amazon S3,
actualizaciones de tablas en Amazon DynamoDB y transiciones de estado en AWS Step
Functions.
www.iplacex.cl 12
Lambda ejecuta el código en una infraestructura informática de alta disponibilidad y se
encarga de la administración integral de los recursos informáticos, incluido el
mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y
el escalado automático, la implementación de parches de seguridad y código, así como
la monitorización de código y los registros. Lo único que tiene que hacer es proporcionar
el código.
Después de cargar el código en AWS Lambda, puede asociar la función con recursos
específicos de AWS (por ejemplo, un bucket particular de Amazon S3, una tabla de
Amazon DynamoDB, una transmisión de Amazon Kinesis o una notificación de Amazon
SNS). A continuación, cuando el recurso cambie, Lambda ejecutará la función y
administrará los recursos informáticos según sea necesario para atender las solicitudes
entrantes.
www.iplacex.cl 13
5. Creación de servicios de backend
Por otro lado, usar un BaaS le permitirá implementar la misma función en menos de una
hora. Tendrá un ahorro de 15 horas.
www.iplacex.cl 14
La otra ventaja es ofrecer un tiempo de comercialización más rápido para un proyecto de
software. Esperar varios meses para ofrecer un producto de software matará la
oportunidad del mercado o le hará empezar por detrás de la competencia. Entonces, las
ventajas comerciales de un BaaS son:
Estos son los pros y los contras de usar un backend como servicio.
www.iplacex.cl 15
6. AWS Api Gateway
Amazon API Gateway es un servicio completamente administrado que facilita a los
desarrolladores la creación, la publicación, el mantenimiento, el monitoreo y la protección
de API a cualquier escala. Con tan solo unos clics en la consola de administración de
AWS, puede crear API REST y API WebSocket que actúen como "puerta delantera" para
que las aplicaciones obtengan acceso a datos, lógica de negocio o funcionalidades
desde sus servicios backend, tales como cargas de trabajo ejecutadas en Amazon
Elastic Compute Cloud (Amazon EC2), código ejecutado en AWS Lambda, cualquier
aplicación web o aplicaciones de comunicación en tiempo real.
API Gateway gestiona todas las tareas implicadas en la aceptación y el procesamiento
de hasta cientos de miles de llamadas a API simultáneas, entre ellas, la administración
del tráfico, el control de autorizaciones y acceso, el monitoreo y la administración de
versiones de API. API Gateway no requiere pagos mínimos ni costos iniciales. Solo se
paga por las llamadas a las API que se reciben y por la cantidad de datos salientes
transferidos; además, con el modelo de precios por niveles de API Gateway, puede
reducir sus costos a medida que cambie la escala de uso de las API.
Fácil monitorización
Monitorice información y métricas de rendimiento sobre las llamadas a la API, latencia
de datos y tasas de error desde el panel de API Gateway, que permite monitorizar
visualmente las llamadas a sus servicios mediante Amazon CloudWatch.
www.iplacex.cl 16
Rendimiento a escala
Proporcione a los usuarios finales la latencia más baja posible para las solicitudes y las
respuestas de API sacando partido de nuestra red global de ubicaciones de borde a
través de Amazon CloudFront. Limite el tráfico de forma controlada y almacene en caché
la salida de las llamadas a la API a fin de garantizar que las operaciones de backend
soporten los picos de tráfico y no se llame a los sistemas backend de forma innecesaria.
www.iplacex.cl 17
Con API Gateway puede crear API REST que sus aplicaciones móviles y web pueden
usar para llamar a los servicios de AWS disponibles públicamente mediante el código
ejecutado en AWS Lambda. Lambda ejecuta su código en una infraestructura informática
de alta disponibilidad, eliminando la necesidad de aprovisionar, escalar o administrar
servidores.
Api websocket
Cree aplicaciones de comunicación bidireccional en tiempo real tales como aplicaciones
de chat y paneles de streaming sin tener que aprovisionar o administrar servidores ni
preocuparse por los usuarios y los dispositivos conectados. API Gateway mantiene una
conexión persistente entre los clientes, gestiona la transferencia de mensajes e inserta
datos a través de servidores backend.
www.iplacex.cl 18
7. DynamoDB
www.iplacex.cl 19
8. Modelos de datos de documentos y de clave-valor
Los sistemas de bases de datos NoSQL como Amazon DynamoDB utilizan modelos
alternativos para la gestión de datos, como pares de valores clave o almacenamiento de
documentos. Es importante comprender las diferencias clave y los enfoques de diseño
específicos cuando se cambia de un sistema de administración de bases de datos
relacionales (RDBMS) a un sistema de base de datos NoSQL como DynamoDB.
Los sistemas de bases de datos relacionales (RDBMS) y las bases de datos NoSQL
tienen diferentes fortalezas y debilidades:
• En RDBMS, los datos pueden consultarse de manera flexible, pero las consultas
son relativamente caras y no se escalan bien en situaciones de alto tráfico.
• En una base de datos NoSQL como DynamoDB, los datos se pueden consultar
de manera eficiente en un número limitado de formas, fuera de las cuales las
consultas pueden ser costosas y lentas.
Estas diferencias hacen que el diseño de la base de datos sea muy diferente entre los
dos sistemas:
• En RDBMS, diseña para tener flexibilidad sin preocuparse por los detalles de
implementación o el rendimiento. La optimización de consultas generalmente no
afecta el diseño del esquema, pero la normalización es muy importante.
• En DynamoDB, diseñas tu esquema específicamente para que las consultas más
comunes e importantes sean lo más rápidas y económicas posible. Sus
estructuras de datos se adaptan a los requisitos específicos de los casos de uso
de su empresa.
www.iplacex.cl 20
9. Dos conceptos clave para el diseño NoSQL
El diseño NoSQL requiere una mentalidad diferente que el diseño RDBMS. Para un
RDBMS, se puede empezar a crear un modelo de datos normalizados sin pensar en los
patrones de acceso. Posteriormente, podrá ampliar este modelo cuando surjan nuevos
requisitos sobre preguntas y consultas. Puede organizar cada tipo de datos en su propia
tabla.
“El primer paso para diseñar su aplicación DynamoDB es identificar los patrones de
consulta específicos que el sistema debe satisfacer.”
• Forma de los datos: en lugar de cambiar la forma de los datos cuando se procesa
una consulta (como lo hace un sistema RDBMS), una base de datos NoSQL
organiza los datos para que su forma en la base de datos se corresponda con lo
que se consultará. Este es un factor clave para aumentar la velocidad y la
escalabilidad.
www.iplacex.cl 21
los datos entre esas particiones. Conocer de antemano cuáles serán las cargas
de consulta máxima podría ayudar a determinar cómo particionar los datos para
utilizar mejor la capacidad de E / S.
Después de identificar los requisitos de consulta específicos, puede organizar los datos
según los principios generales que rigen el rendimiento:
Como regla general, debe mantener la menor cantidad de tablas posible en una
aplicación DynamoDB. Como se enfatizó anteriormente, la mayoría de las
aplicaciones bien diseñadas requieren solo una tabla, a menos que haya una
razón específica para usar varias tablas.
Las excepciones son casos en los que están involucrados datos de series
temporales de gran volumen o conjuntos de datos que tienen patrones de acceso
muy diferentes, pero estas son excepciones. Una sola tabla con índices invertidos
generalmente puede permitir consultas simples para crear y recuperar las
complejas estructuras de datos jerárquicos requeridas por su aplicación.
www.iplacex.cl 22
• Distribuir consultas. También es importante que un gran volumen de consultas
no se centre en una parte de la base de datos, donde pueden exceder la
capacidad de E / S. En su lugar, debe diseñar claves de datos para distribuir el
tráfico de manera uniforme entre las particiones tanto como sea posible, evitando
los "puntos críticos".
www.iplacex.cl 23
Conclusión
www.iplacex.cl 24
Bibliografía
Red Red Hat. (2017). ¿Qué son los microservicios?. De Red Hat Sitio web:
https://www.redhat.com/es/topics/microservices/what-are-microservices
www.iplacex.cl 25
www.iplacex.cl 26