Pilares de qualidade de softwarePillars of software quality

Uma aplicação na cloud com êxito irá focar-se nestes cinco pilares de qualidade de software: Escalabilidade, disponibilidade, resiliência, gestão e segurança.A successful cloud application will focus on these five pillars of software quality: Scalability, availability, resiliency, management, and security.

PilarPillar DescriçãoDescription
EscalabilidadeScalability A capacidade de um sistema de processar um aumento de carga.The ability of a system to handle increased load.
DisponibilidadeAvailability A proporção de tempo em que um sistema está funcional e em funcionamento.The proportion of time that a system is functional and working.
ResiliênciaResiliency A capacidade de um sistema em recuperar de falhas e continuar a funcionar.The ability of a system to recover from failures and continue to function.
GestãoManagement Os processos de operações que mantêm um sistema em execução na produção.Operations processes that keep a system running in production.
SegurançaSecurity A proteção das aplicações e dos dados contra ameaças.Protecting applications and data from threats.

EscalabilidadeScalability

A escalabilidade é a capacidade de um sistema de processar um aumento de carga.Scalability is the ability of a system to handle increased load. Existem duas formas principais de uma aplicação poder dimensionar.There are two main ways that an application can scale. Dimensionamento vertical (aumento vertical) significa aumentar a capacidade de um recurso, por exemplo, com uma VM com um tamanho maior.Vertical scaling (scaling up) means increasing the capacity of a resource, for example by using a larger VM size. Dimensionamento horizontal (aumento horizontal) significa adicionar novas instâncias de um recurso, tal como VMs ou réplicas de base de dados.Horizontal scaling (scaling out) is adding new instances of a resource, such as VMs or database replicas.

O dimensionamento horizontal possui vantagens significativas em relação ao dimensionamento vertical:Horizontal scaling has significant advantages over vertical scaling:

  • Verdadeiro dimensionamento da cloud.True cloud scale. As aplicações podem ser criadas para executar centenas ou mesmo milhares de nós, atingindo dimensionamentos que não são possíveis num único nó.Applications can be designed to run on hundreds or even thousands of nodes, reaching scales that are not possible on a single node.
  • O dimensionamento horizontal é elástico.Horizontal scale is elastic. Pode adicionar mais instâncias se houver um aumento da carga ou removê-las durante períodos mais calmos.You can add more instances if load increases, or remove them during quieter periods.
  • O aumento horizontal pode ser acionado automaticamente, com base numa agenda ou em resposta a alterações na carga.Scaling out can be triggered automatically, either on a schedule or in response to changes in load.
  • O aumento horizontal pode ser mais barato do que o aumento vertical.Scaling out may be cheaper than scaling up. A execução de várias VMs pequenas pode custar menos do que uma única VM grande.Running several small VMs can cost less than a single large VM.
  • O dimensionamento horizontal também pode melhorar a resiliência ao adicionar redundância.Horizontal scaling can also improve resiliency, by adding redundancy. Se uma instância ficar inativa, a aplicação permanecerá em execução.If an instance goes down, the application keeps running.

Uma vantagem do dimensionamento vertical é que pode fazê-lo sem realizar qualquer alteração à aplicação.An advantage of vertical scaling is that you can do it without making any changes to the application. Contudo, a uma determinada altura, vai atingir um limite no qual não pode dimensionar mais.But at some point you'll hit a limit, where you can't scale any up any more. Nessa altura, qualquer outro dimensionamento tem de ser horizontal.At that point, any further scaling must be horizontal.

O dimensionamento horizontal tem de ser estruturado no sistema.Horizontal scale must be designed into the system. Por exemplo, pode aumentar horizontalmente as VMs ao colocá-las atrás de um balanceador de carga.For example, you can scale out VMs by placing them behind a load balancer. Porém, cada VM no conjunto tem de ter a capacidade de lidar com qualquer pedido de cliente, pelo que a aplicação não deve ter estados nem deve armazenar os estados externamente (digamos, uma cache distribuída).But each VM in the pool must be able to handle any client request, so the application must be stateless or store state externally (say, in a distributed cache). Frequentemente, os serviços PaaS geridos possuem dimensionamento horizontal e dimensionamento automático incorporados.Managed PaaS services often have horizontal scaling and auto-scaling built in. A facilidade de dimensionamento destes serviços é uma das principais vantagens da utilização dos serviços PaaS.The ease of scaling these services is a major advantage of using PaaS services.

Porém, o simples ato de adicionar mais instâncias não significa que uma aplicação vá ser dimensionada.Just adding more instances doesn't mean an application will scale, however. Pode simplesmente deslocar o estrangulamento para outro local.It might simply push the bottleneck somewhere else. Por exemplo, pode dimensionar um front-end da Web para processar mais pedidos de clientes, que podem acionar disputas de bloqueio na base de dados.For example, if you scale a web front-end to handle more client requests, that might trigger lock contentions in the database. Em seguida, terá de considerar medidas adicionais, tal como a simultaneidade otimista ou a criação de partições de dados, para ativar um maior débito para a base de dados.You would then need to consider additional measures, such as optimistic concurrency or data partitioning, to enable more throughput to the database.

Realize sempre os testes de desempenho e carga para localizar potenciais estrangulamentos.Always conduct performance and load testing to find these potential bottlenecks. As partes de um sistema sem estado, tal como as bases de dados, são a causa mais comum dos estrangulamentos e precisam de uma conceção cuidadosa para poderem aumentar horizontalmente.The stateful parts of a system, such as databases, are the most common cause of bottlenecks, and require careful design to scale horizontally. A resolução de um estrangulamento pode revelar outros estrangulamentos noutro local.Resolving one bottleneck may reveal other bottlenecks elsewhere.

Utilize a Lista de verificação da escalabilidade para rever a sua conceção de um ponto de vista de escalabilidade.Use the Scalability checklist to review your design from a scalability standpoint.

Orientações de escalabilidadeScalability guidance

DisponibilidadeAvailability

A disponibilidade é a proporção de tempo em que o sistema está funcional e em funcionamento.Availability is the proportion of time that the system is functional and working. Esta é normalmente medida como uma percentagem do tempo de atividade.It is usually measured as a percentage of uptime. Os erros da aplicação, os problemas da infraestrutura e a carga do sistema podem reduzir a disponibilidade.Application errors, infrastructure problems, and system load can all reduce availability.

Uma aplicação na cloud deve ter um objetivo de nível de serviço (SLO) a definir claramente a disponibilidade esperada e a forma como a disponibilidade é medida.A cloud application should have a service level objective (SLO) that clearly defines the expected availability, and how the availability is measured. Quando definir a disponibilidade, observe o caminho crítico.When defining availability, look at the critical path. O front-end da Web pode ter a capacidade de responder aos pedidos dos clientes, mas se todas as transações falharem porque não consegue estabelecer ligação com a base de dados, a aplicação não estará disponível para os utilizadores.The web front-end might be able to service client requests, but if every transaction fails because it can't connect to the database, the application is not available to users.

Muitas vezes, a disponibilidade é descrita em termos de “9s” — por exemplo, “quatro 9s” significa 99,99% de tempo de atividade.Availability is often described in terms of "9s" — for example, "four 9s" means 99.99% uptime. A tabela seguinte mostra o potencial período de indisponibilidade em diferentes níveis de disponibilidade.The following table shows the potential cumulative downtime at different availability levels.

Tempo de atividade em %% Uptime Período de indisponibilidade por semanaDowntime per week Período de indisponibilidade por mêsDowntime per month Período de indisponibilidade por anoDowntime per year
99%99% 1,68 horas1.68 hours 7,2 horas7.2 hours 3,65 dias3.65 days
99,9%99.9% 10 minutos10 minutes 43,2 minutos43.2 minutes 8,76 horas8.76 hours
99,95%99.95% 5 minutos5 minutes 21,6 minutos21.6 minutes 4,38 horas4.38 hours
99,99%99.99% 1 minuto1 minute 4,32 minutos4.32 minutes 52,56 minutos52.56 minutes
99,999%99.999% 6 segundos6 seconds 26 segundos26 seconds 5,26 minutos5.26 minutes

Tenha em atenção que um tempo de atividade de 99% pode traduzir-se numa interrupção do serviço de quase 2 horas por semana.Notice that 99% uptime could translate to an almost 2-hour service outage per week. Para muitas aplicações, especialmente as direcionadas ao consumidor, tal não é um SLO aceitável.For many applications, especially consumer-facing applications, that is not an acceptable SLO. Por outro lado, cinco 9s (99,999%) significa que não terá um período de indisponibilidade superior a 5 minutos num ano.On the other hand, five 9s (99.999%) means no more than 5 minutes of downtime in a year. É bastante complicado detetar apenas uma interrupção tão rapidamente, quanto mais resolver o problema.It's challenging enough just detecting an outage that quickly, let alone resolving the issue. Para obter uma disponibilidade muito elevada (99,99% ou superior), não pode depender de uma intervenção manual para recuperar das falhas.To get very high availability (99.99% or higher), you can't rely on manual intervention to recover from failures. A aplicação tem de realizar processos de diagnóstico e recuperação automaticamente. É aqui que a resiliência se torna crucial.The application must be self-diagnosing and self-healing, which is where resiliency becomes crucial.

No Azure, o Contrato de Nível de Serviço (SLA) descreve o compromisso da Microsoft quanto ao período de disponibilidade e à conectividade.In Azure, the Service Level Agreement (SLA) describes Microsoft's commitments for uptime and connectivity. Se o SLA para um determinado serviço for 99,95%, significa que o serviço deve estar disponível 99,95% do tempo.If the SLA for a particular service is 99.95%, it means you should expect the service to be available 99.95% of the time.

As aplicações dependem muitas vezes de vários serviços.Applications often depend on multiple services. Em geral, a probabilidade de algum dos serviços apresentar um período de indisponibilidade é independente.In general, the probability of either service having downtime is independent. Por exemplo, suponha que a sua aplicação depende de dois serviços, cada um com um SLA de 99,9%.For example, suppose your application depends on two services, each with a 99.9% SLA. O SLA composto para ambos os serviços é de 99,9% × 99,9% ≈ 99,8% ou ligeiramente inferior a cada serviço por si só.The composite SLA for both services is 99.9% × 99.9% ≈ 99.8%, or slightly less than each service by itself.

Utilize a Lista de verificação da disponibilidade para rever a sua conceção de um ponto de vista de disponibilidade.Use the Availability checklist to review your design from an availability standpoint.

Orientações de disponibilidadeAvailability guidance

ResiliênciaResiliency

A resiliência é a capacidade do sistema em recuperar de falhas e continuar a funcionar.Resiliency is the ability of the system to recover from failures and continue to function. O objetivo da resiliência é fazer com que a aplicação volte para um estado totalmente funcional após a ocorrência de uma falha.The goal of resiliency is to return the application to a fully functioning state after a failure occurs. A resiliência está estritamente relacionada com a disponibilidade.Resiliency is closely related to availability.

No desenvolvimento de aplicações tradicional, tem sido dado ênfase à redução do tempo médio entre as falhas (MTBF).In traditional application development, there has been a focus on reducing mean time between failures (MTBF). Foram realizados esforços para tentar impedir que o sistema falhe.Effort was spent trying to prevent the system from failing. Na informática na cloud, é preciso uma mentalidade diferente, por vários fatores:In cloud computing, a different mindset is required, due to several factors:

  • Os sistemas distribuídos são complexos e uma falha num momento pode potencialmente propagar-se por todo o sistema.Distributed systems are complex, and a failure at one point can potentially cascade throughout the system.
  • Os custos dos ambientes na cloud são mantidos baixos através da utilização de hardware base, por isso, são esperadas falhas de hardware ocasionais.Costs for cloud environments are kept low through the use of commodity hardware, so occasional hardware failures must be expected.
  • As aplicações dependem muitas vezes de serviços externos, os quais podem ficar temporariamente indisponíveis ou limitar os utilizadores de volume elevado.Applications often depend on external services, which may become temporarily unavailable or throttle high-volume users.
  • Os utilizadores atuais esperam que uma aplicação esteja disponível 24 horas por dia, 7 dias por semana, e que nunca fique offline.Today's users expect an application to be available 24/7 without ever going offline.

Todos estes fatores significam que as aplicações na cloud têm de ser concebidas já a contar com falhas ocasionais e a sua recuperação.All of these factors mean that cloud applications must be designed to expect occasional failures and recover from them. O Azure tem muitas funcionalidades de resiliência já incorporadas na plataforma.Azure has many resiliency features already built into the platform. Por exemplo:For example:

  • O Armazenamento do Microsoft Azure, a Base de Dados SQL e a Cosmos DB fornecem uma replicação de dados incorporada, tanto numa como em várias regiões.Azure Storage, SQL Database, and Cosmos DB all provide built-in data replication, both within a region and across regions.
  • Os Managed Disks do Azure são posicionados automaticamente em unidades de escala de armazenamento diferentes, para limitar os efeitos das falhas de hardware.Azure Managed Disks are automatically placed in different storage scale units, to limit the effects of hardware failures.
  • As VMs num conjunto de disponibilidade são distribuídas por vários domínios de falhas.VMs in an availability set are spread across several fault domains. Um domínio de falha é um grupo de VMs que partilham a mesma origem de energia e o mesmo comutador de rede física.A fault domain is a group of VMs that share a common power source and network switch. A propagação de VMs em domínios de falha limita o impacto das falhas de hardware físico, da indisponibilidade de rede ou das falhas de energia.Spreading VMs across fault domains limits the impact of physical hardware failures, network outages, or power interruptions.

Dito isso, ainda precisa de criar resiliência na sua aplicação.That said, you still need to build resiliency into your application. As estratégias de resiliência podem ser aplicadas em todos os níveis da arquitetura.Resiliency strategies can be applied at all levels of the architecture. Algumas mitigações são de natureza mais tática — por exemplo, repetir uma chamada remota após uma falha de rede transitória.Some mitigations are more tactical in nature — for example, retrying a remote call after a transient network failure. Outras mitigações são mais estratégicas, tal como ativações pós-falha da aplicação completa para uma região secundária.Other mitigations are more strategic, such as failing over the entire application to a secondary region. As mitigações táticas podem fazer uma grande diferença.Tactical mitigations can make a big difference. Embora seja rara a ocorrência de uma interrupção de toda a região, os problemas transitórios, tal como o congestionamento da rede são mais comuns — assim, aborde esses primeiro.While it's rare for an entire region to experience a disruption, transient problems such as network congestion are more common — so target these first. É igualmente importante possuir a monitorização e o diagnóstico adequados, tanto para detetar falhas quando estas acontecem como para encontrar a raiz dos problemas.Having the right monitoring and diagnostics is also important, both to detect failures when they happen, and to find the root causes.

Ao conceber uma aplicação para que seja resiliente, deve compreender os requisitos de disponibilidade.When designing an application to be resilient, you must understand your availability requirements. Qual é o período de indisponibilidade aceitável?How much downtime is acceptable? Esta é, em parte, uma função de custo.This is partly a function of cost. Qual será o custo do período de indisponibilidade para o seu negócio?How much will potential downtime cost your business? Quanto deve investir para que a aplicação seja de elevada disponibilidade?How much should you invest in making the application highly available?

Utilize a Lista de verificação da resiliência para rever a sua conceção de um ponto de vista de resiliência.Use the Resiliency checklist to review your design from a resiliency standpoint.

Orientação sobre resiliênciaResiliency guidance

Gestão e DevOpsManagement and DevOps

Este pilar aborda os processos de operações que mantêm uma aplicação em execução na produção.This pillar covers the operations processes that keep an application running in production.

As implementações têm de ser fiáveis e previsíveis.Deployments must be reliable and predictable. Devem ser automatizadas de forma a reduzir as hipóteses de erro humano.They should be automated to reduce the chance of human error. O processo em si deve ser rápido e rotineiro, para que não abrande o lançamento de novas funcionalidades ou correções de erros.They should be a fast and routine process, so they don't slow down the release of new features or bug fixes. Igualmente importante, tem de ter a capacidade de reverter ou efetuar um rollforward rapidamente na eventualidade de uma atualização apresentar problemas.Equally important, you must be able to quickly roll back or roll forward if an update has problems.

A monitorização e o diagnóstico são fundamentais.Monitoring and diagnostics are crucial. As aplicações na cloud são executadas num datacenter remoto onde o utilizador não tem controlo total sobre a infraestrutura ou, em alguns casos, do sistema operativo.Cloud applications run in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. Numa aplicação grande, não é prático iniciar sessão nas VMs para resolver um problema ou pesquisar os ficheiros de registo.In a large application, it's not practical to log into VMs to troubleshoot an issue or sift through log files. Com os serviços PaaS, pode nem sequer existir uma VM dedicada para iniciar sessão.With PaaS services, there may not even be a dedicated VM to log into. A monitorização e o diagnóstico fornecem elementos sobre o sistema, para que saiba quando e onde ocorrem falhas.Monitoring and diagnostics give insight into the system, so that you know when and where failures occur. Todos os sistemas têm de ser observáveis.All systems must be observable. Utilize um esquema de registo comum e consistente que lhe permita correlacionar eventos nos sistemas.Use a common and consistent logging schema that lets you correlate events across systems.

O processo de monitorização e diagnóstico tem várias fases distintas:The monitoring and diagnostics process has several distinct phases:

  • Instrumentação.Instrumentation. Gerar os dados não processados, de registos de aplicações, registos de servidores web, diagnósticos incorporados na plataforma do Azure e a outras origens.Generating the raw data, from application logs, web server logs, diagnostics built into the Azure platform, and other sources.
  • Recolha e armazenamento.Collection and storage. Consolidar os dados num local.Consolidating the data into one place.
  • Análise e diagnóstico.Analysis and diagnosis. Para resolver problemas e ver o estado de funcionamento geral.To troubleshoot issues and see the overall health.
  • Visualização e alertas.Visualization and alerts. Utilizar dados de telemetria para detetar tendências ou alertar a equipa de operações.Using telemetry data to spot trends or alert the operations team.

Utilize a Lista de verificação de DevOps para rever a sua conceção de um ponto de vista de gestão e de DevOps.Use the DevOps checklist to review your design from a management and DevOps standpoint.

Orientações de Gestão e de DevOpsManagement and DevOps guidance

SegurançaSecurity

Tem de pensar na segurança ao longo de todo o ciclo de vida de uma aplicação, desde a conceção e implementação até à sua execução e operações.You must think about security throughout the entire lifecycle of an application, from design and implementation to deployment and operations. A plataforma do Azure fornece proteção contra uma variedade de ameaças, tal como intrusão de rede e ataques DDoS.The Azure platform provides protections against a variety of threats, such as network intrusion and DDoS attacks. Mas, ainda assim, terá integrar segurança na aplicação e nos processos de DevOps.But you still need to build security into your application and into your DevOps processes.

Seguem-se algumas áreas de segurança abrangentes a ter em consideração.Here are some broad security areas to consider.

Gestão de identidadesIdentity management

Considere utilizar o Azure Active Directory (Azure AD) para autenticar e autorizar utilizadores.Consider using Azure Active Directory (Azure AD) to authenticate and authorize users. O Azure AD é um serviço de gestão de identidades e acesso completamente gerido.Azure AD is a fully managed identity and access management service. Pode utilizá-lo para criar os domínios que existem puramente no Azure ou integrá-los com as suas identidades do Active Directory no local.You can use it to create domains that exist purely on Azure, or integrate with your on-premises Active Directory identities. O Azure AD também pode ser integrado com o Office 365, o Dynamics CRM Online e muitas aplicações SaaS de terceiros.Azure AD also integrates with Office365, Dynamics CRM Online, and many third-party SaaS applications. Para aplicações direcionadas para o consumidor, o Azure Active Directory B2C permite que os utilizadores façam a autenticação com as suas contas de redes sociais existentes (tal como Facebook, Google ou LinkedIn) ou que criem uma nova conta de utilizador gerida pelo Azure AD.For consumer-facing applications, Azure Active Directory B2C lets users authenticate with their existing social accounts (such as Facebook, Google, or LinkedIn), or create a new user account that is managed by Azure AD.

Se pretender integrar um ambiente do Active Directory no local com uma rede do Azure, dependendo dos seus requisitos, estão disponíveis várias abordagens.If you want to integrate an on-premises Active Directory environment with an Azure network, several approaches are possible, depending on your requirements. Para obter mais informações, veja as nossas arquiteturas de referência de Gestão de Identidades.For more information, see our Identity Management reference architectures.

Proteger a infraestruturaProtecting your infrastructure

Controle o acesso aos recursos do Azure que implementa.Control access to the Azure resources that you deploy. Cada subscrição do Azure tem uma relação de confiança com um inquilino do Azure AD.Every Azure subscription has a trust relationship with an Azure AD tenant. Utilize o Controlo de Acesso Baseado em Funções (RBAC) para conceder aos utilizadores na sua organização as permissões adequadas aos recursos do Azure.Use Role-Based Access Control (RBAC) to grant users within your organization the correct permissions to Azure resources. Conceda acesso ao atribuir a função RBAC a utilizadores ou grupos num determinado âmbito.Grant access by assigning RBAC role to users or groups at a certain scope. O âmbito pode ser uma subscrição, um grupo de recursos ou um único recurso.The scope can be a subscription, a resource group, or a single resource. Faça uma Auditoria a todas as alterações à infraestrutura.Audit all changes to infrastructure.

Segurança de aplicaçõesApplication security

Em geral, as melhores práticas de segurança para o desenvolvimento de aplicações são aplicadas na cloud.In general, the security best practices for application development still apply in the cloud. Estas incluem opções como utilizar o SSL em todo o lado, proteger contra ataques CSRF e XSS, impedir ataques de injeção de SQL, entre outros.These include things like using SSL everywhere, protecting against CSRF and XSS attacks, preventing SQL injection attacks, and so on.

As aplicações na cloud utilizam frequentemente serviços geridos que têm chaves de acesso.Cloud applications often use managed services that have access keys. Nunca as selecione no controlo de origem.Never check these into source control. Pondere armazenar segredos da aplicação no Azure Key Vault.Consider storing application secrets in Azure Key Vault.

Soberania e encriptação de dadosData sovereignty and encryption

Confirme se os seus dados permanecem na zona geopolítica correta quando utiliza a elevada disponibilidade do Azure.Make sure that your data remains in the correct geopolitical zone when using Azure's highly available. O armazenamento de georreplicação do Azure utiliza o conceito de uma região emparelhado na mesma região geopolítica.Azure's geo-replicated storage uses the concept of a paired region in the same geopolitical region.

Utilize o Azure Key Vault para salvaguardar segredos e chaves criptográficos.Use Key Vault to safeguard cryptographic keys and secrets. Ao utilizar o Azure Key Vault, pode encriptar chaves e segredos com chaves protegidas por módulos de segurança de hardware (HSMs).By using Key Vault, you can encrypt keys and secrets by using keys that are protected by hardware security modules (HSMs). Muitos serviços de base de dados e armazenamento do Azure suportam uma encriptação de dados inativa, incluindo Armazenamento do Microsoft Azure, Base de Dados SQL do Azure, Azure SQL Data Warehouse e Cosmos DB.Many Azure storage and DB services support data encryption at rest, including Azure Storage, Azure SQL Database, Azure SQL Data Warehouse, and Cosmos DB.

Recursos de segurançaSecurity resources