Padrão de limitaçãoThrottling pattern

Controle o consumo dos recursos utilizados por uma instância de uma aplicação, um inquilino individual ou um serviço completo.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. Deste modo, pode permitir que o sistema continue a funcionar e a cumprir os contratos de nível de serviço, mesmo quando um aumento da procura coloca uma carga extrema sobre os recursos.This can allow the system to continue to function and meet service level agreements, even when an increase in demand places an extreme load on resources.

Contexto e problemaContext and problem

Normalmente, a carga na aplicação na cloud varia ao longo do tempo, com base no número de utilizadores ativos ou nos tipos de atividades que estão a ser realizadas.The load on a cloud application typically varies over time based on the number of active users or the types of activities they are performing. Por exemplo, é provável que mais utilizadores estejam ativos durante o horário comercial ou o sistema poderá ter de realizar análises computacionalmente dispendiosas no final de cada mês.For example, more users are likely to be active during business hours, or the system might be required to perform computationally expensive analytics at the end of each month. Também poderá haver bursts repentinos e inesperados na atividade.There might also be sudden and unanticipated bursts in activity. Se os requisitos de processamento do sistema excederem a capacidade dos recursos que estão disponíveis, este terá um desempenho fraco e até poderá falhar.If the processing requirements of the system exceed the capacity of the resources that are available, it'll suffer from poor performance and can even fail. Se o sistema tiver de satisfazer um nível de serviço acordado, essa falha poderá ser inaceitável.If the system has to meet an agreed level of service, such failure could be unacceptable.

Existem várias estratégias disponíveis para processar uma carga variada na cloud, consoante os objetivos comerciais da aplicação.There're many strategies available for handling varying load in the cloud, depending on the business goals for the application. Uma estratégia passa por utilizar o dimensionamento automático para que os recursos aprovisionados correspondam às necessidades do utilizador em qualquer momento.One strategy is to use autoscaling to match the provisioned resources to the user needs at any given time. Deste modo, tem o potencial satisfazer de forma consistente a procura do utilizador, ao otimizar os custos em execução.This has the potential to consistently meet user demand, while optimizing running costs. No entanto, embora o dimensionamento automático possa acionar o aprovisionamento de recursos adicionais, este tipo de aprovisionamento não é imediato.However, while autoscaling can trigger the provisioning of additional resources, this provisioning isn't immediate. Se a procura crescer rapidamente, poderá verificar-se deficit de recursos num determinado período de tempo.If demand grows quickly, there can be a window of time where there's a resource deficit.

SoluçãoSolution

Uma estratégia alternativa ao dimensionamento automático é permitir que as aplicações utilizem recursos apenas até um limite e, em seguida, limitá-los quando este limite for atingido.An alternative strategy to autoscaling is to allow applications to use resources only up to a limit, and then throttle them when this limit is reached. O sistema deve monitorizar como está a utilizar os recursos para que, quando a utilização exceder o limiar, possa limitar os pedidos de um ou mais utilizadores.The system should monitor how it's using resources so that, when usage exceeds the threshold, it can throttle requests from one or more users. Deste modo, permitirá que o sistema continue a funcionar e a cumprir todos os contratos de nível de serviço (SLAs) que estejam em vigor.This will enable the system to continue functioning and meet any service level agreements (SLAs) that are in place. Para obter mais informações sobre como monitorizar a utilização de recursos, veja Orientações sobre a Instrumentação e a Telemetria.For more information on monitoring resource usage, see the Instrumentation and Telemetry Guidance.

O sistema pode implementar várias estratégias de limitação, incluindo:The system could implement several throttling strategies, including:

  • Rejeitar pedidos de um utilizador individual que já acedeu às APIs do sistema mais do que n vezes por segundo ao longo de um determinado período de tempo.Rejecting requests from an individual user who's already accessed system APIs more than n times per second over a given period of time. Esta ação requer que o sistema meça a utilização dos recursos por parte de cada inquilino ou utilizador a executar uma aplicação.This requires the system to meter the use of resources for each tenant or user running an application. Para obter mais informações, veja Orientações sobre a Medição de Serviço.For more information, see the Service Metering Guidance.

  • Desativar ou degradar a funcionalidade de serviços não essenciais selecionados para que os serviços essenciais possam ser executados sem entraves com recursos suficientes.Disabling or degrading the functionality of selected nonessential services so that essential services can run unimpeded with sufficient resources. Por exemplo, se a aplicação estiver a transmitir em fluxo a saída de vídeo, pode mudar para uma resolução inferior.For example, if the application is streaming video output, it could switch to a lower resolution.

  • Utilizar o nivelamento de carga para suavizar o volume de atividade (esta abordagem é descrita de forma mais detalhada pelo Padrão de Nivelamento de Carga Baseado na Fila).Using load leveling to smooth the volume of activity (this approach is covered in more detail by the Queue-based Load Leveling pattern). Num ambiente multi-inquilino, esta abordagem reduzirá o desempenho de cada inquilino.In a multi-tenant environment, this approach will reduce the performance for every tenant. Se o sistema tiver de suportar uma mistura de inquilinos com SLAs diferentes, o trabalho dos inquilinos de elevado valor poderá ser executado imediatamente.If the system must support a mix of tenants with different SLAs, the work for high-value tenants might be performed immediately. Os pedidos de outros inquilinos podem ser retidos e processados quando o registo de tarefas pendentes tiver abrandado.Requests for other tenants can be held back, and handled when the backlog has eased. O padrão de Fila de Prioridade pode ser utilizado para ajudar a implementar esta abordagem.The Priority Queue pattern could be used to help implement this approach.

  • Diferir operações a executar em nome de inquilinos ou aplicações de prioridade inferior.Deferring operations being performed on behalf of lower priority applications or tenants. Estas operações podem ser suspensas ou limitadas, com uma exceção gerada para informar o inquilino de que o sistema está ocupado e que a operação deve ser repetida mais tarde.These operations can be suspended or limited, with an exception generated to inform the tenant that the system is busy and that the operation should be retried later.

A figura mostra um gráfico de área para a utilização de recursos (combinação de memória, CPU, largura de banda e outros fatores) relativamente ao tempo das aplicações que estão a utilizar as três funcionalidades.The figure shows an area graph for resource use (a combination of memory, CPU, bandwidth, and other factors) against time for applications that are making use of three features. Uma funcionalidade é uma área de funcionalidade como um componente que executa um conjunto específico de tarefas, um fragmento de código que realiza um cálculo complexo ou um elemento que proporciona um serviço, como uma cache de memória.A feature is an area of functionality, such as a component that performs a specific set of tasks, a piece of code that performs a complex calculation, or an element that provides a service such as an in-memory cache. Estas funcionalidades têm as etiquetas A, B e C.These features are labeled A, B, and C.

Figura 1 – Gráfico que mostra a utilização dos recursos relativamente ao tempo das aplicações em execução em nome dos três utilizadores

A área imediatamente abaixo da linha d e uma funcionalidade indica os recursos que são utilizados pelas aplicações quando invocam esta funcionalidade.The area immediately below the line for a feature indicates the resources that are used by applications when they invoke this feature. Por exemplo, a área abaixo da linha da Funcionalidade A mostra os recursos utilizados pelas aplicações que estão a utilizar a Funcionalidade A e a área entre as linhas da Funcionalidade A e da Funcionalidade B indica os recursos utilizados pelas aplicações que invocam a Funcionalidade B. Ao agregar as áreas para cada funcionalidade, mostra a utilização total de recursos do sistema.For example, the area below the line for Feature A shows the resources used by applications that are making use of Feature A, and the area between the lines for Feature A and Feature B indicates the resources used by applications invoking Feature B. Aggregating the areas for each feature shows the total resource use of the system.

A figura anterior ilustra os efeitos que surgem depois de diferir as operações.The previous figure illustrates the effects of deferring operations. Antes do período de tempo T1, o total de recursos atribuídos a todas as aplicações que utilizam estas funcionalidades atinge um limiar (o limite de utilização de recursos).Just prior to time T1, the total resources allocated to all applications using these features reach a threshold (the limit of resource use). Neste momento, as aplicações estão em risco de esgotar os recursos disponíveis.At this point, the applications are in danger of exhausting the resources available. Neste sistema, a Funcionalidade B é menos crítica do que a Funcionalidade A ou a Funcionalidade C, pelo que está temporariamente desativada e os recursos que estava a utilizar são libertados.In this system, Feature B is less critical than Feature A or Feature C, so it's temporarily disabled and the resources that it was using are released. Entre os períodos de tempo T1 e T2, as aplicações que utilizam a Funcionalidade A e a Funcionalidade C continuam a ser executadas normalmente.Between times T1 and T2, the applications using Feature A and Feature C continue running as normal. Eventualmente, a utilização de recursos destas duas funcionalidades diminui até a um ponto que, no período de tempo T2, há capacidade suficiente para ativar a Funcionalidade B novamente.Eventually, the resource use of these two features diminishes to the point when, at time T2, there is sufficient capacity to enable Feature B again.

As abordagens de dimensionamento automático e limitação também podem ser conjugadas para ajudar a manter as aplicações reativas e dentro dos SLAs.The autoscaling and throttling approaches can also be combined to help keep the applications responsive and within SLAs. Caso se preveja que a procura permaneça elevada, a limitação oferecerá uma solução temporária enquanto o sistema aumenta horizontalmente. Neste momento, pode restaurar todas as funcionalidades do sistema.If the demand is expected to remain high, throttling provides a temporary solution while the system scales out. At this point, the full functionality of the system can be restored.

A figura seguinte mostra um gráfico de área da utilização de recursos global por todas as aplicações em execução num sistema relativamente ao tempo e ilustra a forma como a limitação pode ser conjugada com o dimensionamento automático.The next figure shows an area graph of the overall resource use by all applications running in a system against time, and illustrates how throttling can be combined with autoscaling.

Figura 2 – Gráfico que mostra os efeitos da conjugação da limitação com o dimensionamento automático

No período de tempo T1, foi atingido o limiar que especifica o limite não restritivo da utilização de recursos.At time T1, the threshold specifying the soft limit of resource use is reached. Neste momento, o sistema pode começar a aumentar horizontalmente. No entanto, se os novos recursos não ficarem disponíveis de forma suficientemente rápida, poderão ser esgotados os recursos existentes e o sistema poderá falhar.At this point, the system can start to scale out. However, if the new resources don't become available quickly enough, then the existing resources might be exhausted and the system could fail. Para impedir que tal aconteça, o sistema é temporariamente limitado, conforme descrito anteriormente.To prevent this from occurring, the system is temporarily throttled, as described earlier. Quando o dimensionamento automático terminar e os recursos adicionais ficarem disponíveis, a limitação pode ser mais flexível.When autoscaling has completed and the additional resources are available, throttling can be relaxed.

Problemas e consideraçõesIssues and considerations

Deve considerar os seguintes pontos ao decidir como implementar este padrão:You should consider the following points when deciding how to implement this pattern:

  • A limitação de uma aplicação e a definição de uma estratégia a utilizar são uma decisão arquitetural que afeta toda a conceção de um sistema.Throttling an application, and the strategy to use, is an architectural decision that impacts the entire design of a system. A limitação deve ser considerada no início do processo de conceção da aplicação, porque não é fácil adicioná-la depois de implementar um sistema.Throttling should be considered early in the application design process because it isn't easy to add once a system has been implemented.

  • A limitação tem de ser realizada rapidamente.Throttling must be performed quickly. O sistema tem de ser capaz de detetar um aumento na atividade e reagir em conformidade.The system must be capable of detecting an increase in activity and react accordingly. O sistema também deve conseguir reverter para o estado original rapidamente depois de a carga ter abrandado.The system must also be able to revert to its original state quickly after the load has eased. Para tal, é preciso que os dados de desempenho adequados sejam capturados e monitorizados continuamente.This requires that the appropriate performance data is continually captured and monitored.

  • Se precisar de um serviço para negar temporariamente um pedido de utilizador, deverá devolver um código de erro específico para que a aplicação cliente compreenda que o motivo para a recusa realizar uma operação é devido à limitação.If a service needs to temporarily deny a user request, it should return a specific error code so the client application understands that the reason for the refusal to perform an operation is due to throttling. A aplicação cliente pode aguardar por algum tempo antes de repetir o pedido.The client application can wait for a period before retrying the request.

  • A limitação pode servir como uma medida temporária enquanto um sistema é dimensionado automaticamente.Throttling can be used as a temporary measure while a system autoscales. Em alguns casos, é melhor limitar em vez de dimensionar (por exemplo, em caso de aumento repentino da atividade que não se preveja que seja duradouro), porque o dimensionamento pode aumentar consideravelmente os custos de execução.In some cases it's better to simply throttle, rather than to scale, if a burst in activity is sudden and isn't expected to be long lived because scaling can add considerably to running costs.

  • Se a limitação estiver a ser utilizada como uma medida temporária enquanto um sistema é dimensionado automaticamente e se a procura de recursos aumentar muito rapidamente, o sistema poderá não conseguir continuar a funcionar—, mesmo quando operado num modo limitado.If throttling is being used as a temporary measure while a system autoscales, and if resource demands grow very quickly, the system might not be able to continue functioning—even when operating in a throttled mode. Se tal não for aceitável, considere manter reservas de maior capacidade e configurar um dimensionamento automático mais agressivo.If this isn't acceptable, consider maintaining larger capacity reserves and configuring more aggressive autoscaling.

Quando utilizar este padrãoWhen to use this pattern

Utilize este padrão:Use this pattern:

  • Para garantir que um sistema continua a cumprir os contratos de nível de serviço.To ensure that a system continues to meet service level agreements.

  • Para impedir que um único inquilino monopolize os recursos disponibilizados por uma aplicação.To prevent a single tenant from monopolizing the resources provided by an application.

  • Para gerir o aumento da atividade.To handle bursts in activity.

  • Para ajudar a otimizar os custos de um sistema ao limitar os níveis de recursos máximos necessários para os manter a funcionar.To help cost-optimize a system by limiting the maximum resource levels needed to keep it functioning.

ExemploExample

A figura final ilustra como a limitação pode ser implementada num sistema multi-inquilino.The final figure illustrates how throttling can be implemented in a multi-tenant system. Os utilizadores de cada organização inquilina acedem a uma aplicação alojada na cloud onde preenchem e submetem inquéritos.Users from each of the tenant organizations access a cloud-hosted application where they fill out and submit surveys. A aplicação contém instrumentação que monitoriza a taxa a que estes utilizadores submetem pedidos para a aplicação.The application contains instrumentation that monitors the rate at which these users are submitting requests to the application.

Para impedir que os utilizadores de um inquilino afetem a capacidade de resposta e a disponibilidade da aplicação para todos os outros utilizadores, é aplicado um limite ao número de pedidos por segundo que os utilizadores de qualquer inquilino podem submeter.In order to prevent the users from one tenant affecting the responsiveness and availability of the application for all other users, a limit is applied to the number of requests per second the users from any one tenant can submit. A aplicação bloqueia os pedidos que excedem este limite.The application blocks requests that exceed this limit.

Figura 3 – Implementar a limitação numa aplicação multi-inquilino

Os padrões e orientações que se seguem podem também ser relevantes ao implementar este padrão:The following patterns and guidance may also be relevant when implementing this pattern:

  • Orientações sobre a Instrumentação e a Telemetria.Instrumentation and Telemetry Guidance. A limitação depende da recolha de informações sobre a intensidade de utilização de um serviço.Throttling depends on gathering information about how heavily a service is being used. Descreve como gerar e capturar informações de monitorização personalizadas.Describes how to generate and capture custom monitoring information.
  • Orientações sobre a Medição de Serviço.Service Metering Guidance. Descreve como medir a utilização dos serviços para compreender como são utilizados.Describes how to meter the use of services in order to gain an understanding of how they are used. Estas informações podem ser úteis para determinar como limitar um serviço.This information can be useful in determining how to throttle a service.
  • Orientações de Dimensionamento Automático.Autoscaling Guidance. A limitação pode ser utilizada como uma medida provisória enquanto é realizado o dimensionamento automático de um sistema ou para remover a necessidade de dimensionamento automático de um sistema.Throttling can be used as an interim measure while a system autoscales, or to remove the need for a system to autoscale. Contém informações sobre as estratégias de dimensionamento automático.Contains information on autoscaling strategies.
  • Padrão de Nivelamento de Carga Baseado na Fila.Queue-based Load Leveling pattern. O nivelamento de carga baseado na fila é um mecanismo frequentemente utilizado para implementar a limitação.Queue-based load leveling is a commonly used mechanism for implementing throttling. Uma fila pode atuar como uma memória intermédia que ajuda a nivelar a taxa a que os pedidos enviados por uma aplicação são entregues a um serviço.A queue can act as a buffer that helps to even out the rate at which requests sent by an application are delivered to a service.
  • Padrão de Fila de Prioridade.Priority Queue pattern. Um sistema pode utilizar a fila de prioridade como parte da sua estratégia de limitação para manter o desempenho das aplicações de valor crítico ou superior, reduzindo o desempenho das aplicações menos importantes.A system can use priority queuing as part of its throttling strategy to maintain performance for critical or higher value applications, while reducing the performance of less important applications.