Abordagens de implantação de arquiteturaArchitecture deployment approaches

Independentemente da arquitetura pode variar a abordagem usada para criar um aplicativo de negócios, a implementação ou implantação desses aplicativos.Regardless of the architecture approach used to design a business application, the implementation, or deployment of those applications may vary. As empresas hospedam aplicativos em todo o hardware físico para as 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. 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 dados de camada de acesso, como uma API REST.An API or data access tier, such as a REST API.
  • Uma camada de dados, como um banco de dados SQL.A data tier, such as a SQL database.

Arquitetura de N camadas

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

  • Projetos normalmente são alinhados com as camadas.Projects are typically aligned with tiers.
  • Testes podem ser abordadas diferente pela camada.Testing may be approached differently by tier.
  • Camadas fornecem camadas de abstração, por exemplo, a camada de apresentação é normalmente precisa saber os detalhes da 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 apenas interagem com camadas adjacentes.Typically, layers only interact with adjacent layers.
  • Versões geralmente são gerenciadas no projeto e, portanto, a camada, nível.Releases are often managed at the project, and therefore tier, level. Uma simple 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 oferece 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 para o banco de dados back-end).Isolation of the database (often the front end doesn't have direct access to the database back end).
  • Reutilizar da API (por exemplo, móveis, área de trabalho e os clientes de aplicativo web podem 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 independentes uns dos outros.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.

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

A abordagem tradicional para hospedagem de aplicativos requer hardware de comprar e gerenciar 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 envolvidos centros de dados cara e o hardware físico.Originally this involved expensive data centers and physical hardware. Os desafios que acompanham o hardware físico de operação são muitos, incluindo:The challenges that come with operating physical hardware are many, including:

  • A necessidade de comprar em excesso para "apenas no caso de" ou cenários de demanda de pico.The need to buy excess for "just in case" or peak demand scenarios.
  • Protegendo o 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).
  • Resfriamento.Cooling.
  • Configurar roteadores e balanceadores de carga.Configuring routers and load balancers.
  • Redundância de energia.Power redundancy.
  • Protegendo o acesso ao software.Securing software access.

Abordagem IaaS

Virtualização de hardware, por meio de "máquinas virtuais" permite que a infraestrutura como serviço (IaaS).Virtualization of hardware, via "virtual machines" enables Infrastructure as a Service (IaaS). Máquinas de host são particionadas com eficiência para fornecer recursos para instâncias de 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 o acesso ao armazenamento e redes associadas.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 de máquina de virtual.For more information, see virtual machine N-tier reference architecture.

Embora muitas preocupações de endereço de virtualização e infraestrutura como serviço (IaaS), ele 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 de sistema operacional, aplica os patches de segurança e instala as dependências de terceiros em computadores de destino.The team maintains operating system versions, applies security patches, and installs third-party dependencies on the target machines. Aplicativos muitas vezes se comportam diferentemente em computadores de produção em comparação comparadas o ambiente de teste.Apps often behave differently on production machines compared to the test environment. Problemas podem surgir devido a versões de dependência diferentes 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 implantam aplicativos de N camadas para esses destinos, muitas empresas se beneficiar da implantação para um modelo nativo de nuvem mais como plataforma como 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. Arquiteturas de microsserviços são um desafio maior devido aos requisitos para escalar horizontalmente 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.

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

Plataforma como serviço (PaaS) oferece configurado soluções que os desenvolvedores podem conectar diretamente em.Platform as a Service (PaaS) offers configured solutions that developers can plug into directly. PaaS é outro termo para hospedagem gerenciados.PaaS is another term for managed hosting. Ele elimina a necessidade de gerenciar o sistema operacional base, patches de segurança e em muitos casos as dependências 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 de aplicativos web, bancos de dados, e o back-ends móveis.Examples of platforms include web applications, databases, and mobile back ends.

PaaS resolve os desafios comuns para o IaaS.PaaS addresses the challenges common to IaaS. PaaS permite que o desenvolvedor se concentre no esquema de banco de dados ou de 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. Benefícios do PaaS:Benefits of PaaS include:

  • Paga para usar os modelos que eliminam a sobrecarga de investir em máquinas ociosas.Pay for use models that eliminate the overhead of investing in idle machines.
  • Direcione a implantação e DevOps aprimorado, integração contínua (CI) e pipelines de 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 através dos botões e escalar verticalmente (escala elástica).Push-button scale out and scale up (elastic scale).

A principal desvantagem de PaaS, tradicionalmente, tem sido bloqueio de fornecedor.The main disadvantage of PaaS traditionally has been vendor lock-in. Por exemplo, alguns provedores de PaaS apenas dar suporte a ASP.NET, Node. js, ou outras plataformas e idiomas específicos.For example, some PaaS providers only support ASP.NET, Node.js, or other specific languages and platforms. Produtos como o serviço de aplicativo do Azure foram desenvolvidos para tratar 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.

Plataforma como uma arquitetura de serviço

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

Software como um serviço ou SaaS é centralmente hospedado e disponível sem instalação local ou provisionamento.Software as a Service or SaaS is centrally hosted and available without local installation or provisioning. SaaS normalmente é hospedado sobre o PaaS como plataforma para a implantação de software.SaaS often is hosted on top of PaaS as a platform for deploying software. SaaS fornece serviços para executar e conectar-se com o software existente.SaaS provides services to run and connect with existing software. SaaS costuma ser vertical específico e do setor.SaaS is often industry and vertical specific. O SaaS normalmente é licenciado e normalmente fornece um modelo cliente/servidor.SaaS is often licensed and typically provides a client/server model. Ofertas de SaaS mais modernas usam aplicativos baseados na web para o cliente.Most modern SaaS offerings use web-based apps for the client. As empresas normalmente consideram SaaS como uma solução de negócios para ofertas de licença.Companies typically consider SaaS as a business solution to license offerings. Ele geralmente 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 são criados em IaaS, PaaS e/ou sem servidor back-ends.Indeed, most SaaS solutions are built on IaaS, PaaS, and/or serverless back ends.

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

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

Contêineres são uma solução interessante que permite os benefícios de PaaS como 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 os itens essenciais necessários para executar um aplicativo exclusivo.A container is essentially a runtime that contains the bare essentials needed to run a unique application. A parte do kernel ou o núcleo do sistema operacional do host e serviços, como armazenamento são compartilhados entre 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 ser leve (alguns são meros megabytes em tamanho, em comparação comparada o tamanho de gigabyte de típicos máquinas de virtuais).The shared kernel enables containers to be lightweight (some are mere megabytes in size, compared to the gigabyte size of typical virtual machines). Com hosts que já esteja em execução, 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 girar contêineres rapidamente também fornece camadas adicionais 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.

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

  • Leve e portátilLightweight and portable
  • Independente para que não haja necessidade de instalar as dependênciasSelf-contained so no need to install dependencies
  • Fornecer um ambiente consistente, independentemente do host (executa exatamente as mesmas 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 escala horizontalCan be provisioned quickly for scale-out
  • Pode ser reiniciado rapidamente para se recuperar de falhaCan be restarted quickly to recover from failure

Um contêiner é executado em um host do contêiner (que por sua vez, podem ser executados em uma máquina 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 executar em um único host.Multiple containers or instances of the same containers may run on a single host. Para failover true e resiliência, contêineres devem ser dimensionados em 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 é Docker?For more information about Docker containers, see What is Docker?

Gerenciar 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 podem adicionar uma sobrecarga adicional e complexidade 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. O endereço de nós na instalação do scale out e o failover.Nodes in the installation address scale out and failover. Eles são executados Docker instâncias de contêiner 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 Docker.The kubelet is the client that relays commands from Kubernetes to Docker.

Kubernetes

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

Funções como um serviço (FaaS) é um serviço de contêiner especializado que é semelhante sem servidor.Functions as a Service (FaaS) is a specialized container service that is similar to serverless. Uma implementação específica de FaaS, chamado OpenFaaS, fica na parte superior de contêineres para fornecer funcionalidades sem servidor.A specific implementation of FaaS, called OpenFaaS, sits on top of containers to provide serverless capabilities. OpenFaaS fornece modelos que todas as dependências de contêiner necessárias para executar um trecho de código do pacote.OpenFaaS provides templates that package all of the container dependencies necessary to run a piece of code. Usando modelos simplifica o processo de implantação do código como uma unidade funcional.Using templates simplifies the process of deploying code as a functional unit. OpenFaaS tem como alvo as arquiteturas que já incluam 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 isso forneça funcionalidade sem servidor, especificamente requer que você usar o Docker e um orquestrador.Although it provides serverless functionality, it specifically requires you to use Docker and an orchestrator.

Sem servidorServerless

Uma arquitetura sem servidor fornece uma separação clara entre o código e seu ambiente de hospedagem.A serverless architecture provides a clear separation between the code and its hosting environment. Implementar o código em um função que é invocada por um gatilho.You implement code in a function that is invoked by a trigger. Depois que essa função é encerrada, todos os seus recursos necessários podem ser liberados.After that function exits, all its needed resources may be freed. O gatilho pode ser manual, um processo de tempo, 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 de código.The result of the trigger is the execution of code. Embora as plataformas sem servidor variem, mais fornecem acesso a APIs e associações predefinidas para simplificar tarefas como gravar em um banco de dados ou enfileiramento 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 extremamente afastar o 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. Ele pode ser considerado menos server.It can be thought of as less server.

Soluções de contêiner fornecem existente de desenvolvedores criem scripts para publicar código sem servidor pronto para imagens.Container solutions provide developers existing build scripts to publish code to serverless-ready images. Outras implementações usam soluções de 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. O código de hosts de plataforma sem servidor, como scripts ou executáveis empacotados criado com um SDK relacionado e aloca os recursos necessários para o código dimensionar.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.

A ilustração a seguir mostra quatro componentes sem servidor.The following illustration diagrams four serverless components. Uma solicitação HTTP faz com que o código de 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 para realizar tarefas como tarefas de computação e concluir 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 do uso sem servidor incluem:The advantages of serverless include:

  • Alta densidade.High density. Muitas instâncias do mesmo código sem servidor podem executar no mesmo host em comparação comparado 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 de expansão e resiliência.The instances scale across multiple hosts scale out and resiliency.
  • Microcobrança.Micro-billing. Lista de provedores mais sem servidor com base em execuções sem servidor, permitindo economia de custos grande em determinados cenários.Most serverless providers bill based on serverless executions, enabling massive cost savings in certain scenarios.
  • Escala instantânea.Instant scale. Sem servidor pode ser dimensionado de acordo com as cargas de trabalho automaticamente e rapidamente.Serverless can scale to match workloads automatically and quickly.
  • Tempo de colocação no mercado mais rápido os desenvolvedores se concentrem no código e implantar diretamente para a plataforma sem servidor.Faster time to market Developers focus on code and deploy directly to the serverless platform. Componentes podem ser liberados independentemente uns dos outros.Components can be released independently of each other.

Sem servidor é discutido com mais frequência no contexto de computação, mas também pode aplicar aos dados.Serverless is most often discussed in the context of compute, but can also apply to data. Por exemplo, SQL do Azure e Cosmos DB fornecem bancos de dados de nuvem que não exigem que você configure as máquinas de 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á uma ampla gama de opções disponíveis para arquitetura, inclusive uma abordagem híbrida.There's a broad spectrum of available choices for architecture, including a hybrid approach. Sem servidor simplifica a abordagem, o gerenciamento e o custo dos recursos de 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 expor 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 bloqueio na 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 em seu dimensionamento necessidades, se você deseja gerenciar o tempo de execução e como é possível dividir suas cargas de trabalho em componentes pequenos.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ê saberá mais sobre os desafios potenciais com sem servidor e outros pontos de decisão 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 AplicativoApp FunçãoFunction
AbstraiAbstracts HardwareHardware PlataformaPlatform OS HostOS Host Tempo de execuçãoRuntime
UnitUnit VMVM ProjetoProject ImageImage CódigoCode
Tempo de VidaLifetime mesesMonths Dias para mesesDays to Months Minutos a diasMinutes to Days Milissegundos de 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
  • Escala refere-se à unidade que é usada para dimensionar o aplicativoScale refers to the unit that is used to scale the application
  • Abstrai refere-se para a camada que é abstraída pela implementaçãoAbstracts refers to the layer that is abstracted by the implementation
  • Unidade refere-se ao escopo do que é 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 compilar, 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.