Docker + Apache, como funciona o uso da memória?

5

Digamos que eu tenha um host do docker configurado com 50 contêineres cada um executando um site atendido pelo Apache.

Pelo que entendi, cada contêiner terá uma instância do Apache em execução e, normalmente, cada instância do Apache usa ~ 250 mb por ram. O Apache, em seguida, requer alguns mb por processo filho.

Estou correto em assumir que cada contêiner exigirá a memória de uma instância completa do Apache? Por exemplo. os 50 sites exigiriam 50 x ~ 300mb?

Ou o Apache é capaz de compartilhar algumas partes da memória entre os contêineres para melhorar a eficiência da memória?

O Docker é adequado para hospedagem "mass" eficiente (por exemplo, um grande número de sites, cada um exigindo poucos recursos), em que cada site é um contêiner? Ou seria possível ter apenas um contêiner Apache servindo os 50 sites?

    
por thexacre 29.08.2014 / 09:25

2 respostas

6
O

docker fornece isolamento entre instâncias do apache, o que pode ser interessante por vários motivos (por exemplo, se cada site for administrado por um usuário diferente), também permite a fácil realocação de instâncias em outro servidor. Se você não precisa, provavelmente terá melhor desempenho com apenas uma instância do Apache.

Isolamento significa que o uso de recursos será bem semelhante ao uso de máquinas virtuais, exceto pelo fato de você não pagar a sobrecarga de virtualização, a sobrecarga de particionamento de memória e a sobrecarga do sistema operacional. Dito isto, o uso de memória do Apache deve ser principalmente dependente da carga do servidor, portanto, você não deve esperar aumentar dez vezes se dividir um servidor grande em muitos pequenos. Além disso, como há apenas um kernel, os caches de disco são compartilhados entre os contêineres, portanto, se o padrão de acesso a disco for semelhante entre duas instâncias, você terá um pequeno aumento de desempenho.

    
por 29.08.2014 / 11:31
5

Se eu estiver entendendo sua pergunta e a preocupação for sobre qual memória é compartilhável entre instâncias de contêiner, a resposta a essa pergunta para bibliotecas compartilhadas é que ela depende.

Citações:

link

O segundo benefício é que o copy-on-write e o compartilhamento de páginas se aplicam a todos os processos no host, independentemente dos contêineres. Por exemplo, 1000 contêineres que mapeiam o mesmo arquivo para a memória (digamos, uma biblioteca ou arquivo executável) usarão apenas o espaço de memória uma vez. Se eles gravarem na memória, somente as páginas para as quais escreverem serão copiadas. A ressalva desse segundo benefício é que o sistema de arquivos precisa estar ciente de que seus contêineres estão mapeando o mesmo arquivo. Atualmente, esse é o caso do driver de armazenamento aufs (que opera na camada do sistema de arquivos), mas não do driver lvm / devicemapper (que opera no nível do bloco e, portanto, não se beneficia). Os drivers zfs e btrfs em desenvolvimento também se beneficiarão do cache de páginas. Então eu espero que em um cenário onde você roda milhares de containers e mapeiam grandes arquivos idênticos para a memória, atualmente o driver aufs lhe daria uma melhor utilização da memória. Mas nós não comparamos isso.

    
por 03.10.2014 / 23:55