Patrón ThrottlingThrottling pattern

Controlan el consumo de recursos que usa una instancia de una aplicación, un inquilino individual o un servicio completo.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. Esto puede permitir que el sistema siga funcionando y cumpla los acuerdos de nivel de servicio, incluso cuando el aumento de la demanda impone una carga extrema sobre los 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 y problemaContext and problem

La carga de una aplicación en la nube suele variar con el tiempo en función del número de usuarios activos o de los tipos de actividades que realizan.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 ejemplo, es probable que haya más usuarios activos durante las horas de trabajo, o que el sistema tenga que realizar análisis analíticos de cálculo intensivo al final de cada mes.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. También puede haber ráfagas repentinas e imprevistas en la actividad.There might also be sudden and unanticipated bursts in activity. Si los requisitos de procesamiento del sistema exceden la capacidad de los recursos disponibles, el sistema podrá experimentar un rendimiento deficiente e incluso puede producir un error.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. Si el sistema tiene que cumplir un nivel de servicio acordado, este error podría ser aceptable.If the system has to meet an agreed level of service, such failure could be unacceptable.

Existen muchas estrategias disponibles para manejar cargas variables en la nube, dependiendo de los objetivos de negocio de la aplicación.There're many strategies available for handling varying load in the cloud, depending on the business goals for the application. Una estrategia consiste en utilizar el escalado automático para adaptar los recursos aprovisionados a las necesidades del usuario en cualquier momento.One strategy is to use autoscaling to match the provisioned resources to the user needs at any given time. Esto tiene el potencial de satisfacer la demanda de los usuarios de forma coherente, al tiempo que se optimizan los costos de funcionamiento.This has the potential to consistently meet user demand, while optimizing running costs. Sin embargo, aunque el escalado automático puede desencadenar el aprovisionamiento de recursos adicionales, este aprovisionamiento no es inmediato.However, while autoscaling can trigger the provisioning of additional resources, this provisioning isn't immediate. Si la demanda aumenta rápidamente, puede haber una ventana de tiempo donde hay un déficit de recursos.If demand grows quickly, there can be a window of time where there's a resource deficit.

SoluciónSolution

Una estrategia alternativa al escalado automático es permitir que las aplicaciones utilicen los recursos solo hasta un límite y, después, regularlos cuando se alcance dicho límite.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. El sistema debería supervisar cómo utiliza los recursos para que, cuando el uso supere el umbral, pueda limitar las solicitudes de uno o más usuarios.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. Esto permitirá que el sistema siga funcionando y cumpla los Acuerdos de Nivel de Servicio establecidos.This will enable the system to continue functioning and meet any service level agreements (SLAs) that are in place. Para más información sobre cómo supervisar el uso de recursos, consulte Orientación sobre instrumentación y telemetría.For more information on monitoring resource usage, see the Instrumentation and Telemetry Guidance.

El sistema podría implementar varias estrategias de limitación, entre ellas:The system could implement several throttling strategies, including:

  • Rechazar las solicitudes de un usuario individual que ya ha accedido a las API del sistema más de n veces por segundo durante un período determinado.Rejecting requests from an individual user who's already accessed system APIs more than n times per second over a given period of time. Esto requiere que el sistema mida el uso de recursos para cada inquilino o usuario que ejecuta una aplicación.This requires the system to meter the use of resources for each tenant or user running an application. Para obtener más información, consulte Service Metering Guidance (Guía de medición de servicio).For more information, see the Service Metering Guidance.

  • Deshabilitar o degradar la funcionalidad de determinados servicios no esenciales para que los servicios esenciales puedan funcionar sin impedimentos con recursos suficientes.Disabling or degrading the functionality of selected nonessential services so that essential services can run unimpeded with sufficient resources. Por ejemplo, si la aplicación está transmitiendo vídeo, podría cambiar a una resolución inferior.For example, if the application is streaming video output, it could switch to a lower resolution.

  • Con la nivelación de carga para unificar el volumen de actividad (este enfoque se trata con más detalle en el patrón Queue-Based Load Leveling).Using load leveling to smooth the volume of activity (this approach is covered in more detail by the Queue-based Load Leveling pattern). En un entorno de varios inquilinos, este enfoque reducirá el rendimiento de cada inquilino.In a multi-tenant environment, this approach will reduce the performance for every tenant. Si el sistema debe admitir una combinación de inquilinos con distintos Acuerdos de Nivel de Servicio, el trabajo para inquilinos de alto valor podría realizarse inmediatamente.If the system must support a mix of tenants with different SLAs, the work for high-value tenants might be performed immediately. Las solicitudes para otros inquilinos se pueden retener y controlar cuando haya disminuido el trabajo pendiente.Requests for other tenants can be held back, and handled when the backlog has eased. El patrón Priority Queue podría usarse para ayudar a implementar este enfoque.The Priority Queue pattern could be used to help implement this approach.

  • Aplazar las operaciones que se realizan en nombre de las aplicaciones de prioridad inferior o de los inquilinos.Deferring operations being performed on behalf of lower priority applications or tenants. Estas operaciones se pueden suspender o limitar, con una excepción generada para informar al inquilino de que el sistema está ocupado y que la operación debe retomarse más 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.

La ilustración muestra un gráfico de área para el uso de recursos (una combinación de memoria, CPU, ancho de banda y otros factores) comparándolo con el tiempo para aplicaciones que están haciendo uso de tres características.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. Una característica es un área de funcionalidad, como un componente que realiza un conjunto específico de tareas, una pieza de código que realiza un cálculo complejo o un elemento que proporciona un servicio como una caché en memoria.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 características están etiquetadas como A, B y C.These features are labeled A, B, and C.

Figura 1: Gráfico que muestra el uso de recursos comparándolo con el tiempo en aplicaciones que se ejecutan en nombre de tres usuarios

El área inmediatamente debajo de la línea de una característica indica los recursos que utilizan las aplicaciones cuando invocan esta característica.The area immediately below the line for a feature indicates the resources that are used by applications when they invoke this feature. Por ejemplo, el área situada debajo de la línea para la característica A muestra los recursos utilizados por las aplicaciones que están haciendo uso de la característica A, y el área que se encuentra entre las líneas para la característica A y la característica B indica los recursos utilizados por las aplicaciones que invocan la característica B. La agregación de las áreas para cada característica muestra el uso total de recursos del 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.

En la ilustración anterior se muestran los efectos del aplazamiento de las operaciones.The previous figure illustrates the effects of deferring operations. Justo antes del tiempo T1, los recursos totales asignados a todas las aplicaciones que utilizan estas características alcanzan un umbral (el límite del uso 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). En este punto, las aplicaciones corren el riesgo de agotar los recursos disponibles.At this point, the applications are in danger of exhausting the resources available. En este sistema, la característica B es menos crítica que la A o la C, por lo que está temporalmente deshabilitada y los recursos que estaba utilizando se liberan.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 los tiempos T1 y T2, las aplicaciones que usan la característica A y la C continúan funcionando normalmente.Between times T1 and T2, the applications using Feature A and Feature C continue running as normal. Finalmente, el uso de recursos de estas dos características disminuye hasta el punto en que, en el tiempo T2, hay suficiente capacidad para volver a habilitar la característica B.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.

Los enfoques de escalado automático y de limitación también pueden combinarse para ayudar a mantener la respuesta de las aplicaciones y dentro de los Acuerdos de Nivel de servicio.The autoscaling and throttling approaches can also be combined to help keep the applications responsive and within SLAs. Si se espera que la demanda se mantenga alta, la limitación proporciona una solución temporal mientras que el sistema escala horizontalmente. En este punto, la funcionalidad completa del sistema se puede restaurar.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.

En la siguiente ilustración se muestra un gráfico de área del uso total de recursos por todas las aplicaciones que se ejecutan en un sistema comparado con el tiempo, e ilustra cómo se puede combinar la limitación con el escalado 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 muestra los efectos de combinar la limitación con el escalado automático

En el tiempo T1, se alcanza el umbral que especifica el límite suave del uso de los recursos.At time T1, the threshold specifying the soft limit of resource use is reached. En este momento, el sistema puede comenzar a escalarse horizontalmente. Sin embargo, si los nuevos recursos no están disponibles lo suficientemente rápido, los recursos existentes podrían agotarse y podría producirse un error en el sistema.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 evitar que esto suceda, el sistema se limita temporalmente, tal como se ha descrito anteriormente.To prevent this from occurring, the system is temporarily throttled, as described earlier. Cuando se ha completado el escalado automático y los recursos adicionales están disponibles, la limitación se puede relajar.When autoscaling has completed and the additional resources are available, throttling can be relaxed.

Problemas y consideracionesIssues and considerations

A la hora de decidir cómo implementar este patrón, debe considerar los siguientes puntos:You should consider the following points when deciding how to implement this pattern:

  • La limitación de una aplicación, así como la estrategia que se va a utilizar, es una decisión de arquitectura que afecta a todo el diseño de un sistema.Throttling an application, and the strategy to use, is an architectural decision that impacts the entire design of a system. La limitación debe considerarse al principio del proceso de diseño de la aplicación porque no es fácil de agregar una vez implementado el sistema.Throttling should be considered early in the application design process because it isn't easy to add once a system has been implemented.

  • La limitación debe realizarse rápidamente.Throttling must be performed quickly. El sistema debe ser capaz de detectar un aumento en la actividad y de actuar en consecuencia.The system must be capable of detecting an increase in activity and react accordingly. El sistema también debe poder volver a su estado original rápidamente después de que la carga haya disminuido.The system must also be able to revert to its original state quickly after the load has eased. Esto requiere que los datos de rendimiento apropiados se capturen y se supervisen continuamente.This requires that the appropriate performance data is continually captured and monitored.

  • Si un servicio necesita denegar temporalmente una solicitud de usuario, debe devolver un código de error específico para que la aplicación cliente entienda que el motivo del rechazo a realizar una operación se debe a la limitación.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. La aplicación cliente puede esperar un tiempo antes de volver a intentar la solicitud.The client application can wait for a period before retrying the request.

  • La limitación se puede utilizar como una medida temporal mientras que un sistema escala automáticamente.Throttling can be used as a temporary measure while a system autoscales. En algunos casos es mejor simplemente limitar, en lugar de escalar, si una ráfaga en la actividad es repentina y no se espera que dure mucho tiempo, porque el escalado puede aumentar considerablemente los costos de funcionamiento.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.

  • Si se está utilizando la limitación como medida temporal mientras un sistema escala automáticamente y si la demanda de recursos crece muy rápidamente, el sistema podría no ser capaz de continuar funcionando, incluso cuando opera en 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. Si esto no es aceptable, considere mantener reservas de mayor capacidad y configurar un escalado automático más agresivo.If this isn't acceptable, consider maintaining larger capacity reserves and configuring more aggressive autoscaling.

Cuándo usar este patrónWhen to use this pattern

Use este patrón:Use this pattern:

  • Para asegurarse de que un sistema siga cumpliendo los acuerdos de nivel de servicio.To ensure that a system continues to meet service level agreements.

  • Para impedir que un solo inquilino monopolice los recursos proporcionados por una aplicación.To prevent a single tenant from monopolizing the resources provided by an application.

  • Para controlar las ráfagas de actividad.To handle bursts in activity.

  • Para ayudar a optimizar el costo de un sistema mediante la limitación de los niveles máximos de recursos necesarios para que siga funcionando.To help cost-optimize a system by limiting the maximum resource levels needed to keep it functioning.

EjemploExample

La ilustración final ilustra cómo se puede implementar la limitación en un sistema multiinquilino.The final figure illustrates how throttling can be implemented in a multi-tenant system. Los usuarios de cada una de las organizaciones de inquilinos acceden a una aplicación hospedada en la nube donde rellenan y envían encuestas.Users from each of the tenant organizations access a cloud-hosted application where they fill out and submit surveys. La aplicación contiene instrumentación que supervisa la velocidad a la que estos usuarios envían las solicitudes a la aplicación.The application contains instrumentation that monitors the rate at which these users are submitting requests to the application.

Con el fin de evitar que los usuarios de un inquilino afecten a la capacidad de respuesta y disponibilidad de la aplicación para todos los demás usuarios, se aplica un límite al número de solicitudes por segundo que los usuarios de cualquier inquilino pueden enviar.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. La aplicación bloquea las solicitudes que superen este límite.The application blocks requests that exceed this limit.

Figura 3: Implementación de la limitación en una aplicación mutiinquilino

Los patrones y las directrices siguientes también pueden ser importantes a la hora de implementar este patrón:The following patterns and guidance may also be relevant when implementing this pattern:

  • Orientación sobre instrumentación y telemetría.Instrumentation and Telemetry Guidance. La limitación depende de la recopilación de información sobre el grado de utilización del servicio.Throttling depends on gathering information about how heavily a service is being used. Describe cómo generar y capturar información de supervisión personalizada.Describes how to generate and capture custom monitoring information.
  • Guía de la medición del servicio.Service Metering Guidance. Describe cómo medir el uso de servicios para comprender cómo se utilizan.Describes how to meter the use of services in order to gain an understanding of how they are used. Esta información puede ser útil para determinar cómo limitar un servicio.This information can be useful in determining how to throttle a service.
  • Guía de escalado automático.Autoscaling Guidance. La limitación puede usarse como medida provisional mientras el sistema se escala automáticamente, o para eliminar la necesidad de que un sistema se escale automáticamente.Throttling can be used as an interim measure while a system autoscales, or to remove the need for a system to autoscale. Contiene información sobre estrategias de escalado automático.Contains information on autoscaling strategies.
  • Patrón Queue-Based Load Leveling.Queue-based Load Leveling pattern. Este patrón es un mecanismo utilizado normalmente para implementar la limitación.Queue-based load leveling is a commonly used mechanism for implementing throttling. Una cola puede actuar como un búfer que ayuda a equilibrar la velocidad a la que se entregan a un servicio las solicitudes enviadas por una aplicación.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.
  • Patrón Priority Queue.Priority Queue pattern. Un sistema puede utilizar las colas de prioridad como parte de su estrategia de limitación para mantener el rendimiento de aplicaciones críticas o de mayor valor, a la vez que reduce el rendimiento de las aplicaciones 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.