Antipatrón Vecino ruidoso
Los sistemas multiinquilino comparten recursos entre dos o más inquilinos, Dado que los inquilinos usan los mismos recursos compartidos, la actividad de un inquilino puede afectar negativamente al uso del sistema de otro inquilino.
Contexto y problema
Al compilar un servicio que comparten varios clientes o inquilinos , puede compilarlo para que sea multiinquilino. Una de las ventajas de los sistemas con múltiples inquilinos es que los recursos se pueden agrupar y compartir entre los inquilinos, Este uso compartido de recursos suele dar lugar a menores costos y a mejorar la eficacia. Sin embargo, si un solo inquilino usa una cantidad desproporcionada de los recursos disponibles en el sistema, el rendimiento general del sistema puede verse afectado. El problema del vecino ruidoso se produce cuando el rendimiento de un inquilino se degrada debido a las actividades de otro.
Considere un ejemplo de sistema multiinquilino que tiene dos inquilinos. Los patrones de uso del inquilino A y del inquilino B coinciden. En horas punta, el inquilino A usa todos los recursos del sistema, lo que significa que las solicitudes que realiza el inquilino B producen un error. En otras palabras, la demanda total de recursos es mayor que la capacidad del sistema:
Es probable que el inquilino cuya solicitud llegue primero tenga prioridad. A continuación, el otro inquilino podría experimentar un problema de vecino ruidoso. Como alternativa, el rendimiento podría degradarse para ambos inquilinos.
El problema de vecino ruidoso también se produce cuando cada inquilino individual consume solo una pequeña parte de la capacidad del sistema. Sin embargo, el uso combinado de recursos de muchos inquilinos puede dar lugar a un pico en el uso general:
Este escenario puede producirse cuando tiene varios inquilinos que tienen patrones de uso similares o cuando no se ha aprovisionado suficiente capacidad para la carga colectiva en el sistema.
Solución
Compartir un único recurso conlleva inherentemente el riesgo de problemas ruidosos vecinos que no se pueden evitar por completo. Sin embargo, hay algunos pasos que los clientes y los proveedores de servicios pueden llevar a cabo para reducir la probabilidad de problemas ruidosos vecinos o mitigar sus efectos.
Acciones que pueden realizar los clientes
Asegúrese de que la aplicación controla la limitación del servicio para reducir la realización de solicitudes innecesarias al servicio. Asegúrese de que la aplicación sigue los procedimientos recomendados para reintentar las solicitudes que recibieron una respuesta de error transitoria.
Comprar capacidad reservada, si está disponible. Por ejemplo, cuando se usa Azure Cosmos DB, se compra el rendimiento reservado.
Migre a un nivel de servicio que tenga garantías de aislamiento más fuertes, si están disponibles. Por ejemplo, al usar Azure Service Bus, migre al nivel Premium. Al usar Azure Cache for Redis, aprovisione una caché de nivel estándar o premium.
Migre a una instancia de un solo inquilino del servicio. Por ejemplo, al usar Azure ExpressRoute, aprovisione circuitos independientes para entornos que son sensibles al rendimiento.
Acciones que pueden realizar los proveedores de servicios
Supervisar el uso de recursos del sistema. Supervise tanto el uso general de recursos como los recursos que usa cada inquilino. Configure alertas para detectar picos en el uso de recursos. Si es posible, configure la automatización para mitigar automáticamente los problemas conocidos mediante el escalado vertical o horizontal.
Aplicar la gobernanza de recursos. Considere la posibilidad de aplicar directivas que impidan que un único inquilino sobrepase el sistema y reduzca la capacidad disponible para otros inquilinos. Este paso puede adoptar la forma de aplicación de cuotas mediante el patrón de limitación o el patrón de limitación.
Aprovisionar más infraestructura. Este proceso puede incluir el escalado vertical mediante la actualización de algunos de los componentes de la solución. O bien, puede incluir el escalado horizontal mediante el aprovisionamiento de particiones adicionales si sigue el patrón de particionamiento o las marcas si sigue el patrón De stamps de implementación.
Permita a los inquilinos comprar capacidad reservada o aprovisionada previamente. Este enfoque proporciona a los inquilinos una mayor confianza en que la solución pueda controlar sus cargas de trabajo de forma confiable.
Equilibrar el uso de recursos de inquilino. Por ejemplo, puede probar uno de los métodos siguientes:
Si hospeda varias instancias de una solución, considere la posibilidad de volver a equilibrar los inquilinos entre las distintas instancias o stamps. Por ejemplo, considere la posibilidad de colocar inquilinos con patrones de uso predecibles y complementarios en varios stamps para aplanar los picos en su uso.
Considerar la posibilidad de tener, o no, procesos en segundo plano o cargas de trabajo que consumen muchos recursos que no tengan límite de tiempo. Ejecute estas cargas de trabajo de forma asincrónica en las horas de poca actividad para conservar la capacidad de los recursos para cargas de trabajo que distinguen el tiempo.
Comprobar que los servicios de bajada proporcionen controles para mitigar los problemas de vecinos ruidosos. Por ejemplo, al usar Kubernetes, considere la posibilidad de usar límites de pod. Al usar Azure Service Fabric, considere la posibilidad de usar las funcionalidades de gobernanza integradas.
Restringir las operaciones que los inquilinos pueden realizar. Por ejemplo, restrinja a los inquilinos que realizan operaciones que ejecutan consultas de base de datos muy grandes, como especificando un número máximo de registros devueltos o un límite de tiempo en las consultas. O bien, cambie estas operaciones para que sean asincrónicas y programándolas para que se ejecuten en horas de poca actividad. Esta acción mitiga el riesgo de que los inquilinos realicen acciones que podrían afectar negativamente a otros inquilinos.
Proporcionar un sistema de calidad de servicio (QoS). Al aplicar QoS, se priorizan algunos procesos o cargas de trabajo antes de otros procesos o cargas de trabajo. Al factorizar QoS en el diseño y la arquitectura, puede asegurarse de que las operaciones de prioridad alta tienen prioridad cuando hay presión sobre los recursos.
Consideraciones
En la mayoría de los casos, los inquilinos individuales no tienen intención de causar problemas ruidosos de vecinos. Es posible que los inquilinos individuales no sepan que sus cargas de trabajo provocan problemas ruidosos de vecinos para otros inquilinos. Sin embargo, algunos inquilinos podrían aprovechar las vulnerabilidades de los componentes compartidos para atacar un servicio, ya sea individualmente o mediante un ataque de denegación de servicio distribuido.
Independientemente de la causa, es importante tratar estos problemas como problemas de gobernanza de recursos y aplicar cuotas de uso, limitación y controles de gobernanza para mitigar el problema.
Nota
Sea transparente con los clientes sobre los mecanismos de limitación o las cuotas de uso que aplique. Es importante que controlen las solicitudes con errores correctamente y no se capturan de la protección por limitaciones.
Procedimiento para detectar el problema
Desde la perspectiva de un cliente, el problema de vecino ruidoso normalmente se manifiesta como solicitudes erróneas al servicio o como solicitudes que tardan mucho tiempo en completarse. En concreto, si la misma solicitud se realiza correctamente en otras ocasiones y parece producir errores aleatoriamente, podría haber un problema ruidoso vecino. Las aplicaciones cliente deben registrar la telemetría para realizar un seguimiento de la tasa de éxito y el rendimiento de las solicitudes a los servicios. Las aplicaciones también deben registrar las métricas de rendimiento de línea base con fines de comparación.
Para los servicios basados en Azure, revise los límites, cuotas y restricciones de suscripción y servicio de Azure para comprender los límites y las cuotas que se aplican a cada componente de Azure de la solución.
Desde la perspectiva de un servicio, el problema de vecino ruidoso podría aparecer de las siguientes maneras.
Picos en el uso de recursos: Es importante comprender claramente el uso normal de los recursos de línea base y configurar la supervisión y las alertas para detectar picos. Tenga en cuenta todos los recursos que podrían afectar al rendimiento o la disponibilidad del servicio. Estos recursos incluyen métricas como el uso de la CPU del servidor y la memoria, la entrada y salida del disco, el uso de la base de datos y el tráfico de red. También debe supervisar las métricas expuestas por los servicios administrados, incluidos los indicadores de rendimiento sintéticos o sintéticos de solicitud, como las unidades de solicitud de Azure Cosmos DB.
Errores al realizar una operación para un inquilino: Busque errores que se producen cuando un inquilino no consume una gran parte de los recursos del sistema. Este patrón podría indicar que el inquilino está experimentando un problema de vecino ruidoso. Realice un seguimiento del consumo de recursos por inquilino. Por ejemplo, cuando se usa Azure Cosmos DB, registre las unidades de solicitud de cada solicitud e incluya el identificador del inquilino en la telemetría para poder agregar el uso de unidades de solicitud para cada inquilino.
Colaboradores
Microsoft mantiene este artículo. Los colaboradores siguientes escribieron este artículo.
Autor principal:
- John Downs | Ingeniero principal de software
Otros colaboradores:
- Chad Kittel | Ingeniero principal de software, Patrones y prácticas de Azure
- Paolo Salvatori | Ingeniero de clientes principal, FastTrack for Azure
- Daniel Scott-Raynsford | Creador de estrategias de tecnología de asociados
- Arsen Vladimirskiy | Ingeniero de clientes principal, FastTrack for Azure
Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.