Em uma máquina Ubuntu Server moderna, precisamos hospedar cerca de vinte aplicativos da web. (Mais aplicativos seriam adicionados posteriormente.)
Cada aplicativo é um host virtual nginx, que fala com um grupo de processos FCGI idênticos e de vida longa (escritos internamente), via Socket de Domínio Unix.
Os processos FCGI são diferentes para cada aplicativo da web, mas ainda são muito semelhantes entre si (apenas algumas pequenas diferenças de lógica de negócios).
Normalmente, alocaríamos uma máquina virtual Xen para cada aplicativo da web. Mas, neste caso, a sobrecarga de memória é muito grande - os processos são leves e normalmente não afetam uns aos outros ou competem por recursos. Gostaríamos de hospedar tudo isso em uma única VM Xen.
No entanto, há uma pequena chance de que, devido a algum bug imprevisto, um processo FCGI seja desonesto e consuma todo o CPU e / ou memória da máquina, afetando outras aplicações web.
Gostaríamos de isolar os aplicativos da web uns dos outros para minimizar as chances de que os problemas em um aplicativo da web afetassem outras pessoas.
CPU e recursos de memória são as principais preocupações. Seria bom para outras coisas de controle, como IO throughput etc, mas tenho a sensação de que se ficarmos muito pedantes sobre isso, é melhor usar o Xen de qualquer maneira, os custos de memória seriam insignificantes quando comparados ao trabalho de gerenciamento do sistema custos. Na prática, em nosso caso específico, consideramos que outras coisas além de falta de memória e CPU são problemas de baixo risco, e se isso acontecer, aceitaremos que outros aplicativos da Web sofrerão inicialmente.
A questão é: qual é a maneira correta de limitar o consumo de CPU e memória para um grupo de processos no nosso caso?