cgroups (control groups) es una característica fundamental del kernel de Linux que proporciona un mecanismo para organizar procesos en grupos jerárquicos. Cada grupo puede tener sus propios límites y prioridades para el uso de recursos del sistema. Esto incluye CPU, memoria, E/S de disco, ancho de banda de red y otros recursos. cgroups permite a los administradores y orquestadores de contenedores controlar de forma granular cómo los procesos consumen recursos, previniendo que un proceso o grupo de procesos acapare recursos y afecte el rendimiento de otros servicios.
La implementación de cgroups es la base de la mayoría de las tecnologías de virtualización ligera y orquestación de contenedores. Docker, Kubernetes y LXC (Linux Containers) utilizan cgroups extensivamente para aislar y gestionar los recursos asignados a cada contenedor. Por ejemplo, cuando se define un límite de memoria o CPU para un contenedor Docker, es cgroups quien aplica y hace cumplir esas restricciones a nivel del kernel. Los sistemas de gestión de recursos como systemd también utilizan cgroups para controlar los servicios del sistema.
Para un arquitecto de sistemas, comprender cgroups es crucial para diseñar infraestructuras resilientes y eficientes. Permite tomar decisiones informadas sobre la densidad de contenedores por host, la asignación de recursos para microservicios críticos y la prevención de 'noisy neighbor' issues. Los trade-offs incluyen la sobrecarga de gestión de cgroups en sistemas con un número muy elevado de grupos, la complejidad de configurar políticas de recursos óptimas y la necesidad de monitorear su uso para evitar cuellos de botella. Un uso adecuado de cgroups es vital para garantizar la estabilidad, el rendimiento y la previsibilidad de las aplicaciones en entornos contenerizados y distribuidos.