Abordagens de implantação de arquiteturaArchitecture deployment approaches

Independentemente da abordagem de arquitetura usada para criar um aplicativo de negócios, a implementação ou a implantação desses aplicativos pode variar.Regardless of the architecture approach used to design a business application, the implementation, or deployment of those applications may vary. Os negócios hospedam aplicativos em tudo, desde hardware físico até funções sem servidor.Businesses host applications on everything from physical hardware to serverless functions.

Aplicativos de N camadasN-Tier applications

O padrão de arquitetura de N camadas é uma arquitetura madura e simplesmente se refere a aplicativos que separam várias camadas lógicas em camadas físicas separadas.The N-Tier architecture pattern is a mature architecture and simply refers to applications that separate various logical layers into separate physical tiers. A arquitetura de n camadas é uma implementação física da arquitetura de N camadas.N-Tier architecture is a physical implementation of N-Layer architecture. A implementação mais comum dessa arquitetura inclui:The most common implementation of this architecture includes:

  • Uma camada de apresentação, por exemplo, um aplicativo Web.A presentation tier, for example a web app.
  • Uma API ou uma camada de acesso a dados, como uma API REST.An API or data access tier, such as a REST API.
  • Uma camada de dados, como um banco de dado SQL.A data tier, such as a SQL database.

Arquitetura de N camadas

As soluções de N camadas têm as seguintes características:N-tier solutions have the following characteristics:

  • Normalmente, os projetos são alinhados com camadas.Projects are typically aligned with tiers.
  • O teste pode ser abordado de forma diferente por camada.Testing may be approached differently by tier.
  • As camadas fornecem camadas de abstração, por exemplo, a camada de apresentação normalmente é que desconhecem dos detalhes de implementação da camada de dados.Tiers provide layers of abstraction, for example the presentation tier is typically ignorant of the implementation details of the data tier.
  • Normalmente, as camadas só interagem com camadas adjacentes.Typically, layers only interact with adjacent layers.
  • As versões geralmente são gerenciadas no projeto e, portanto, camada, nível.Releases are often managed at the project, and therefore tier, level. Uma simples alteração de API pode exigir uma nova versão de uma camada intermediária inteira.A simple API change may require a new release of an entire middle tier.

Essa abordagem fornece vários benefícios, incluindo:This approach provides several benefits, including:

  • Isolamento do banco de dados (geralmente o front-end não tem acesso direto ao back-end do banco de dados).Isolation of the database (often the front end doesn't have direct access to the database back end).
  • A reutilização da API (por exemplo, clientes móveis, de área de trabalho e de aplicativos Web pode reutilizar as mesmas APIs).Reuse of the API (for example, mobile, desktop, and web app clients can all reuse the same APIs).
  • Capacidade de escalar horizontalmente camadas de forma independente.Ability to scale out tiers independent of each other.
  • Isolamento de refatoração: uma camada pode ser Refatorada sem afetar outras camadas.Refactoring isolation: one tier may be refactored without impacting other tiers.

Local e infraestrutura como serviço (IaaS)On-premises and Infrastructure as a Service (IaaS)

A abordagem tradicional para hospedar aplicativos requer a compra de hardware e o gerenciamento de todas as instalações de software, incluindo o sistema operacional.The traditional approach to hosting applications requires buying hardware and managing all of the software installations, including the operating system. Originalmente, isso envolvia data centers caros e hardware físico.Originally this involved expensive data centers and physical hardware. Os desafios que acompanham o hardware físico operacional são muitos, incluindo:The challenges that come with operating physical hardware are many, including:

  • A necessidade de comprar em excesso para cenários de demanda "apenas no caso" ou de pico.The need to buy excess for "just in case" or peak demand scenarios.
  • Proteção do acesso físico ao hardware.Securing physical access to the hardware.
  • Responsabilidade por falha de hardware (como falha de disco).Responsibility for hardware failure (such as disk failure).
  • Cool.Cooling.
  • Configurando roteadores e balanceadores de carga.Configuring routers and load balancers.
  • Redundância de energia.Power redundancy.
  • Proteção do acesso ao software.Securing software access.

Abordagem de IaaS

A virtualização de hardware, por meio de "máquinas virtuais", permite a infraestrutura como um serviço (IaaS).Virtualization of hardware, via "virtual machines" enables Infrastructure as a Service (IaaS). As máquinas host são efetivamente particionadas para fornecer recursos a instâncias com alocações para sua própria memória, CPU e armazenamento.Host machines are effectively partitioned to provide resources to instances with allocations for their own memory, CPU, and storage. A equipe provisiona as VMs necessárias e configura as redes associadas e o acesso ao armazenamento.The team provisions the necessary VMs and configures the associated networks and access to storage.

Para obter mais informações, consulte arquitetura de referência de N camadas da máquina virtual.For more information, see virtual machine N-tier reference architecture.

Embora a virtualização e a infraestrutura como serviço (IaaS) resolvam muitas preocupações, ela ainda deixa muita responsabilidade nas mãos da equipe de infraestrutura.Although virtualization and Infrastructure as a Service (IaaS) address many concerns, it still leaves much responsibility in the hands of the infrastructure team. A equipe mantém versões do sistema operacional, aplica patches de segurança e instala dependências de terceiros nos computadores de destino.The team maintains operating system versions, applies security patches, and installs third-party dependencies on the target machines. Os aplicativos geralmente se comportam de modo diferente em máquinas de produção em comparação com o ambiente de testeApps often behave differently on production machines compared to the test environment. Problemas surgem devido a diferentes versões de dependência e/ou níveis de SKU do sistema operacional.Issues arise due to different dependency versions and/or OS SKU levels. Embora muitas organizações implantem aplicativos de N camadas para esses destinos, muitas empresas se beneficiam da implantação em um modelo nativo de nuvem, como a plataforma como um serviço.Although many organizations deploy N-Tier applications to these targets, many companies benefit from deploying to a more cloud native model such as Platform as a Service. As arquiteturas com microserviços são mais desafiadoras devido aos requisitos de expansão para elasticidade e resiliência.Architectures with microservices are more challenging because of the requirements to scale out for elasticity and resiliency.

Para obter mais informações, consulte máquinas virtuais.For more information, see virtual machines.

PaaS (plataforma como serviço)Platform as a Service (PaaS)

A PaaS (plataforma como serviço) oferece soluções configuradas que os desenvolvedores podem conectar diretamente.Platform as a Service (PaaS) offers configured solutions that developers can plug into directly. PaaS é outro termo para hospedagem gerenciada.PaaS is another term for managed hosting. Ele elimina a necessidade de gerenciar o sistema operacional base, os patches de segurança e, em muitos casos, qualquer dependência de terceiros.It eliminates the need to manage the base operating system, security patches and in many cases any third-party dependencies. Exemplos de plataformas incluem aplicativos Web, bancos de dados e back-ends móveis.Examples of platforms include web applications, databases, and mobile back ends.

A PaaS aborda os desafios comuns ao IaaS.PaaS addresses the challenges common to IaaS. A PaaS permite que o desenvolvedor se concentre no esquema de banco de dados ou código em vez de como ele é implantado.PaaS allows the developer to focus on the code or database schema rather than how it gets deployed. Os benefícios do PaaS incluem:Benefits of PaaS include:

  • Pague por modelos de uso que eliminem a sobrecarga de investir em computadores ociosos.Pay for use models that eliminate the overhead of investing in idle machines.
  • Implantação direta e pipelines aprimorados de DevOps, integração contínua (CI) e entrega contínua (CD).Direct deployment and improved DevOps, continuous integration (CI), and continuous delivery (CD) pipelines.
  • Atualizações automáticas, atualizações e patches de segurança.Automatic upgrades, updates, and security patches.
  • Expansão e escala vertical do botão de ação (escala elástica).Push-button scale out and scale up (elastic scale).

A principal desvantagem do PaaS tradicionalmente foi o bloqueio do fornecedor.The main disadvantage of PaaS traditionally has been vendor lock-in. Por exemplo, alguns provedores de PaaS oferecem suporte apenas a ASP.NET, Node. js ou outras linguagens e plataformas específicas.For example, some PaaS providers only support ASP.NET, Node.js, or other specific languages and platforms. Produtos como Azure App serviço evoluíram para abordar várias plataformas e dar suporte a uma variedade de linguagens e estruturas para hospedar aplicativos Web.Products like Azure App Service have evolved to address multiple platforms and support a variety of languages and frameworks for hosting web apps.

Arquitetura de plataforma como serviço

SaaS (software como serviço)Software as a Service (SaaS)

Software como serviço ou SaaS é centralmente hospedado e disponível sem instalação ou provisionamento local.Software as a Service or SaaS is centrally hosted and available without local installation or provisioning. O SaaS geralmente é hospedado em cima da PaaS como uma plataforma para a implantação de software.SaaS often is hosted on top of PaaS as a platform for deploying software. O SaaS fornece serviços para execução e conexão com o software existente.SaaS provides services to run and connect with existing software. Em geral, o SaaS é específico do setor e da vertical.SaaS is often industry and vertical specific. O SaaS geralmente é licenciado e geralmente fornece um modelo de cliente/servidor.SaaS is often licensed and typically provides a client/server model. A maioria das ofertas de SaaS modernas usam aplicativos baseados na Web para o cliente.Most modern SaaS offerings use web-based apps for the client. As empresas normalmente consideram o SaaS como uma solução de negócios para ofertas de licença.Companies typically consider SaaS as a business solution to license offerings. Geralmente, ele não é implementado como consideração de arquitetura para escalabilidade e capacidade de manutenção de um aplicativo.It isn't often implemented as architecture consideration for scalability and maintainability of an application. Na verdade, a maioria das soluções de SaaS baseia-se em IaaS, PaaS e/ou back-ends sem servidor.Indeed, most SaaS solutions are built on IaaS, PaaS, and/or serverless back ends.

Saiba mais sobre o SaaS por meio de um aplicativo de exemplo.Learn more about SaaS through a sample application.

Contêineres e funções como serviço (FaaS)Containers and Functions as a Service (FaaS)

Contêineres são uma solução interessante que permite benefícios semelhantes a PaaS sem a sobrecarga de IaaS.Containers are an interesting solution that enables PaaS-like benefits without the IaaS overhead. Um contêiner é, essencialmente, um tempo de execução que contém o básico, que é necessário para executar um aplicativo exclusivo.A container is essentially a runtime that contains the bare essentials needed to run a unique application. O kernel ou a parte principal do sistema operacional do host e serviços como armazenamento são compartilhados em um host.The kernel or core part of the host operating system and services such as storage are shared across a host. O kernel compartilhado permite que os contêineres sejam leves (alguns são meros megabytes de tamanho, em comparação com o tamanho de Gigabyte de máquinas virtuais típicas).The shared kernel enables containers to be lightweight (some are mere megabytes in size, compared to the gigabyte size of typical virtual machines). Com os hosts já em execução, os contêineres podem ser iniciados rapidamente, facilitando a alta disponibilidade.With hosts already running, containers can be started quickly, facilitating high availability. A capacidade de criar contêineres rapidamente também fornece camadas extras de resiliência.The ability to spin up containers quickly also provides extra layers of resiliency. O Docker é uma das implementações mais populares de contêineres.Docker is one of the more popular implementations of containers.

Os benefícios dos contêineres incluem:Benefits of containers include:

  • Leve e portátilLightweight and portable
  • Independente, portanto, não é necessário instalar dependênciasSelf-contained so no need to install dependencies
  • Fornecer um ambiente consistente independentemente do host (executado exatamente igual em um laptop, como em um servidor de nuvem)Provide a consistent environment regardless of the host (runs exactly same on a laptop as on a cloud server)
  • Pode ser provisionado rapidamente para expansãoCan be provisioned quickly for scale-out
  • Pode ser reiniciado rapidamente para se recuperar de uma falhaCan be restarted quickly to recover from failure

Um contêiner é executado em um host de contêiner (que, por sua vez, pode ser executado em um computador bare-metal ou uma máquina virtual).A container runs on a container host (that in turn may run on a bare metal machine or a virtual machine). Vários contêineres ou instâncias dos mesmos contêineres podem ser executados em um único host.Multiple containers or instances of the same containers may run on a single host. Para failover e resiliência reais, os contêineres devem ser dimensionados entre os hosts.For true failover and resiliency, containers must be scaled across hosts.

Para obter mais informações sobre contêineres do Docker, consulte o que é o Docker?For more information about Docker containers, see What is Docker?

O gerenciamento de contêineres em hosts normalmente requer uma ferramenta de orquestração como kubernetes.Managing containers across hosts typically requires an orchestration tool such as Kubernetes. Configurar e gerenciar soluções de orquestração pode adicionar sobrecarga e complexidade adicionais aos projetos.Configuring and managing orchestration solutions may add additional overhead and complexity to projects. Felizmente, muitos provedores de nuvem fornecem serviços de orquestração por meio de soluções PaaS para simplificar o gerenciamento de contêineres.Fortunately, many cloud providers provide orchestration services through PaaS solutions to simplify the management of containers.

A imagem a seguir ilustra um exemplo de instalação do kubernetes.The following image illustrates an example Kubernetes installation. Nós no endereço de instalação scale out and failover.Nodes in the installation address scale out and failover. Eles executam instâncias de contêiner do Docker que são gerenciadas pelo servidor mestre.They run Docker container instances that are managed by the master server. O kubelet é o cliente que retransmite comandos do kubernetes para o Docker.The kubelet is the client that relays commands from Kubernetes to Docker.

Kubernetes

Para obter mais informações sobre orquestração, consulte kubernetes no Azure.For more information about orchestration, see Kubernetes on Azure.

O FaaS (funções como serviço) é um serviço de contêiner especializado que é semelhante a sem servidor.Functions as a Service (FaaS) is a specialized container service that is similar to serverless. Uma implementação específica do FaaS, chamada OpenFaaS, se encontra na parte superior dos contêineres para fornecer recursos sem servidor.A specific implementation of FaaS, called OpenFaaS, sits on top of containers to provide serverless capabilities. O OpenFaaS fornece modelos que empacotam todas as dependências de contêiner necessárias para executar um trecho de código.OpenFaaS provides templates that package all of the container dependencies necessary to run a piece of code. O uso de modelos simplifica o processo de implantação de código como uma unidade funcional.Using templates simplifies the process of deploying code as a functional unit. O OpenFaaS visa arquiteturas que já incluem contêineres e orquestradores porque ele pode usar a infraestrutura existente.OpenFaaS targets architectures that already include containers and orchestrators because it can use the existing infrastructure. Embora ele forneça funcionalidade sem servidor, ele exige especificamente que você use o Docker e um Orchestrator.Although it provides serverless functionality, it specifically requires you to use Docker and an orchestrator.

Sem servidorServerless

Uma arquitetura sem servidor fornece uma clara separação entre o código e seu ambiente de hospedagem.A serverless architecture provides a clear separation between the code and its hosting environment. Você implementa o código em uma função que é invocada por um gatilho.You implement code in a function that is invoked by a trigger. Depois que a função é encerrada, todos os recursos necessários podem ser liberados.After that function exits, all its needed resources may be freed. O gatilho pode ser manual, um processo cronometrado, uma solicitação HTTP ou um upload de arquivo.The trigger might be manual, a timed process, an HTTP request, or a file upload. O resultado do gatilho é a execução do código.The result of the trigger is the execution of code. Embora as plataformas sem servidor variem, a maioria fornece acesso a APIs e associações predefinidas para simplificar tarefas como gravar em um banco de dados ou enfileirar resultados.Although serverless platforms vary, most provide access to pre-defined APIs and bindings to streamline tasks such as writing to a database or queueing results.

Sem servidor é uma arquitetura que depende muito da abstração do ambiente de host para se concentrar no código.Serverless is an architecture that relies heavily on abstracting away the host environment to focus on code. Pode ser considerado menos servidor.It can be thought of as less server.

As soluções de contêiner fornecem aos desenvolvedores scripts de Build existentes para publicar código em imagens prontas para servidor.Container solutions provide developers existing build scripts to publish code to serverless-ready images. Outras implementações usam soluções PaaS existentes para fornecer uma arquitetura escalonável.Other implementations use existing PaaS solutions to provide a scalable architecture.

A abstração significa que a equipe de DevOps não precisa provisionar ou gerenciar servidores nem contêineres específicos.The abstraction means the DevOps team doesn't have to provision or manage servers, nor specific containers. A plataforma sem servidor hospeda o código, como um script ou executáveis empacotados criados com um SDK relacionado, e aloca os recursos necessários para que o código seja dimensionado.The serverless platform hosts code, either as script or packaged executables built with a related SDK, and allocates the necessary resources for the code to scale.

Os diagramas de ilustração a seguir têm quatro componentes sem servidor.The following illustration diagrams four serverless components. Uma solicitação HTTP faz com que o código da API de check-out seja executado.An HTTP request causes the Checkout API code to run. A API de check-out insere o código em um banco de dados, e a inserção dispara várias outras funções para executar tarefas como tarefas de computação e cumprir o pedido.The Checkout API inserts code into a database, and the insert triggers several other functions to run to perform tasks like computing tasks and fulfilling the order.

Implementação sem servidor

As vantagens da inclusão sem servidor:The advantages of serverless include:

  • Alta densidade.High density. Muitas instâncias do mesmo código sem servidor podem ser executadas no mesmo host em comparação com contêineres ou máquinas virtuais.Many instances of the same serverless code can run on the same host compared to containers or virtual machines. A escala de instâncias em vários hosts aumenta e resiliência.The instances scale across multiple hosts scale out and resiliency.
  • Micro-cobrança.Micro-billing. A maioria dos provedores sem servidor cobra com base nas execuções sem servidor, permitindo uma economia de custos massiva em determinados cenários.Most serverless providers bill based on serverless executions, enabling massive cost savings in certain scenarios.
  • Escala instantânea.Instant scale. O servidor não pode ser dimensionado para corresponder cargas de trabalho de forma automática e rápida.Serverless can scale to match workloads automatically and quickly.
  • Tempo de colocação no mercado mais rápido Os desenvolvedores se concentram no código e implantam diretamente na plataforma sem servidor.Faster time to market Developers focus on code and deploy directly to the serverless platform. Os componentes podem ser liberados independentemente um do outro.Components can be released independently of each other.

O servidor não é mais frequentemente discutido no contexto de computação, mas também pode se aplicar aos dados.Serverless is most often discussed in the context of compute, but can also apply to data. Por exemplo, o Azure SQL e o Cosmos DB fornecem bancos de dados de nuvem que não exigem a configuração de máquinas host ou clusters.For example, Azure SQL and Cosmos DB both provide cloud databases that don't require you to configure host machines or clusters. Este livro se concentra na computação sem servidor.This book focuses on serverless compute.

ResumoSummary

Há um amplo espectro de opções disponíveis para arquitetura, incluindo uma abordagem híbrida.There's a broad spectrum of available choices for architecture, including a hybrid approach. O servidor simplifica a abordagem, o gerenciamento e o custo dos recursos do aplicativo às custas de controle e portabilidade.Serverless simplifies the approach, management, and cost of application features at the expense of control and portability. No entanto, muitas plataformas sem servidor expõem a configuração para ajudar a ajustar a solução.However, many serverless platforms do expose configuration to help fine-tune the solution. Boas práticas de programação também podem levar a um código mais portátil e menos o bloqueio de plataforma sem servidor.Good programming practices can also lead to more portable code and less serverless platform lock-in. A tabela a seguir ilustra as abordagens de arquitetura lado a lado.The following table illustrates the architecture approaches side by side. Escolha sem servidor com base nas suas necessidades de dimensionamento, se você deseja ou não gerenciar o tempo de execução e como você pode dividir suas cargas de trabalho em pequenos componentes.Choose serverless based on your scale needs, whether or not you want to manage the runtime, and how well you can break your workloads into small components. Você aprenderá sobre possíveis desafios com pontos de decisão sem servidor e outros no próximo capítulo.You'll learn about potential challenges with serverless and other decision points in the next chapter.

IaaSIaaS PaaSPaaS ContêinerContainer Sem servidorServerless
Ajustar EscalaScale VMVM InstânciaInstance AplicaçãoApp FunçãoFunction
AbstraiAbstracts HardwareHardware PlataformaPlatform Host do sistema operacionalOS Host Tempo de execuçãoRuntime
UnidadeUnit VMVM ProjetoProject ImageImage CódigoCode
Tempo de VidaLifetime MesesMonths Dias para mesesDays to Months Minutos a diasMinutes to Days Milissegundos a minutosMilliseconds to Minutes
ResponsabilidadeResponsibility Aplicativos, dependências, tempo de execução e sistema operacionalApplications, dependencies, runtime, and operating system Aplicativos e dependênciasApplications and dependencies Aplicativos, dependências e tempo de execuçãoApplications, dependencies, and runtime FunçãoFunction
  • A escala se refere à unidade usada para dimensionar o aplicativoScale refers to the unit that is used to scale the application
  • Os resumos referem-se à camada que é abstrata pela implementaçãoAbstracts refers to the layer that is abstracted by the implementation
  • Unidade refere-se ao escopo do que está implantadoUnit refers to the scope of what is deployed
  • Tempo de vida refere-se ao tempo de execução típico de uma instância específicaLifetime refers to the typical runtime of a specific instance
  • Responsabilidade refere-se à sobrecarga para criar, implantar e manter o aplicativoResponsibility refers to the overhead to build, deploy, and maintain the application

O próximo capítulo se concentrará em arquitetura sem servidor, casos de uso e padrões de design.The next chapter will focus on serverless architecture, use cases, and design patterns.