Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster

Containers Hibernate: Uma Nova Abordagem para Computação Serverless

Descubra como os Hibernate Containers melhoram o desempenho e a gestão de recursos em aplicações serverless.

― 9 min ler


Reformulando ServerlessReformulando Serverlesscom Hibernatememória e aumentam a velocidade.Contêineres Hibernate diminuem o uso de
Índice

A computação sem servidor é uma maneira popular de rodar aplicações sem precisar gerenciar os servidores por trás. Quando os usuários fazem solicitações, o sistema precisa responder rápido. Para isso, existem duas estratégias principais: deixar contêineres (ambientes virtuais para aplicações) prontos (Contêineres Quentes) ou iniciar novos contêineres rapidamente quando necessário (Cold Start).

Entendendo os Modos de Contêiner

Esse texto foca em um novo modo de inicialização de contêiner chamado Contêiner Hibernate. Esse modo é mais rápido que iniciar um novo contêiner do zero e usa menos memória do que manter um Contêiner Quente ativo. O Contêiner Hibernate funciona salvando a memória da aplicação no disco quando não está em uso, liberando recursos. Quando uma solicitação chega, a memória salva é carregada de volta no contêiner, permitindo uma resposta rápida.

Diferenças Entre os Modos de Contêiner

  1. Cold Start: O contêiner é criado do zero. Isso leva tempo e usa mais recursos.
  2. Contêiner Quente: O contêiner fica ativo e pronto pra uso. Porém, isso consome muita memória.
  3. Contêiner Hibernate: Esse é um meio-termo. Ele salva a memória no disco quando está ocioso, tornando-se mais leve que um Contêiner Quente, mas capaz de iniciar rapidamente.

Benefícios do Contêiner Hibernate

Quando o Contêiner Hibernate está pronto pra responder a uma solicitação, ele já tá preparado, o que torna o tempo de resposta mais rápido se comparado a um Cold Start. Ao mesmo tempo, ele usa bem menos memória do que manter um Contêiner Quente pronto.

Nos testes, o Contêiner Hibernate mostrou um uso de memória de 7% a 25% menor que o Contêiner Quente. Isso significa que ele pode hospedar mais contêineres no mesmo hardware, melhorando a eficiência.

O Papel dos Principais Provedores de Nuvem

As principais plataformas de nuvem como AWS, Google Cloud e Azure adotaram a computação sem servidor para atender a muitas necessidades dos usuários ao mesmo tempo. Esses serviços muitas vezes usam Máquinas Virtuais (VMs) como contêineres seguros em vez das soluções típicas de contêiner, porque as VMs oferecem mais segurança. No entanto, esse design pode levar a um maior uso de memória e tempos de resposta mais lentos.

Problemas de Performance na Computação Sem Servidor

O tempo de resposta é super importante na computação sem servidor porque afeta a experiência do usuário. Durante o tempo de resposta, três fatores importam:

  1. Início do contêiner: Geralmente leva cerca de 100 milissegundos.
  2. Início da aplicação: Isso pode variar de 10 milissegundos a vários segundos.
  3. Processamento da solicitação: Normalmente é muito rápido, mas pode levar no máximo 10 segundos.

Os dois primeiros fatores podem desacelerar bastante o tempo de resposta geral.

Otimizando Para Respostas Mais Rápidas

Para acelerar o processo e melhorar a experiência do usuário, duas técnicas principais são frequentemente usadas:

  1. Manter Contêineres Quentes: Significa mantê-los ativos por um tempo curto pra que possam ser reutilizados, ajudando a reduzir o tempo de espera, mas consumindo muita memória do sistema.
  2. Técnicas Rápidas de Cold Start: Essas buscam reduzir o tempo que leva pra iniciar um novo contêiner, envolvendo etapas pra acelerar o início da aplicação.

Nesse contexto, o modo Contêiner Hibernate surge como uma nova abordagem pra minimizar o tempo de inicialização usando troca de memória.

A Técnica de Troca de Memória

A troca de memória é um método que move memória inativa para um armazenamento secundário, como um disco. Quando o sistema precisa dessa memória de novo, ele a recupera rapidamente.

Aspectos Chave da Troca de Memória
  1. Armazenamento Rápido: Com opções de armazenamento rápido disponíveis, o desempenho da troca de memória melhorou bastante.
  2. Cargas de Trabalho Leves: A maioria das aplicações sem servidor não precisa de muita memória. Muitas usam memória mínima, o que ajuda na hora da troca.

Benefícios de Adotar a Troca de Memória

Utilizar a troca de memória pode levar a tempos de inicialização mais rápidos enquanto consome menos memória. O Contêiner Hibernate usa essa técnica pra alcançar menor latência e melhor desempenho.

Comparando o Consumo de Memória

O uso de memória do Contêiner Hibernate é consideravelmente menor que o do Contêiner Quente, além de permitir que a aplicação comece mais rápido do que durante um Cold Start.

Como Funciona o Processo de Hibernate

Quando um Contêiner Hibernate não está em uso, ele entra em um estado onde seus recursos são minimizados. Veja como isso acontece:

  1. Os processos da aplicação são pausados.
  2. A memória liberada é devolvida ao sistema operacional.
  3. A memória usada é salva em um disco pra recuperação rápida depois.
  4. A memória desnecessária é limpa.

Esse processo significa que o Contêiner Hibernate não usa recursos de CPU desnecessários enquanto está ocioso.

O Que Acontece Quando Uma Solicitação Chega?

Quando uma solicitação é feita, o Contêiner Hibernate pode responder rapidamente porque já está configurado. Ele pode mudar para um estado ativo sem precisar começar do zero.

Os Estados Hibernate e Acordado

  1. Estado Hibernate: O contêiner é armazenado com uso mínimo de recursos.
  2. Estado Acordado: Quando uma solicitação chega, ele pode processá-la rapidamente, muitas vezes com necessidades de memória mais baixas que um Contêiner Quente.

Gerenciamento de Memória no Contêiner Hibernate

Uma das grandes vantagens do Contêiner Hibernate é que ele pode devolver memória liberada de volta ao sistema operacional host. Isso permite um uso melhor dos recursos.

Desafios do Gerenciamento de Memória Tradicional

Na maioria dos sistemas, uma vez que uma aplicação libera memória, ela não volta automaticamente pro sistema host. Existem dois métodos comuns usados pra lidar com a recuperação de memória:

  1. Ballooning: Esse método depende de um driver especial pra ajudar a gerenciar tamanhos de memória dinamicamente.
  2. Plugin de Memória: Essa técnica permite adicionar ou remover memória enquanto a aplicação tá rodando, mas tem um custo de desempenho.

No contexto do Contêiner Hibernate, um novo sistema de gerenciamento de memória foi desenvolvido pra agilizar a recuperação de memória.

Recursos Chave do Novo Sistema de Gerenciamento de Memória

  • Bitmap Page Allocator: Essa nova abordagem permite uma alocação e recuperação de memória eficientes, resolvendo problemas enfrentados por sistemas convencionais.
  • Gerenciamento de Páginas Livres: Ele mantém um controle eficaz das páginas de memória livres, acelerando o processo de recuperação quando a memória é liberada.

O Gerenciador de Troca

O Gerenciador de Troca é um componente crucial que permite ao Contêiner Hibernate gerenciar a troca de memória de maneira eficiente. Esse sistema realiza o seguinte:

  1. Pausa Aplicações: Quando os recursos precisam ser minimizados, o Gerenciador de Troca pode pausar aplicações em execução.
  2. Modifica Tabelas de Páginas: Atualiza as configurações de memória conforme necessário pra marcar páginas que não estão sendo usadas.
  3. Escreve em Arquivos de Troca: As páginas de memória são escritas em um arquivo de troca baseado em disco pra recuperação futura.
  4. Devolve Memória pro OS Host: Finalmente, a memória liberada é devolvida ao sistema operacional host pra ser usada por outros processos.

Dois Tipos de Mecanismos de Troca

O Contêiner Hibernate tem dois mecanismos pra lidar com a memória:

1. Swap-in Baseado em Falha de Página

Quando uma aplicação tenta acessar memória que foi trocada, uma falha ocorre e o sistema recorda a memória necessária do disco. Esse é mais um método de acesso aleatório e pode ser mais lento.

2. Swap-in por REAP em Lote

Esse método mais eficiente carrega todas as páginas de memória necessárias de uma vez, melhorando a velocidade. Veja como funciona:

  • Uma gravação é feita sobre qual memória é necessária quando a aplicação roda.
  • Quando o contêiner acorda, todas as páginas de memória registradas são puxadas de volta do disco em uma única operação.

Avaliações de Desempenho e Resultados

Os testes mostraram que o Contêiner Hibernate podia gerenciar solicitações de usuários mais rapidamente e consumir menos memória do que os métodos tradicionais.

Comparação de Latência de Resposta

Em experimentos, os tempos de resposta foram medidos em vários estados de contêiner:

  • Cold Start: Maior tempo de resposta devido à inicialização.
  • Contêiner Quente: Tempo de resposta moderado, já que está ativo.
  • Contêiner Hibernate: Mais rápido que Cold Start, mas mais lento que Contêiner Quente, ainda assim efetivo.
  • Contêiner Acordado: As respostas foram quase iguais às de Contêineres Quentes, mas usaram menos memória.

Insights do Consumo de Memória

Os testes também mostraram que os Contêineres Hibernate e seus equivalentes Acordados usaram significativamente menos memória se comparados aos Contêineres Quentes, com o uso caindo para apenas 7% a 25% do que um Contêiner Quente usaria.

Conclusões

A abordagem de usar Contêineres Hibernate oferece um método efetivo pra gerenciar ambientes de computação sem servidor. Os resultados mostram menor latência nas respostas e melhor gerenciamento de memória, permitindo mais implantações nos mesmos recursos.

Vantagens dos Contêineres Hibernate

  • Menor Uso de Recursos: Usando menos memória, mais contêineres podem rodar simultaneamente.
  • Tempos de Resposta Mais Rápidos: Alta eficiência no manuseio de solicitações melhora a experiência do usuário.
  • Arquitetura Simplificada: Reduzir a complexidade no manejo de memória facilita a manutenção.

Ao implementar o modo Contêiner Hibernate, sistemas sem servidor podem alcançar melhorias significativas em desempenho e eficiência.

Fonte original

Título: Hibernate Container: A Deflated Container Mode for Fast Startup and High-density Deployment in Serverless Computing

Resumo: Serverless computing is a popular cloud computing paradigm, which requires low response latency to handle on-demand user requests. There are two prominent techniques employed for reducing the response latency: keep fully initialized containers alive (Warm Container) or reduce the new container startup (cold start) latency. This paper presents the 3rd container startup mode: Hibernate Container, which starts faster than the cold start container mode and consumes less memory than the Warm Container mode. Hibernate Container is essentially a "deflated" Warm Container. Its application memory is swapped out to disk, the freed memory is reclaimed and file based mmap memory is cleaned-up. The Hibernate Container's deflated memory is inflated in response to user requests. As Hibernate Container's application is fully initialized, its response latency is less than the cold start mode; and as the application memory is deflated, its memory consumption is less than the Warm Container mode. Additionally, when a Hibernate Container is "woken up" to process a request, the Woken-up Container has similar response latency to Warm Container but less memory consumption because not all the deflated memory needs to be inflated. We implemented the Hibernate technique as part of the open source Quark secure container runtime project and our test demonstrated that Hibernate Container consumes about 7\% to 25\% of the Warm Container memory. All of this results in a higher deployment density, lower latency and appreciable improvements in the overall system performance.

Autores: Yulin Sun, Deepak Vij, Fenge Li, Wenjian Guo, Ying Xiong

Última atualização: 2023-05-18 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2305.10963

Fonte PDF: https://arxiv.org/pdf/2305.10963

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes