- Languages supported
-
Fargate: AWS Fargate é um mecanismo de computação sem servidor para contêineres, usado com o Amazon ECS para orquestração. Ele suporta qualquer linguagem de programação ou ambiente de execução que possa ser empacotado em um contêiner Docker. Essa flexibilidade significa que você pode usar praticamente qualquer linguagem, estrutura ou biblioteca que atenda às necessidades do seu aplicativo. Você pode usarPython,Java,Node.js, Go, .NETRuby, PHP ou até mesmo linguagens e ambientes personalizados. O Fargate pode executá-los desde que estejam encapsulados em um contêiner. Esse amplo suporte linguístico torna o Fargate ideal para executar diversos aplicativos. Isso inclui sistemas legados, microsserviços em vários idiomas e aplicativos modernos nativos da nuvem.
Lambda: AWS Lambda oferece suporte nativo para um conjunto mais limitado de linguagens em comparação com o Fargate. As funções do Lambda são criadas especificamente para cargas de trabalho orientadas por eventos. O Lambda oferece suporte oficial às seguintes linguagens e tempos de execução:
-
Node.js
-
Python
-
Java
-
Go
-
Ruby
-
C#
-
PowerShell
O Lambda também oferece suporte a tempos de execução personalizados. Com tempos de execução personalizados, você pode trazer sua própria linguagem ou ambiente de execução. No entanto, isso exige mais configuração e gerenciamento em comparação com o uso de opções com suporte nativo. Se você implantar sua função do Lambda a partir de uma imagem de contêiner, poderá escrever sua função nelaRust. Use uma imagem AWS OS-only base e inclua o cliente Rust de tempo de execução em sua imagem. Se você usar uma linguagem sem um cliente AWS de interface de tempo de execução fornecido, deverá criar a sua própria.
- Event-driven invocation
-
O Lambda é projetado inerentemente para computação orientada a eventos. As funções do Lambda são acionadas em resposta a mudanças nos dados, ações do usuário ou tarefas agendadas. Ele se integra nativamente com muitos. Serviços da AWS Isso inclui o Amazon S3 (por exemplo, invocar uma função quando um arquivo é carregado), o DynamoDB (por exemplo, acionar atualizações de dados) e o API Gateway (por exemplo, lidar com solicitações HTTP). A arquitetura orientada por eventos do Lambda é ideal para aplicativos que precisam responder imediatamente aos eventos. Esses aplicativos não exigem recursos computacionais persistentes.
O Fargate não é nativamente orientado por eventos. No entanto, com alguma lógica padronizada adicional, ele pode se integrar a fontes de eventos, como Amazon SQS e Kinesis. O Lambda lida com a maior parte dessa lógica de integração para você. Com o Fargate, você mesmo deve implementar essa integração usando as APIs desses serviços.
- Runtime/use cases
-
O Fargate foi projetado para executar aplicativos em contêineres. Ele fornece um ambiente de execução flexível onde você pode definir as configurações de CPU, memória e rede para seus contêineres. O Fargate opera em um modelo baseado em contêiner. Ele oferece suporte a processos de longa execução, serviços persistentes e aplicativos com requisitos específicos de tempo de execução. Os contêineres no Fargate podem ser executados indefinidamente porque não há limite rígido no tempo de execução. Isso o torna ideal para aplicativos que precisam ser executados continuamente. Com as políticas de reinicialização de contêineres no Fargate, contêineres individuais em uma tarefa podem ser reiniciados automaticamente sem reiniciar a tarefa inteira. Isso melhora a resiliência para cargas de trabalho de vários contêineres. O Fargate se integra ao CloudWatch Container Insights com observabilidade aprimorada. Com esse recurso, você obtém métricas e rastreamentos detalhados por contêiner para monitorar o desempenho do aplicativo.
As funções do Lambda são otimizadas para tarefas de curta duração e orientadas por eventos. As funções do Lambda têm um tempo máximo de execução de 15 minutos por invocação. Isso torna as funções do Lambda adequadas para cenários como processamento de arquivos, streaming de dados em tempo real e tratamento de solicitações HTTP. Essas tarefas são breves e não exigem processos de longa duração.
Com funções duráveis no Lambda, você pode criar fluxos de trabalho de longa duração que podem manter o estado em várias invocações por até 1 ano. As funções duráveis fornecem tratamento de erros integrado, novas tentativas automáticas e recuperação após falhas. Um SDK de funções duráveis está disponível para JavaScript, TypeScript PythonJava, e C# (.NET). Durante os períodos de espera, sua função é suspensa sem incorrer em cobranças computacionais. Com funções duráveis, você pode lidar com casos de uso que antes exigiam ambientes de computação persistentes.
Ao escolher entre funções duráveis e o Fargate para cargas de trabalho de longa duração, considere o padrão de execução. As funções duráveis são econômicas para fluxos de trabalho que passam a maior parte do tempo esperando, como aprovações humanas, atrasos programados ou retornos de chamada de API externos. Você não incorre em cobranças de computação durante os períodos de espera. O Fargate é mais apropriado para cargas de trabalho que exigem computação contínua, como processamento de dados, conexões de rede persistentes ou serviços que devem permanecer ativos sem interrupção.
No Lambda, o ambiente de execução é mais abstrato. Você tem menos controle sobre a infraestrutura subjacente. Para funções padrão, cada invocação é independente e sem estado. Qualquer estado ou dado que precise persistir entre as invocações deve ser gerenciado externamente. Os exemplos incluem bancos de dados ou serviços de armazenamento.
- Scaling
-
O Fargate escala ajustando o número de tarefas em execução. Isso se baseia no estado desejado definido em seu serviço de orquestração de contêineres (Amazon ECS). A escalabilidade pode ser feita manual ou automaticamente por meio do Amazon EC2 Auto Scaling. Para obter mais informações, consulte Under the hood: Amazon ECS e Fargate aumentam as taxas de lançamento de tarefas no blog AWS Containers.
No Fargate, cada tarefa é executada em seu ambiente isolado. O escalonamento envolve iniciar tarefas adicionais ou interrompê-las com base na carga. O agendador de serviços do Amazon ECS pode iniciar até 500 tarefas em menos de um minuto por serviço. Isso se aplica à web e a outros serviços de longa duração. O Amazon ECS também oferece suporte à escalabilidade preditiva. Ele usa padrões históricos para aumentar proativamente as tarefas antes que ocorram picos de demanda. As políticas de rastreamento de metas para utilização de CPU e memória suportam resolução métrica de 20 segundos. Isso permite uma detecção de sinal de escala mais rápida. O Amazon ECS também pode rebalancear automaticamente as tarefas de serviço em todas as zonas de disponibilidade. Isso mantém a alta disponibilidade. O Fargate se integra ao AWS
Fault Injection Service (FIS). Com o FIS, você pode executar experimentos controlados de injeção de falhas para testar a resiliência do aplicativo.
Para o Lambda, simultaneidade é o número de solicitações em andamento que sua AWS Lambda função está processando ao mesmo tempo. Isso difere da concorrência no Fargate. Cada tarefa do Fargate pode lidar com solicitações simultâneas, desde que haja recursos computacionais e de rede disponíveis. Para cada solicitação simultânea, o Lambda provisiona uma instância separada do seu ambiente de execução. À medida que suas funções recebem mais solicitações, o Lambda dimensiona automaticamente o número de ambientes de execução. Isso continua até você atingir o limite de simultaneidade da sua conta. Por padrão, o Lambda fornece à sua conta um limite total de simultaneidade de 1.000 execuções simultâneas. Esse limite se aplica a todas as funções em um Região da AWS. É possível solicitar um aumento de cota, se necessário.
Com as instâncias gerenciadas do Lambda, o escalonamento funciona de forma diferente. Em vez de provisionar um novo ambiente de execução para cada solicitação simultânea, as instâncias gerenciadas escalam de forma assíncrona com base na utilização dos recursos da CPU. Cada ambiente de execução pode lidar com várias invocações simultâneas. Essa abordagem maximiza a utilização de recursos. Ele é adequado para cargas de trabalho estáveis ou previsíveis.
Para cada função do Lambda usando o tipo de computação padrão, a taxa de escalabilidade de simultaneidade é de 1.000 instâncias de execução a cada 10 segundos. Isso continua até a simultaneidade máxima da conta. Para obter mais informações, consulte As funções do Lambda agora escalam 12 vezes mais rápido ao lidar com solicitações de alto volume no blog AWS Compute. Se o número de solicitações em um período de 10 segundos exceder 1.000, as solicitações adicionais serão limitadas. O gráfico a seguir demonstra como o escalonamento do Lambda funciona assumindo uma simultaneidade de contas de 7000.
- Cold start and cold-start mitigation
-
As funções do Lambda podem sofrer partidas a frio. Isso ocorre quando uma função é invocada após ficar inativa por algum tempo. Durante uma inicialização a frio, o serviço Lambda inicializa um novo ambiente de execução. Isso inclui carregar o tempo de execução, as dependências e o código da função. A duração da inicialização a frio varia de menos de 100 milissegundos a mais de 1 segundo, dependendo do tempo de execução, do tamanho do pacote e da lógica de inicialização. Para tempos de execução com tempos de inicialização mais longos, como Java ou C#, as inicializações a frio podem ser mais longas sem otimização. As partidas a frio podem afetar o desempenho de aplicativos que exigem respostas de baixa latência.
Para mitigar as partidas a frio no Lambda, considere as seguintes estratégias:
-
Minimize o tamanho da função: reduza o tamanho do seu pacote de funções e suas dependências. Isso pode diminuir o tempo necessário para a inicialização.
-
Aumente a alocação de memória: maiores alocações de memória aumentam a capacidade da CPU. Isso pode reduzir o tempo de inicialização.
-
Mantenha as funções aquecidas: invoque periodicamente suas funções do Lambda (por exemplo, usando CloudWatch Eventos). Isso os mantém ativos e reduz a probabilidade de arranques a frio.
-
Lambda SnapStart: use as funções Lambda SnapStart for JavaPython, e .NET para reduzir o tempo de inicialização. SnapStart tira um instantâneo do ambiente de execução inicializado. As invocações subsequentes são retomadas a partir do snapshot em vez de realizar uma inicialização a frio completa.
-
Concorrência provisionada: esse recurso mantém um número específico de instâncias de função aquecidas e prontas para atender às solicitações. Isso reduz a latência da partida a frio. No entanto, isso aumenta os custos. Você paga pelas instâncias provisionadas mesmo que elas não estejam lidando ativamente com as solicitações.
-
Instâncias gerenciadas pelo Lambda: execute funções em uma ampla variedade de tipos de instâncias do EC2. Isso inclui processadores Graviton4 e opções de rede de alta largura de banda. Pre-provisioned os ambientes de execução eliminam as partidas a frio. O Lambda lida com o ciclo de vida da instância, a aplicação de patches no sistema operacional e em tempo de execução, o roteamento, o balanceamento de carga e o escalonamento automático. As instâncias gerenciadas do Lambda também oferecem suporte a várias invocações simultâneas por ambiente de execução. Eles oferecem vantagens de preço do EC2, como planos de economia de computação e instâncias reservadas.
O Fargate geralmente não é afetado por partidas a frio da mesma forma que o Lambda. O tempo para iniciar uma tarefa do Fargate está diretamente relacionado ao tempo necessário para extrair as imagens do contêiner definidas na tarefa do registro de imagens. O Fargate também suporta o carregamento lento de imagens de contêiner que foram indexadas com o Seekable OCI (SOCI). O carregamento lento de imagens de contêiner com o SOCI reduz o tempo para iniciar tarefas do Amazon ECS no Fargate. O Fargate usa o manifesto do índice SOCI v2. Isso fornece desempenho aprimorado para carregamento lento. Depois que uma tarefa é iniciada no Fargate, é um processo de longa duração. Ele está sempre pronto para atender às solicitações. Se você precisar iniciar novas tarefas em resposta a eventos de escalabilidade, pode haver algum atraso durante a inicialização. Isso normalmente é menos significativo em comparação com as partidas a frio do Lambda.
- Memory and CPU options
-
O Fargate fornece controle granular sobre os recursos de memória e CPU para seus aplicativos em contêineres. Ao iniciar uma tarefa no Fargate, você pode especificar os requisitos exatos de CPU e memória para seu aplicativo. As alocações de CPU e memória são independentes. Você pode escolher as combinações que melhor se adequam à sua carga de trabalho. Você pode selecionar valores de CPU que variam de 0,25 vCPUs a 32 vCPUs. A memória varia de 0,5 GB a 244 GB por tarefa, dependendo da sua configuração.
Essa flexibilidade é ideal para aplicativos com características de desempenho específicas. Os exemplos incluem bancos de dados com uso intenso de memória ou tarefas de CPU-bound computação. O Fargate permite que você otimize sua alocação de recursos. Você pode equilibrar custo e desempenho de forma eficaz.
No Lambda, a memória e a CPU estão vinculadas. A CPU é alocada automaticamente em proporção à quantidade de memória selecionada. Você pode escolher alocações de memória entre 128 MB e 10 GB, em incrementos de 1 MB. A CPU se adapta à memória, até 6 vCPUs. Configurações de memória mais altas resultam em mais potência da CPU. No entanto, você não tem controle direto sobre a alocação de CPU em si.
Este modelo foi projetado para ser simples. Você pode ajustar rapidamente as configurações de memória sem gerenciar as configurações da CPU. No entanto, pode ser menos flexível para cargas de trabalho que exigem um equilíbrio específico entre recursos de CPU e memória. O modelo Lambda é adequado para tarefas em que você deseja um dimensionamento direto com base nas necessidades de memória. Pode não ser ideal para aplicativos com demandas de recursos complexas ou altamente específicas.
- Networking
-
Quando você implanta tarefas no Fargate, elas são executadas em um Amazon VPC (Amazon Virtual Private Cloud). Isso lhe dá controle total sobre o ambiente de rede. Você pode configurar grupos de segurança, listas de controle de acesso à rede (ACLs) e tabelas de roteamento. Cada tarefa do Fargate obtém sua própria interface de rede com um endereço IP privado dedicado. Você pode atribuir um endereço IP público, se necessário.
O Fargate oferece suporte a recursos avançados de rede, como balanceamento de carga (usando o AWS Elastic Load Balancing), emparelhamento de VPC e acesso direto a outros dentro da VPC. Serviços da AWS Você também pode usar AWS PrivateLink para obter conectividade segura e privada com o suporte Serviços da AWS. Isso evita navegar na Internet. As tarefas do Fargate também oferecem suporte ao Amazon VPC Lattice. Isso fornece conectividade, segurança e observabilidade padronizadas de serviço a serviço. As tarefas do Fargate podem ser executadas em IPv6-only configurações. Isso permite que as tarefas se comuniquem exclusivamente por IPv6.
Por padrão, as funções do Lambda são executadas em um ambiente de rede gerenciado. Você não tem controle direto sobre interfaces de rede ou endereços IP. No entanto, o Lambda pode ser conectado a uma VPC gerenciada pelo cliente usando o Hyperplane. AWS Isso permite que você controle o acesso aos recursos dentro da sua VPC.
Quando as funções do Lambda são anexadas a uma VPC gerenciada pelo cliente, elas herdam os grupos de segurança da VPC e as configurações de sub-rede. Isso permite que eles interajam com segurança com outros Serviços da AWS
(como bancos de dados RDS) na mesma VPC. Como o Lambda se expande criando muitos ambientes de execução simultânea, cada um mantém sua própria conexão com o banco de dados. A alta simultaneidade pode esgotar os limites de conexão do banco de dados. Para acesso ao banco de dados relacional, use o Amazon RDS Proxy para agrupar e gerenciar conexões. Isso evita o esgotamento da conexão durante alta simultaneidade.
O serviço Lambda usa uma plataforma de virtualização de funções de rede para fornecer recursos de NAT. Isso conecta o Lambda VPC às VPCs do cliente. Ele configura as interfaces de rede elástica (ENIs) necessárias quando as funções do Lambda são criadas ou atualizadas. Ele também permite que os ENIs de sua conta sejam compartilhados em vários ambientes de execução. Isso permite que o Lambda faça uso mais eficiente dos recursos de rede quando as funções são escaladas.
Os ENIs são um recurso esgotável com um limite flexível de 250 por região. Monitore o uso da interface de rede elástica se você configurar funções do Lambda para acesso à VPC. As funções do Lambda no mesmo AZ e no mesmo grupo de segurança podem compartilhar ENIs. Se você aumentar os limites de simultaneidade no Lambda, avalie se você precisa aumentar a interface de rede elástica. Se o limite for atingido, as invocações das funções do VPC-enabled Lambda serão limitadas.
- Pricing model
-
Os preços do Fargate são baseados nos recursos alocados aos seus contêineres. Especificamente, isso significa a vCPU e a memória que você seleciona para cada tarefa. Você é cobrado por segundo, com uma cobrança mínima de um minuto. Os custos estão diretamente vinculados aos recursos que seu aplicativo consome. Você paga pelo que provisiona, independentemente de o aplicativo estar processando solicitações ativamente. O Fargate é adequado para cargas de trabalho previsíveis nas quais você precisa de configurações específicas de recursos. Você pode otimizar os custos ajustando os recursos alocados. O Fargate Spot está disponível para cargas de trabalho x86 e ARM-based Linux. Isso proporciona uma economia significativa de custos para aplicações tolerantes a falhas. Pode haver cobranças adicionais por serviços relacionados. Isso inclui transferência de dados, armazenamento e rede (por exemplo, VPC, Elastic Load Balancing).
O Lambda tem uma estrutura de preços diferente, orientada por eventos e paga por execução. Você é cobrado com base no número de solicitações e na duração da execução. A duração é medida em milissegundos. O Lambda também leva em consideração a quantidade de memória que você aloca para sua função. Os custos escalam com base na memória usada e no tempo de execução. O modelo de preços inclui um nível gratuito. Ele oferece 1 milhão de solicitações gratuitas e 400.000 GB-seconds de tempo de computação por mês. Isso torna o Lambda particularmente econômico para cargas de trabalho esporádicas e de baixo volume.
O modelo de preços do Lambda é ideal para aplicativos com padrões de tráfego imprevisíveis ou intermitentes. Você paga apenas pelas invocações reais da função e pelo tempo de execução. Você não precisa provisionar ou pagar pela capacidade ociosa.
Com as instâncias gerenciadas do Lambda, o Lambda oferece preços baseados em instâncias que usam modelos de preços do EC2. Isso inclui On-Demand instâncias reservadas e planos de economia de computação. Isso pode impulsionar a eficiência de custos para cargas de trabalho estáveis ou previsíveis.
Tanto o Fargate quanto o Lambda são elegíveis para planos de economia de computação. Eles podem reduzir os custos em até 66% em troca de um compromisso com uma quantidade consistente de uso da computação. Isso é medido em dólares por hora por um período de 1 ou 3 anos.
Quando você compara os custos entre os dois serviços, normalmente paga menos com o Lambda em volumes de tráfego menores. No entanto, o faturamento de recursos por segundo do Fargate tende a ser mais econômico para cargas de trabalho sustentadas e de alto rendimento. À medida que o volume de solicitações aumenta, os custos do Lambda aumentam linearmente. Em contraste, os custos do Fargate permanecem relativamente estáveis, independentemente das solicitações tratadas nos recursos provisionados.