Aplicaciones sin servidor: Arquitectura, patrones e implementación de AzureServerless apps: Architecture, patterns, and Azure implementation

Captura de pantalla en la que se muestra la portada del libro electrónico Aplicaciones sin servidor.

DESCARGA disponible en: https://aka.ms/serverless-ebookDOWNLOAD available at: https://aka.ms/serverless-ebook

PUBLICADO PORPUBLISHED BY

Equipos de producto de la División de desarrolladores de Microsoft, .NET y Visual StudioMicrosoft Developer Division, .NET, and Visual Studio product teams

División de Microsoft CorporationA division of Microsoft Corporation

One Microsoft WayOne Microsoft Way

Redmond, Washington 98052-6399Redmond, Washington 98052-6399

Copyright © 2018 de Microsoft CorporationCopyright © 2018 by Microsoft Corporation

Todos los derechos reservados.All rights reserved. No se puede reproducir ni transmitir de ninguna forma ni por ningún medio ninguna parte del contenido de este libro sin la autorización por escrito del publicador.No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher.

Este libro se proporciona “tal cual” y expresa las opiniones del autor.This book is provided "as-is" and expresses the author's views and opinions. Las opiniones y la información expresados en este libro, incluidas las direcciones URL y otras referencias a sitios web de Internet, pueden cambiar sin previo aviso.The views, opinions and information expressed in this book, including URL and other Internet website references, may change without notice.

Algunos ejemplos descritos aquí se proporcionan únicamente con fines ilustrativos y son ficticios.Some examples depicted herein are provided for illustration only and are fictitious. No debe deducirse ninguna asociación ni conexión reales.No real association or connection is intended or should be inferred.

Microsoft y las marcas comerciales indicadas en https://www.microsoft.com en la página web "Marcas comerciales" pertenecen al grupo de empresas de Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies.

Mac y macOS son marcas comerciales de Apple Inc.Mac and macOS are trademarks of Apple Inc.

El resto de marcas y logotipos pertenece a sus respectivos propietarios.All other marks and logos are property of their respective owners.

Autor:Author:

Jeremy Likness , promotor de la nube sénior, Microsoft Corp.Jeremy Likness, Senior Cloud Advocate, Microsoft Corp.

Colaborador:Contributor:

Cecil Phillip , promotor de la nube sénior, Microsoft Corp.Cecil Phillip, Senior Cloud Advocate, Microsoft Corp.

Editores:Editors:

Bill Wagner , desarrollador de contenido sénior, Microsoft Corp.Bill Wagner, Senior Content Developer, Microsoft Corp.

Maira Wenzel , desarrolladora de contenido sénior, Microsoft Corp.Maira Wenzel, Senior Content Developer, Microsoft Corp.

Participantes y revisores:Participants and reviewers:

Steve Smith , propietario, Ardalis Services.Steve Smith, Owner, Ardalis Services.

IntroducciónIntroduction

La informática sin servidor es la evolución de las plataformas de la nube en la línea del código nativo puro de la nube.Serverless is the evolution of cloud platforms in the direction of pure cloud native code. Además, acerca a los desarrolladores a la lógica de negocios a la vez que los aísla de los problemas de infraestructura.Serverless brings developers closer to business logic while insulating them from infrastructure concerns. Es un patrón que no implica el uso de "ningún servidor" sino de "menos servidor".It's a pattern that doesn't imply "no server" but rather, "less server." El código sin servidor está orientado a eventos.Serverless code is event-driven. El código se puede desencadenar con solicitudes web HTTP tradicionales, temporizadores o con el resultado de cargar un archivo.Code may be triggered by anything from a traditional HTTP web request to a timer or the result of uploading a file. La infraestructura que hay detrás de la informática sin servidor permite realizar un escalado instantáneo con el fin de satisfacer las necesidades elásticas y ofrece una microfacturación para "pagar por lo que se usa" y no más.The infrastructure behind serverless allows for instant scale to meet elastic demands and offers micro-billing to truly "pay for what you use." Para usar la informática sin servidor es necesario cambiar la forma de pensar y adoptar un nuevo enfoque para compilar aplicaciones, pero no es la solución adecuada para cada problema.Serverless requires a new way of thinking and approach to building applications and isn't the right solution for every problem. Como desarrollador, debe decidir lo siguiente:As a developer, you must decide:

  • ¿Qué ventajas e inconvenientes tiene la informática sin servidor?What are the pros and cons of serverless?
  • ¿Por qué debe plantearse el uso de la informática sin servidor para sus aplicaciones?Why should you consider serverless for your own applications?
  • ¿Cómo puede compilar, probar, implementar y mantener el código sin servidor?How can you build, test, deploy, and maintain your serverless code?
  • ¿En qué casos tiene sentido migrar el código a la informática sin servidor en las aplicaciones existente y cuál es la mejor forma de conseguir esa transformación?Where does it make sense to migrate code to serverless in existing applications, and what is the best way to accomplish this transformation?

Acerca de esta guíaAbout this guide

Esta guía se centra en el desarrollo nativo en la nube de las aplicaciones en las que se usa la informática sin servidor.This guide focuses on cloud native development of applications that use serverless. En el libro se destacan las ventajas que ofrece esta característica y se exponen los posibles inconvenientes de desarrollar aplicaciones sin servidor. Además, se proporciona una encuesta sobre arquitecturas sin servidor.The book highlights the benefits and exposes the potential drawbacks of developing serverless apps and provides a survey of serverless architectures. También se muestran muchos ejemplos del uso que se puede dar a la informática sin servidor, junto con varios modelos de diseño sin servidor.Many examples of how serverless can be used are illustrated along with various serverless design patterns.

En esta guía se describen los componentes de la plataforma sin servidor de Azure y se pone especial énfasis en la implementación de la informática sin servidor mediante Azure Functions.This guide explains the components of the Azure serverless platform and focuses specifically on implementation of serverless using Azure Functions. Se le proporcionará información sobre desencadenadores y enlaces y sobre cómo implementar aplicaciones sin servidor que se basan en el estado mediante funciones duraderas.You'll learn about triggers and bindings as well as how to implement serverless apps that rely on state using durable functions. Por último, se muestran ejemplos y casos prácticos empresariales que le permitirán ponerse en contexto y obtener un marco de referencia para determinar si la informática sin servidor es una opción adecuada para sus proyectos.Finally, business examples and case studies will help provide context and a frame of reference to determine whether serverless is the right approach for your projects.

Evolución de las plataformas en la nubeEvolution of cloud platforms

La informática sin servidor es la culminación de varias iteraciones de plataformas en la nube.Serverless is the culmination of several iterations of cloud platforms. La evolución empezó con los equipos sin sistema operativo de los centros de datos y evolucionó mediante las infraestructuras como servicio (IaaS) y las plataformas como servicio (PaaS).The evolution began with physical metal in the data center and progressed through Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

Evolución del entorno local al entorno sin servidor

Antes de que se usara la nube, existía una frontera clara entre el desarrollo y las operaciones.Before the cloud, a discernible boundary existed between development and operations. Para implementar una aplicación era necesario responder a un sinfín de preguntas:Deploying an application meant answering myriad questions like:

  • ¿Qué hardware hay que instalar?What hardware should be installed?
  • ¿Cómo se protege el acceso físico a las máquinas?How is physical access to the machine secured?
  • ¿El centro de datos necesita un sistema de alimentación ininterrumpida, (SAI [UPS])?Does the data center require an Uninterruptible Power Supply (UPS)?
  • ¿Dónde se envían las copias de seguridad del almacenamiento?Where are storage backups sent?
  • ¿Es necesaria una fuente de alimentación?Should there be redundant power?

La lista de interrogantes no terminaba aquí, y ello representaba una sobrecarga de grandes dimensiones.The list goes on and the overhead was enormous. En muchas situaciones, los departamentos de TI se veían obligados a tratar con gran cantidad de residuos.In many situations, IT departments were forced to deal with incredible waste. Dichos residuos eran el resultado de una sobreasignación de servidores como máquinas de copias de seguridad para la recuperación ante desastres y de servidores en espera para permitir una escalabilidad horizontal. Afortunadamente, la implementación de la tecnología de virtualización (como Hyper-V) mediante máquinas virtuales (VM) dio un impulso a las infraestructuras como servicio (IaaS).The waste was due to over-allocation of servers as backup machines for disaster recovery and standby servers to enable scale-out. Fortunately, the introduction of virtualization technology (like Hyper-V) with Virtual Machines (VMs) gave rise to Infrastructure as a Service (IaaS). Las infraestructuras virtualizadas permitían a las operaciones establecer como eje principal un conjunto estándar de servidores, lo que generaba entornos flexibles capaces de aprovisionar servidores únicos "bajo demanda".Virtualized infrastructure allowed operations to set up a standard set of servers as the backbone, leading to a flexible environment capable of provisioning unique servers "on demand." Sin embargo, lo más importante es que con la virtualización se sentaba la base para usar la nube con el fin de proporcionar máquinas virtuales "como servicio".More important, virtualization set the stage for using the cloud to provide virtual machines "as a service." Ello permitía a las empresas dejar de preocuparse por las fuentes de alimentación y las máquinas físicas.Companies could easily get out of the business of worrying about redundant power or physical machines. Por lo tanto, pudieron centrarse en el entorno virtual.Instead, they focused on the virtual environment.

Las infraestructuras como servicio todavía conllevan una gran sobrecarga porque el equipo de operaciones sigue siendo el responsable de diversas tareas.IaaS still requires heavy overhead because operations is still responsible for various tasks. Estas tareas incluyen:These tasks include:

  • Copia de seguridad y revisión de servidores.Patching and backing up servers.
  • Instalación de paquetes.Installing packages.
  • Mantener actualizado el sistema operativo.Keeping the operating system up-to-date.
  • Supervisar la aplicación.Monitoring the application.

La siguiente evolución redujo la sobrecarga proporcionando una plataforma como servicio (PaaS).The next evolution reduced the overhead by providing Platform as a Service (PaaS). Con dicha plataforma, el proveedor de nube controla los sistemas operativos, las revisiones de seguridad e, incluso, los paquetes necesarios para admitir una plataforma concreta.With PaaS, the cloud provider handles operating systems, security patches, and even the required packages to support a specific platform. En lugar de compilar una VM, configurar después .NET Framework y mantener los servidores de Internet Information Services (IIS), los desarrolladores solo tienen que elegir una "destino de la plataforma", como una "aplicación web " o un "punto de conexión de API", e implementar el código directamente.Instead of building a VM then configuring the .NET Framework and standing up Internet Information Services (IIS) servers, developers simply choose a "platform target" such as "web application" or "API endpoint" and deploy code directly. Por lo tanto, los interrogantes relacionados con la infraestructura quedan reducidos a estos:The infrastructure questions are reduced to:

  • ¿Qué tamaños de servicio son necesarios?What size services are needed?
  • ¿Cómo se escalan horizontalmente los servicios (añadir más servidores o nodos)?How do the services scale out (add more servers or nodes)?
  • ¿Cómo se escalan verticalmente los servicios (aumentar la capacidad de hospedar servidores o nodos)?How do the services scale up (increase the capacity of hosting servers or nodes)?

La informática sin servidor reduce todavía más los servidores centrándose en el código orientado a eventos.Serverless further abstracts servers by focusing on event-driven code. En lugar de usar una plataforma, los desarrolladores pueden centrarse en un microservicio que tiene una función concreta.Instead of a platform, developers can focus on a microservice that does one thing. Estas son las dos preguntas clave para implementar el código sin servidor:The two key questions for building the serverless code are:

  • ¿Qué desencadena el código?What triggers the code?
  • ¿Qué hace el código?What does the code do?

Con la informática sin servidor, la infraestructura se reduce.With serverless, infrastructure is abstracted. En algunos casos, el desarrollador se puede olvidar totalmente del host.In some cases, the developer no longer worries about the host at all. El desarrollador se centra en un desencadenador HTTP, independientemente de si se ejecuta o no una instancia de IIS, Kestrel, Apache u otro servidor web para administrar solicitudes web.Whether or not an instance of IIS, Kestrel, Apache, or some other web server is running to manage web requests, the developer focuses on an HTTP trigger. El desencadenador proporciona la carga estándar y multiplataforma para la solicitud.The trigger provides the standard, cross-platform payload for the request. La carga no solo simplifica el proceso de desarrollo, sino que facilita las pruebas y, en algunos casos, permite que el código sea pueda portar fácilmente entre plataformas.The payload not only simplifies the development process, but facilitates testing and in some cases, makes the code easily portable across platforms.

La microfacturación es otra de las características de la informática sin servidor.Another feature of serverless is micro-billing. Es habitual que las aplicaciones web hospeden puntos de conexión de API web.It's common for web applications to host Web API endpoints. En los equipos tradicionales sin sistema operativo, en las implementaciones IaaS e incluso PaaS, se paga continuamente por los recursos necesarios para hospedar las API.In traditional bare metal, IaaS and even PaaS implementations, the resources to host the APIs are paid for continuously. Por lo tanto, se paga por hospedar los puntos de conexión aunque no se acceda a ellos.That means you pay to host the endpoints even when they aren't being accessed. Con frecuencia verá que una API se llama más a menudo que las otras, de forma que todo el sistema se escala a partir de su compatibilidad con los puntos de conexión populares.Often you'll find one API is called more than others, so the entire system is scaled based on supporting the popular endpoints. La informática sin servidor permite escalar cada punto de conexión por separado y pagar por su uso, de forma que no se incurre en ningún costo cuando no se está llamando a las API.Serverless enables you to scale each endpoint independently and pay for usage, so no costs are incurred when the APIs aren't being called. En muchas circunstancias, la migración puede reducir de forma drástica el costo continuo que implica la compatibilidad con los puntos de conexión.Migration may in many circumstances dramatically reduce the ongoing cost to support the endpoints.

Aspectos no tratados en esta guíaWhat this guide doesn't cover

En esta guía se pone un especial énfasis en los distintos enfoques de arquitectura y modelos de diseño y no se ofrece una explicación detallada sobre los detalles de implementación de Azure Functions, Logic Apps u otras plataformas sin servidor.This guide specifically emphasizes architecture approaches and design patterns and isn't a deep dive into the implementation details of Azure Functions, Logic Apps, or other serverless platforms. Por ejemplo, entre los aspectos que no se tratan se incluyen los flujos de trabajo avanzados de Logic Apps y las características de Azure Functions, como la configuración del uso compartido de recursos entre orígenes (CORS), la aplicación de dominios personalizados o la carga de certificados SSL.This guide doesn't cover, for example, advanced workflows with Logic Apps or features of Azure Functions such as configuring Cross-Origin Resource Sharing (CORS), applying custom domains, or uploading SSL certificates. Estos detalles están disponibles en la documentación de Azure Functions en línea.These details are available through the online Azure Functions documentation.

Recursos adicionalesAdditional resources

Destinatarios de esta guíaWho should use the guide

Esta guía está destinada a aquellos desarrolladores y arquitectos de soluciones que quieren compilar aplicaciones empresariales con .NET y que pueden usar componentes sin servidor en un entorno local o bien en la nube.This guide was written for developers and solution architects who want to build enterprise applications with .NET that may use serverless components either on premises or in the cloud. Resulta útil para los desarrolladores, arquitectos y directores técnicos interesados por lo siguiente:It's useful to developers, architects, and technical decision makers interested in:

  • Conocer las ventajas e inconvenientes del desarrollo sin servidor.Understanding the pros and cons of serverless development
  • Obtener información sobre cómo usar la arquitectura sin servidor.Learning how to approach serverless architecture
  • Implementaciones de ejemplo sobre aplicaciones sin servidorExample implementations of serverless apps

Cómo usar esta guíaHow to use the guide

En la primera parte de esta guía se estudia por qué la informática sin servidor es una opción viable mediante la comparación de una serie de distintos enfoques de arquitectura.The first part of this guide examines why serverless is a viable option by comparing several different architecture approaches. Se examina tanto la tecnología como el ciclo de vida de desarrollo porque todos los aspectos del desarrollo de software se ven afectados por las decisiones relacionadas con la arquitectura.It examines both the technology and development lifecycle, because all aspects of software development are impacted by architecture decisions. A continuación, en la guía se examinan casos de uso y modelos de diseño y se incluyen implementaciones de referencia mediante Azure Functions.The guide then examines use cases and design patterns and includes reference implementations using Azure Functions. Cada sección contiene recursos adicionales para obtener más información sobre una cuestión concreta.Each section contains additional resources to learn more about a particular area. La guía finaliza con una serie de recursos para los tutoriales y una exploración práctica de la implementación sin servidor.The guide concludes with resources for walkthroughs and hands-on exploration of serverless implementation.

Envíe sus comentariosSend your feedback

Nos gustaría que contribuyese al desarrollo constante de la guía y los ejemplos relacionados enviando sus comentarios.The guide and related samples are constantly evolving, so your feedback is welcomed! Si tiene algún comentario sobre cómo se puede mejorar esta guía, escríbalo en la sección de comentarios situada en la parte inferior de cualquier página creada en Problemas de GitHub.If you have comments about how this guide can be improved, use the feedback section at the bottom of any page built on GitHub issues.