Aplicativos sem servidor: Arquitetura, padrões e implementação no AzureServerless apps: Architecture, patterns, and Azure implementation

Captura de tela que mostra a capa do livro eletrônico Aplicativos sem servidor.

DOWNLOAD disponível em: https://aka.ms/serverless-ebookDOWNLOAD available at: https://aka.ms/serverless-ebook

PUBLICADO PORPUBLISHED BY

Divisão de Desenvolvedores Microsoft, equipes dos produtos .NET e Visual StudioMicrosoft Developer Division, .NET, and Visual Studio product teams

Uma divisão da Microsoft CorporationA division of Microsoft Corporation

One Microsoft WayOne Microsoft Way

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

Copyright © 2018, Microsoft CorporationCopyright © 2018 by Microsoft Corporation

Todos os direitos reservados.All rights reserved. Nenhuma parte do conteúdo deste guia pode ser reproduzida ou transmitida de nenhuma forma nem por nenhum meio sem a permissão por escrito do 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 livro é fornecido “no estado em que se encontra” e expressa os pontos de vista e as opiniões do autor.This book is provided "as-is" and expresses the author's views and opinions. Os pontos de vista, as opiniões e as informações expressos neste guia, incluindo URLs e outras referências a sites da Internet, podem ser alteradas sem aviso prévio.The views, opinions and information expressed in this book, including URL and other Internet website references, may change without notice.

Alguns exemplos aqui representados são fornecidos apenas para ilustração e são fictícios.Some examples depicted herein are provided for illustration only and are fictitious. Nenhuma associação ou conexão real é intencional ou deve ser deduzida.No real association or connection is intended or should be inferred.

A Microsoft e as marcas listadas em https://www.microsoft.com na página da Web "Marcas" são marcas comerciais do grupo de empresas Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies.

Mac e macOS são marcas comerciais da Apple Inc.Mac and macOS are trademarks of Apple Inc.

Todas as outras marcas e logotipos são propriedade de seus respectivos proprietários.All other marks and logos are property of their respective owners.

Autor:Author:

Jeremy Likness, Consultor de Desenvolvimento em Nuvem Sênior, APEX, Microsoft Corp.Jeremy Likness, Sr. Cloud Developer Advocate, APEX, Microsoft Corp.

Colaborador:Contributor:

Cecil Phillip, Consultor de Desenvolvimento em Nuvem II, APEX, Microsoft Corp.Cecil Phillip, Cloud Developer Advocate II, APEX, Microsoft Corp.

Editores:Editors:

Bill Wagner, Desenvolvedor de Conteúdo Sênior, APEX, Microsoft Corp.Bill Wagner, Senior Content Developer, APEX, Microsoft Corp.

Maira Wenzel, Desenvolvedora de Conteúdo Sênior, APEX, Microsoft Corp.Maira Wenzel, Senior Content Developer, APEX, Microsoft Corp.

Participantes e revisores:Participants and reviewers:

Steve Smith, Proprietário, Ardalis Services.Steve Smith, Owner, Ardalis Services.

IntroduçãoIntroduction

A computação sem servidor é a evolução das plataformas de nuvem na direção do código nativo de nuvem pura.Serverless is the evolution of cloud platforms in the direction of pure cloud native code. Ela aproxima os desenvolvedores da lógica de negócios, isolando-os das questões de infraestrutura.Serverless brings developers closer to business logic while insulating them from infrastructure concerns. É um padrão que não quer dizer "nenhum servidor", mas sim, "sem servidor".It's a pattern that doesn't imply "no server" but rather, "less server." O código sem servidor é controlado por eventos.Serverless code is event-driven. O código pode ser disparado por qualquer coisa, desde uma solicitação da Web HTTP tradicional até um temporizador ou o carregamento de um arquivo.Code may be triggered by anything from a traditional HTTP web request to a timer or the result of uploading a file. A infraestrutura por trás da computação sem servidor permite dimensionar instantaneamente para atender a demandas elásticas e oferece a microcobrança, que realmente permite "pagar por aquilo que você usar".The infrastructure behind serverless allows for instant scale to meet elastic demands and offers micro-billing to truly "pay for what you use." A computação sem servidor requer uma nova maneira de pensar e abordar a criação de aplicativos e não é a solução certa para todos os problemas.Serverless requires a new way of thinking and approach to building applications and isn't the right solution for every problem. Como desenvolvedor, você precisa decidir:As a developer, you must decide:

  • Quais são os prós e contras do uso da computação sem servidor?What are the pros and cons of serverless?
  • Por que você deve considerar a computação sem servidor para seus próprios aplicativos?Why should you consider serverless for your own applications?
  • Como pode você compilar, testar, implantar e manter seu código sem servidor?How can you build, test, deploy, and maintain your serverless code?
  • Em que caso é interessante migrar o código de aplicativos existentes para a computação sem servidor, e qual é a melhor maneira de realizar essa transformação?Where does it make sense to migrate code to serverless in existing applications, and what is the best way to accomplish this transformation?

Sobre este guiaAbout this guide

Este guia concentra-se no desenvolvimento de aplicativos nativos da nuvem que usam a computação sem servidor.This guide focuses on cloud native development of applications that use serverless. O livro destaca os benefícios e expõe as possíveis desvantagens do desenvolvimento de aplicativos sem servidor e fornece uma pesquisa sobre arquiteturas sem servidor.The book highlights the benefits and exposes the potential drawbacks of developing serverless apps and provides a survey of serverless architectures. São ilustrados vários exemplos de como a computação sem servidor pode ser usada, juntamente com vários padrões de design sem servidor.Many examples of how serverless can be used are illustrated along with various serverless design patterns.

Este guia explica os componentes da plataforma sem servidor do Azure e concentra-se especificamente na implementação da computação sem servidor usando o Azure Functions.This guide explains the components of the Azure serverless platform and focuses specifically on implementation of serverless using Azure Functions. Você saberá mais sobre gatilhos e associações, e aprenderá a implementar aplicativos sem servidor que se baseiam em estado usando funções duráveis.You'll learn about triggers and bindings as well as how to implement serverless apps that rely on state using durable functions. Por fim, exemplos de negócios e estudos de caso o ajudarão a estabelecer um contexto e um quadro de referência para determinar se a computação sem servidor é a abordagem certa para seus projetos.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.

Evolução das plataformas de nuvemEvolution of cloud platforms

A computação sem servidor é a culminação de várias iterações de plataformas de nuvem.Serverless is the culmination of several iterations of cloud platforms. A evolução começou com o computador físico sem sistema operacional no data center e progrediu para a IaaS (infraestrutura como serviço) e a PaaS (plataforma como serviço).The evolution began with physical metal in the data center and progressed through Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

Evolução de local para sem servidor

Antes da nuvem, existia um limite perceptível entre desenvolvimento e operações.Before the cloud, a discernible boundary existed between development and operations. A implantação de um aplicativo significava responder a uma grande variedade de perguntas como:Deploying an application meant answering myriad questions like:

  • Qual hardware deve ser instalado?What hardware should be installed?
  • Como é o acesso físico ao computador protegido?How is physical access to the machine secured?
  • O data center exige um no-break?Does the data center require an Uninterruptible Power Supply (UPS)?
  • Para onde os backups de armazenamento são enviados?Where are storage backups sent?
  • É necessário que haja uma energia redundante?Should there be redundant power?

A lista continua e a sobrecarga era enorme.The list goes on and the overhead was enormous. Em muitas situações, os departamentos de TI eram obrigados a lidar com um enorme desperdício.In many situations, IT departments were forced to deal with incredible waste. O desperdício era devido à alocação excessiva de servidores como máquinas de backup para recuperação de desastre e de servidores em espera para permitir a expansão. Felizmente, a introdução da tecnologia de virtualização (como o Hyper-V) com VMs (máquinas virtuais) permitiu o surgimento da IaaS (infraestrutura como serviço).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). A infraestrutura virtualizada permitiu que as operações estabelecessem um conjunto padrão de servidores como o backbone, levando a um ambiente flexível com a capacidade de provisionar de servidores exclusivos "sob 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." Ainda mais importante, a virtualização preparou o terreno para que a nuvem pudesse ser usada para fornecer máquinas virtuais "como serviço”.More important, virtualization set the stage for using the cloud to provide virtual machines "as a service." As empresas puderam realmente parar de se preocupar com computadores físicos ou com fonte de alimentação redundante.Companies could easily get out of the business of worrying about redundant power or physical machines. Com isso, elas passaram a se concentrar no ambiente virtual.Instead, they focused on the virtual environment.

A IaaS ainda requer uma sobrecarga pesada porque as operações ainda são responsáveis por várias tarefas.IaaS still requires heavy overhead because operations is still responsible for various tasks. Essas tarefas incluem:These tasks include:

  • Aplicar patches e fazer backup de servidores.Patching and backing up servers.
  • Instalar pacotes.Installing packages.
  • Manter o sistema operacional atualizado.Keeping the operating system up-to-date.
  • Monitorar o aplicativo.Monitoring the application.

A próxima evolução reduziu a sobrecarga ao fornecer a PaaS (plataforma como serviço).The next evolution reduced the overhead by providing Platform as a Service (PaaS). Com a PaaS, o provedor de nuvem lida com sistemas operacionais, patches de segurança e até mesmo com os pacotes necessários para dar suporte a uma plataforma específica.With PaaS, the cloud provider handles operating systems, security patches, and even the required packages to support a specific platform. Em vez de criar uma VM e, em seguida, configurar o .NET Framework e estabelecer servidores de serviços de IIS (Serviços de Informações da Internet), os desenvolvedores simplesmente escolhem uma "plataforma de destino" como "aplicativo Web" ou "Ponto de extremidade de API" e implantam o código diretamente.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. As perguntas de infraestrutura são reduzidas para:The infrastructure questions are reduced to:

  • Qual o tamanho dos serviços necessários?What size services are needed?
  • Como os serviços podem ser expandidos (adicionar mais servidores ou nós)?How do the services scale out (add more servers or nodes)?
  • Como os serviços podem ser escalados verticalmente (aumentar a capacidade de hospedar servidores ou nós)?How do the services scale up (increase the capacity of hosting servers or nodes)?

A computação sem servidor abstrai ainda mais os servidores, concentrando-se no código controlado por eventos.Serverless further abstracts servers by focusing on event-driven code. Em vez de se concentrarem em uma plataforma, os desenvolvedores podem se concentrar em um microsserviço que faz apenas uma coisa.Instead of a platform, developers can focus on a microservice that does one thing. As duas principais perguntas para compilar o código sem servidor são:The two key questions for building the serverless code are:

  • O que dispara o código?What triggers the code?
  • O que o código faz?What does the code do?

Com a computação sem servidor, a infraestrutura é abstraída.With serverless, infrastructure is abstracted. Em alguns casos, o desenvolvedor nem precisa se preocupar mais com o host.In some cases, the developer no longer worries about the host at all. Independentemente de haver uma instância do IIS, do Kestrel, do Apache ou de algum outro servidor Web em execução para gerenciar solicitações da Web, o desenvolvedor se concentrará em um gatilho HTTP.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. O gatilho fornece o conteúdo padrão e de plataforma cruzada para a solicitação.The trigger provides the standard, cross-platform payload for the request. Além de simplificar o processo de desenvolvimento, o conteúdo também facilita os testes e, em alguns casos, torna o código facilmente portátil entre plataformas.The payload not only simplifies the development process, but facilitates testing and in some cases, makes the code easily portable across platforms.

Outro recurso sem servidor é a microcobrança.Another feature of serverless is micro-billing. É comum que aplicativos Web hospedem pontos de extremidade de API Web.It's common for web applications to host Web API endpoints. No bare-metal tradicional, na IaaS e até mesmos nas implementações de PaaS, os recursos para hospedar as APIs são pagos continuamente.In traditional bare metal, IaaS and even PaaS implementations, the resources to host the APIs are paid for continuously. Isso significa que você paga para hospedar os pontos de extremidade, mesmo quando eles não estão sendo acessados.That means you pay to host the endpoints even when they aren't being accessed. Geralmente você percebe que uma API é chamada mais do que outras, portanto, todo o sistema é dimensionado com base no suporte aos pontos de extremidade populares.Often you'll find one API is called more than others, so the entire system is scaled based on supporting the popular endpoints. A computação sem servidor permite que você dimensione cada ponto de extremidade de maneira independente e pague pelo uso, portanto, não há custos quando as APIs não são chamadas.Serverless enables you to scale each endpoint independently and pay for usage, so no costs are incurred when the APIs aren't being called. A migração pode, em muitos casos, reduzir drasticamente o custo contínuo de suporte aos pontos de extremidade.Migration may in many circumstances dramatically reduce the ongoing cost to support the endpoints.

O que este guia não abordaWhat this guide doesn't cover

Este guia enfatiza especificamente as abordagens de arquitetura e os padrões de design e não é uma visão aprofundada dos detalhes da implementação do Azure Functions, dos Aplicativos Lógicos ou de outras plataformas sem 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. Este guia não aborda, por exemplo, fluxos de trabalho com Aplicativos Lógicos ou recursos do Azure Functions como a configuração do CORS (Compartilhamento de Recursos entre Origens), a aplicação de domínios personalizados ou o carregamento 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. Esses detalhes estão disponíveis na documentação online do Azure Functions.These details are available through the online Azure Functions documentation.

Recursos adicionaisAdditional resources

Quem deve usar o guiaWho should use the guide

Este guia foi escrito para desenvolvedores e arquitetos de solução que desejam criar aplicativos empresariais com o .NET que podem usar componentes sem servidor localmente ou na nuvem.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. Ele é útil para desenvolvedores, arquitetos e tomadores de decisões técnicas interessados em:It's useful to developers, architects, and technical decision makers interested in:

  • Entender os prós e contras do desenvolvimento sem servidorUnderstanding the pros and cons of serverless development
  • Saber como abordar a arquitetura sem servidorLearning how to approach serverless architecture
  • Exemplos de implementações de aplicativos sem servidorExample implementations of serverless apps

Como usar o guiaHow to use the guide

A primeira parte deste guia examina por que a computação sem servidor é uma opção viável comparando várias abordagens de arquitetura diferentes.The first part of this guide examines why serverless is a viable option by comparing several different architecture approaches. Ele examina a tecnologia e o ciclo de vida de desenvolvimento, porque todos os aspectos do desenvolvimento de software são afetados pelas decisões de arquitetura.It examines both the technology and development lifecycle, because all aspects of software development are impacted by architecture decisions. Em seguida, ele examina os casos de uso e os padrões de design e inclui implementações de referência que usam o Azure Functions.The guide then examines use cases and design patterns and includes reference implementations using Azure Functions. Cada seção contém recursos adicionais para informar mais sobre uma área específica.Each section contains additional resources to learn more about a particular area. O guia termina com recursos para instruções passo a passo e explorações práticas da implementação da computação sem servidor.The guide concludes with resources for walkthroughs and hands-on exploration of serverless implementation.

Envie seus comentáriosSend your feedback

O guia e os exemplos relacionados estão em constante desenvolvimento, portanto, seus comentários são bem-vindos!The guide and related samples are constantly evolving, so your feedback is welcomed! Se você tiver comentários de como este guia pode ser melhorado, use a seção de comentários na parte inferior de qualquer página baseada em problemas do 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.