Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientadora
Prof.a Dr.a Aletéia Patrícia Favacho de Araújo Von Paumgartten
Coorientador
MSc Leonardo Rebouças de Carvalho
Brasília
2022
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Dedico este trabalho em especial à minha amada família, minha mãe Valentina Pires
Cordeiro Rosa, minha tia Gláucia Pires Cordeiro Rosa, minha avó Zuleica Cordeiro Cav-
alcante e a minha irmã Briany Cordeiro, que possuem papel fundamental em minha vida.
Elas sempre me deram amor, carinho, cuidado e proporcionaram o ambiente necessário
para me tornar a pessoa que sou hoje. Dedico também este trabalho à minha namorada
Bruna Mendonça de Morais que esteve ao meu lado dando todo apoio necessário.
iii
Agradecimentos
Agradeço à Prof.a Dr.a Aletéia Patrícia Favacho de Araújo Von Paumgartten por ter me
orientado durante a longa jornada do Trabalho de Conclusão de Curso, tive a oportu-
nidade de conhecer mais sobre a extensa área de computação em nuvem além de conhecer
essa pessoa dedicada, paciente e que desempenha um incrível e relevante trabalho em
sua área de atuação. Agradeço também ao Leonardo Rebouças de Carvalho pelo tempo
dedicado me auxiliando no desenvolvimento do ambiente de testes e também na análise
dos resultados obtidos. Agradeço aos meus companheiros de curso João Pedro Assis dos
Santos, Pedro Augusto Ramalho Duarte e Estevan Alexander de Paula que participaram
ativamente de toda essa etapa da minha vida. Por fim, agradeço a todo o corpo do-
cente da Universidade de Brasília que me auxiliou durante a graduação, em especial o
Departamento de Ciências da Computação.
O presente trabalho foi realizado com apoio da Coordenação de Aperfeiçoamento de
Pessoal de Nível Superior - Brasil (CAPES), por meio do Acesso ao Portal de Periódicos.
iv
Resumo
Função como Serviço (FaaS) e Infraestrutura como Serviço (IaaS) são tipos de serviço
com grande relevância no paradigma de computação em nuvem. Ao considerar crescente
demanda pelos serviços citados, o presente trabalho realiza uma análise de custo-benefício
para auxiliar usuários na tomada de decisão acerca de qual serviço melhor se enquadraria
em seus projetos. A análise envolve um caso de trade-off no qual torna-se necessário
avaliar o contexto da aplicação uma vez que desempenho e custo monetário são inver-
samente proporcionais nessa situação. Os resultados iniciais mostraram que o tipo de
serviço IaaS não suportou todos cenários de teste, enquanto o FaaS apresentou melhor
performance em troca de maior custo monetário.
v
Abstract
Function as a Service (FaaS) and Infrastructure as a Service (IaaS) are types of services
with great relevance in the cloud computing paradigm. Considering the growing demand,
the present work performs a cost-benefit analysis to assist users in making decisions about
which service would best fit their projects. The analysis involves a trade-off case in which
it is necessary to evaluate the application context since performance and monetary cost
are inversely proportional in this situation. The initial results showed that the IaaS service
type did not support all test scenarios, while the FaaS presented better performance in
exchange for higher monetary cost.
vi
Sumário
1 Introdução 1
2 Computação em Nuvem 3
2.1 Definição de computação em nuvem . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Módelo de Implantação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Provedores de Nuvem Pública . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.1 Amazon Web Services (AWS) . . . . . . . . . . . . . . . . . . . . . . . 6
2.3.2 Google Cloud Platform (GCP) . . . . . . . . . . . . . . . . . . . . . . 7
2.3.3 Microsoft Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Modelos de Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1 Infraestrutura como um Serviço . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 Plataforma como um Serviço . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.3 Software como um Serviço . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.4 Tudo como um Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Função como um Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.1 AWS Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.2 Azure Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.3 Cloud Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Custo Monetário do FaaS e IaaS . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.1 Custo dos Serviços no Provedor AWS . . . . . . . . . . . . . . . . . . . 16
2.6.2 Custo dos Serviços na GCP . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6.3 Custo dos Serviços na Azure . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Benchmark 24
3.1 FaaSdom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Função Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2 Função Factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Função Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
vii
3.1.4 Função Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Ferramenta de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 Ambiente de Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.1 Serviço FaaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.2 Serviço IaaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Resultados 35
4.1 Análise do Desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.1 Análise de Casos Específicos de Tempo Médio de Resposta . . . . . . . 39
4.2 Análise da Taxa de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.1 Casos Específicos com Alto Indíce de Erro . . . . . . . . . . . . . . . . 45
4.3 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5 Conclusão 48
Referências 50
viii
Lista de Figuras
ix
Lista de Códigos
x
Lista de Tabelas
xi
Lista de Abreviaturas e Siglas
CD Continuous Delivery .
xii
Capítulo 1
Introdução
1
racional, a quantidade de memória RAM, o poder computacional e outras configurações
adicionais. O modelo IaaS facilita o acesso à infraestrutura e recursos computacionais.
Porém, percebe-se que toda a configuração de ambiente necessária para a utilização da
infraestrutura fica a cargo do cliente. Além disso, nota-se que em caso de necessidade de
mais recurso computacional, o cliente é responsável por decidir explicitamente por uma
resolução para o problema de falta de recursos. Por outro lado, o serviço do tipo Função
como Serviço (FaaS) permite a execução de códigos sem necessidade de configurações adi-
cionais por parte do cliente, ou seja, é só acessar e utilizar. O serviço também se propõe a
ser altamente escalável e elástico, permitindo que o cliente aumente a utilização do serviço
sem necessitar de medidas ou configurações adicionais.
Todavia, ao observar a descrição de ambos os serviços, fica evidente a facilidade pro-
porcionada pelo tipo de processamento do tipo função como serviço em comparação ao
serviço do tipo infraestrutura como serviço. Porém, observa-se que existe um valor mo-
netário envolvido na facilidade adicional proporcionada pelo FaaS. Diante do exposto,
este trabalho tem como objetivo analisar, por meio de testes em ambientes reais, o custo-
benefício dos serviços FaaS e IaaS, com a proposta de evidenciar o poder computacional
disponibilizado e qual o custo monetário dessa disponibilização nos casos testados. A
ideia é proporcionar ao usuário insumos para auxiliar na decisão de qual serviço contratar
para contextos semelhantes. O benchmark escolhido foi o FaasDom [11], que proporciona
quatro diferentes funções que possibilitam estressar ambos ambientes, provendo insumos
para a análise de custo-benefício.
Para isto, este trabalho está estruturado, além deste capítulo, em mais 5 capítulos.
O Capítulo 2 apresenta as definições de computação em nuvem e as suas características.
Ainda no Capítulo 2 são apresentados os principais serviços e provedores de computação
em nuvem. O Capítulo 3 apresenta o benchmark Faasdom [11] que foi usado na avaliação
dos serviços IaaS e FaaS neste trabalho. Também apresenta as funções utilizadas, assim
como exemplifica seus códigos e apresenta como foram implementados os ambientes de
testes de forma a aproximá-los ao máximo, proporcionando condições semelhantes para
obtenção de resultados mais justos. O Capítulo 4 apresenta os experimentos realizados
para avaliar o custo-benefício dos dois serviços em análise. Por fim, o Capítulo 5 apresenta
as conclusões finais a partir dos resultados obtidos, evidenciando também os passos futuros
para continuidade de avaliações mais aprofundadas desses serviços.
2
Capítulo 2
Computação em Nuvem
3
• Mensuração do serviço: cada nuvem pode oferecer diferentes níveis de abstração,
mas são disponibilizadas métricas sobre os recursos utilizados como horas de CPU,
largura de banda, armazenamento e outros.
• Nuvem pública: é a mais popular fornecida pelo provedores para utilização do pú-
blico em geral. No caso das nuvens públicas o software e o hardware são gerenciados
pela empresa provedora, sendo que fica a cargo do usuário apenas a utilização e o
pagamento pelo serviço demandado. A infraestrutura utilizada é compartilhada por
diversos clientes;
• Nuvem privada: oferece os mesmos benefícios que a nuvem pública com a dife-
rença de ter a infraestrutura exclusiva para utilização da empresa proprietária. A
infraestrutura pode ser construída de forma própria pela empresa no formato de da-
tacenters, ou até mesmo contratado a partir de uma empresa provedora. Esse tipo
de nuvem é importante, principalmente, para empresas que trabalham com dados
críticos, uma vez que necessitam de maior segurança e controle sob seus dados;
• Nuvem híbrida: possibilita a integração entre qualquer tipo de nuvem citado an-
teriormente. Esse modelo é ideal para empresas que possuem uma infraestrutura
estabelecida, mas precisam expandir o seu poder computacional nas partes menos
críticas dos sistemas.
4
2.3 Provedores de Nuvem Pública
Com a crescente demanda de infraestrutura especializada e serviços de nuvem computa-
cional, algumas empresas se tornaram referência no mercado. Gartner é uma empresa
de consultoria que produz diversos relatórios e o Quadrante Mágico do Gartner [1] reune
os principais provedores de computação em nuvem, conforme apresentado na Figura 2.1.
Nessa figura é possível perceber sete grandes empresas: Amazon Web Service [16], Azure
Microsoft [17], Google Cloud Platform [18], Tencent Cloud [19], IBM [20], Oracle [21] e
Alibaba Cloud [22]. Dentre as sete empresas levantadas pela empresa Gartner, a AWS, a
Azure e a GCP lideram o mercado. Por isso, elas serão detalhadas nas próximas seções
deste trabalho.
5
2.3.1 Amazon Web Services (AWS)
A Amazon possui sua história iniciada em 1994 como uma empresa vendedora de livros,
além de uma das maiores lojas online do mundo. Contudo, por volta dos anos 2000 a
Amazon identificou a crescente demanda de infraestrutura computacional, percebendo
uma oportunidade de ampliar sua carta de serviços e atuar no mercado de computação
em nuvem. Após seis anos de muita pesquisa e avanços tecnológicos, em 2006, surgiu a
Amazon Web Service (AWS) [24].
Entre os setores que a AWS atua tem-se: publicidade e marketing, tecnologia e jogos,
serviços financeiros e mídia, e entretenimento. A AWS atua com soluções em análises e
data lakes, machine learning, armazenamento, computação sem servidor e outros. Atual-
mente, a Amazon Web Service disponibiliza mais de 200 produtos [25], entre esses:
• Amazon Elastic Compute Cloud (Amazon EC2) [26]: permite alocação de máquinas
virtuais, disponibilizando infraestrutura remota para utilização instantânea;
• AWS Lambda [27]: serviço orientado a eventos que permite a execução de códigos
sob demanda sem a necessidade de preocupação com servidores;
6
Figura 2.2: Mapa da infraestrutura da AWS [2].
• Cloud Functions [33]: serviço orientado a eventos que permite a execução de códigos
sob demanda;
7
Figura 2.3 apresenta as regiões que possuem pelo menos 3 zonas de disponibilidade, assim
como as regiões que estão sendo implantadas com a mesma quantidade de zonas.
• Azure Functions [41]: serviço orientado a eventos que permite a execução de códigos
sob demanda;
• Facial recognition (Face API) [43]: serviço de IA (Inteligência Artificial) para análise
de rostos em imagens;
8
• Queue Storage [44]: enfileiramento para serviços de nuvem com grande volume;
• Azure Backup [45]: solução centralizada de backups para, por exemplo, evitar ata-
ques de ransomware [46], que é um tipo de malware utilizado para infectar sistema,
criptografando os dados do sistema afetado.
A rede global da Microsoft (WAN) é uma parte central do fornecimento de uma ex-
periência em nuvem. Ela conecta os datacenters da Microsoft em 61 regiões do Azure e
grande malha de nós de borda. Eles são posicionados estrategicamente em todo o mundo,
oferecendo assim a disponibilidade, a capacidade e a flexibilidade para atender a qualquer
demanda [4].
9
virtualização e sistema operacional ficam encapsulados e são oferecidos como serviço. Isso
reduz a carga de trabalho em relação à gestão da infraestrutura, como por exemplo, a
criação de diferentes máquinas virtuais pelo serviço Compute Engine [34]. Na Plataforma
como um Serviço (PaaS) o desenvolvedor preocupa-se apenas com os dados e as apli-
cações, tendo como exemplo a plataforma Heroku [47]. No Software como um Serviço
(SaaS) tem-se o usuário apenas utilizando a aplicação de forma final, como exemplo é
possível citar o Dropbox [48]. Nas próximas seções serão detalhados os principais tipos
de serviços em nuvem.
10
2.4.1 Infraestrutura como um Serviço
Na TI Tradicional a solução é completamente implementada pela equipe que está desen-
volvendo determinado sistema. Isso inclui a criação da infraestutura, da rede, do sistema
operacional, da aplicação, do armazenamento de dados, do tratamento de dados e das
aplicações propriamente ditas. Em outras palavras, a empresa não terceiriza a proprie-
dade sobre o sistema, pode terceirizar a mão de obra para desenvolver, mas possui total
propriedade sobre a infraestrutura e a solução [49].
As empresas que possuiam grande infraestrutura especializada, mas não utilizavam
todo o recurso disponível começaram a fazer o que é conhecido como colocation [50]. Isso
significa que essas empresas disponibilizaram seus datacenters para empresas menos robus-
tas, alugando a infraestrutura e disponibilizando o espaço para outras empresas alocarem
seus hardwares. As empresas de telefonia foram umas das precursoras desse modelo. O
colocation evoluiu para o hosting, tendo o local de armazenamento e a infraestrutura ne-
cessária, as empresas começaram a alugar servidores físicos. Isso permitiu disponibilizar
servidores sob contrato de acordo com a demanda da contratante.
A Infrastructure as a Service (IaaS) veio para evoluir o hosting, adicionando a vir-
tualização do modelo. Assim, foi adicionada uma camada de virtualização, tornando
uma solução em nuvem em que o cliente pode facilmente alugar uma infraestrutura re-
motamente de acordo com a sua demanda [51]. Normalmente, o modelo de serviço IaaS
apresenta-se no formato de máquinas virtuais, na qual o cliente contrata/aluga de acordo
com suas necessidades o hardware que configurará e utilizará. Dessa meneira, fica sob a
responsabilidade da contratante toda parte de escolha de sistemas operacionais, banco de
dados, desenvolvimento da aplicação e o tratamento dos dados.
Os produtos de Infrastructure as a Service possibilitam implantação de aplicações
escaláveis ao prover um serviço web, que permite ao cliente alugar máquinas virtuais para
rodar suas próprias aplicações. Alguns exemplos de produtos oferecidos pelos maiores
provedores de serviço de computação em nuvem são:
11
O PaaS possibilita uma camada de abstração na qual o desenvolvedor não necessita
preocupar com a infraestrutura. O serviço proporciona componentes de linguagem de
programação prontos para uso, assim como bibliotecas e ambientes que facilitem o desen-
volvimento de aplicações. Algumas soluções de Plataforma como Serviço são:
• Amazon Elastic Beanstalk [53]: solução da AWS que axilia a criação e a disponibi-
lização de aplicativos, e APIS;
• Azure Cloud Services [54]: solução da Azure que auxilia a criação e a disponibilização
de aplicativos, e APIS.
12
• Network as a Service (NaaS): interliga diversos serviços baseados em nuvem;
13
Apesar dos diversos benefícios apresentados, os serviços serverless possuem limitações
e questionamentos relevantes sobre os padrões adotados e a flexibilidade fornecida. O
artigo [59] apresenta críticas e problemas a serem resolvidos para que o Function as a
Service atinja todo o seu potencial. Dentre os problemas apresentados destaca-se o arma-
zenamento inadequado para operações de baixa granularidade, desempenho inadequado
para standard communication patterns, dificuldade em predizer o tempo de cold start por
depender de três principais variáveis: tempo para iniciar o serviço de função respectivo ao
provedor, inicialização do ambiente das funções (carregamento de bibliotecas) e o overhead
proporcionado pelo próprio código do usuário. Além desses assuntos em aberto, o artigo
também cita desafios que o FaaS deve resolver para potencializar o serviço fornecido, por
exemplo, é possível definir o tempo máximo de execução e a memória RAM utilizada,
porém impossibilita o gerenciamento de outros recursos como CPUs e GPUS. Portanto,
fica evidente que a tecnologia, que possui menos de uma década de existência, vem ama-
durecendo e precisará resolver diversos problemas atuais para atingir todo potencial que
a ideia nos permite almejar.
14
lizar esse tipo de serviço. A Azure Functions possui forte integração com outros serviços
da Microsoft, sendo um de seus principais diferencias. As integrações vão desde linguagem
de programação, possibilitando fácil importação de funções em linguagens da Microsoft
como C# e F#.
Além disso, também é possível perceber uma grande facilidade em integrar com um dos
principais serviços da Microsoft, o pacote Office. Essa integração possibilita atualizações
automáticas nos documentos e planilhas, possibilitando ao usuário em potencializar o
uso dessas ferramentas. Além das linguagens próprias da Microsoft, o Azure Functions
possui suporte para outras linguagens de programação como PowerShell, Python, Java
nas versões 8 e 11, JavaScript (pacotes de Node) e TypeScript.
15
o tempo de utilização, a quantidade de requisições e a utilização de rede para envio de
dados.
O EC2 da AWS, atualmente, dispõe de 557 diferentes tipos de máquinas virtuais com
diferentes capacidades de memória e processamento. O custo das máquinas virtuais são
calculados por demanda, sendo cobrado a hora que o recurso ficou alocado [62]. A AWS
disponibiliza um free tier que permite aos usuários utilizarem máquinas menos robustas
como a t1.micro de forma gratuita por um tempo determinado, a fim de testar o serviço
antes de uma contratação envolvendo custos monetários. As Tabelas 2.1 e 2.2 apresentam
algumas instâncias do serviço EC2 da AWS, assim como o seu custo por hora e por mês.
FaaS
16
da execução e para a quantidade de requisições feitas. Na Tabela 2.3 é possível perceber
a evolução dos valores para as duas arquiteturas a medida que mais memória RAM é
requisitada.
17
Tabela 2.3: Preço por milissegundo até 6 bilhões de GB-segundos/mês.
Memória (MB) Preço por 1 ms do x86 Preço por 1 ms do ARM
128 0,0000000021 USD 0,0000000017 USD
512 0,0000000083 USD 0,0000000067 USD
1.024 0,0000000167 USD 0,0000000133 USD
1536 0,0000000250 USD 0,0000000200 USD
2048 0,0000000333 USD 0,0000000267 USD
3072 0,0000000500 USD 0,0000000400 USD
4096 0,0000000667 USD 0,0000000533 USD
5120 0,0000000833 USD 0,0000000667 USD
6144 0,0000001000 USD 0,0000000800 USD
7168 0,0000001167 USD 0,0000000933 USD
8192 0,0000001333 USD 0,0000001067 USD
9216 0,0000001500 USD 0,0000001200 USD
10.240 0,0000001667 USD 0,0000001333 USD
O Compute Engine possui uma forma de cobrança mais simplificada. O custo do serviço é
baseado no tempo de utilização, sendo que a cobrança é feita por hora utilizada. A GCP
possui um tipo diferente que é o preço preemptivo, que significa uma forma mais barata
de cobrança para utilização preemptiva de GPUs, ou seja, quando a GCP necessitar do
recurso, ela o tornará indisponível sem necessidade de aviso prévio e, por isso, possui um
valor menor [64]. As Tabelas 2.4 e 2.5 apresentam quatro tipos diferentes de instâncias
do serviço Compute Engine padrão E2, tendo seus valores detalhados por hora e por mês.
Tabela 2.4: Preço por hora das máquinas virtuais padrão E2.
Tipo de máquina CPUs virtuais Memória Preço (USD) Preço preemptivo (USD)
e2-standard-2 2 8GB $0.06701 $0.02010
e2-standard-4 4 16GB $0.13402 $0.04021
e2-standard-8 8 32GB $0.26805 $0.08041
e2-standard-16 16 64GB $0.53609 $0.16083
18
Tabela 2.5: Preço por mês das máquinas virtuais padrão E2.
Tipo de máquina CPUs virtuais Memória Preço (USD) Preço preemptivo (USD)
e2-standard-2 2 8GB $48.92 $14.67
e2-standard-4 4 16GB $97.83 $29.35
e2-standard-8 8 32GB $195.68 $58.7
e2-standard-16 16 64GB $391.35 $117.41
FaaS
O Cloud Functions da GCP possui uma complexa forma de precificação de seu serviço,
o valor pode variar de acordo com o tempo de exeucação, quantidade de rede deman-
dada para transação de dados e quantidade de requisições realizadas [65]. Na Tabela 2.6
apresenta-se a evolução dos valores com o aumento da quantidade de memória disponibi-
lizada, enquanto na Tabela 2.7 apresenta o custo por milhão de requisições e, por fim, a
Tabela 2.8 descreve o custo pela utilização da rede para envio de dados. Nas Tabelas 2.9
e 2.10 tem-se um detalhamento de casos de uso com menor e maior demanda, tornando
mais factível o entendimento de qual seria um custo real ao final do mês.
19
Tabela 2.8: Preço por uso de rede.
Tipo Preço/GB
Dados de saída US$ 0,12
Dados de saída por mês 5 GB gratuitos
Dados de entrada Gratuito
Dados de saída para APIs do Google na mesma região Gratuito
O serviço Virtual Machines da Azure também apresenta uma forma de cobrança simples,
baseada on-demand, ou seja, a cobrança é feita por hora utilizada [66]. É possível encon-
trar centenas de tipos diferentes de máquinas virtuais, com valores desde $3.80 ao mês,
até máquinas virtuais com valores superiores a $3,000.00. A Tabela 2.11 detalha quatro
instâncias de máquinas virtuais com diferentes graus de poder computacional, mostrando
a evolução dos valores do serviço.
20
Tabela 2.11: Preço por mês das máquinas virtuais padrão B.
Tipo de máquina CPUs virtuais Memória Preço (USD) / mês
B2s 2 4GB $30.36
B4ms 4 16GB $60.73
B8ms 8 32GB $121.18
B16ms 16 64GB $486.18
FaaS
A Azure Functions possui dois planos básicos de utilização, o plano premium e plano de
consumo. O plano de consumo é baseado no consumo de recursos e tempo de execução,
possuindo um plano de 400.000 GB/s no plano grátis. O plano premium, por sua vez,
tem sua cobrança baseada na duração da utilização dos recursos de memória e processa-
mento [67]. As Tabelas 2.12 e 2.13 detalham a forma de cobrança entre os dois planos
disponibilizados para contratação da Azure Functions.
21
Tabela 2.14: Cálculo de cobrança de consumo de recursos.
Consumo de recurso (segundos)
Execuções 3 milhões de execuções
Duração da execução (segundos) x 1 segundo
Total de consumo de recurso 3 milhões de segundos
Consumo de recurso (GB/s)
Consumo de recurso convertido em GBs 512 MB / 1.024 MB
Tempo de execução (segundos) x 3 milhões de segundos
Total de GB/s 1,5 milhões de GB/s
Consumo de recurso cobrável
Consumo de recurso 1,5 milhões de GB/s
Concessão gratuita mensal - 400.000 GB/s
Consumo cobrável total 1,1 milhões de GB/s
Custo mensal de consumo de recurso
Consumo de recurso cobrável 1,1 milhões de GB/s
Preço do consumo de recurso x $0,000016/GB/s
Custo total $17,60
22
2.7 Considerações Finais
Neste capítulo foram abordados os conceitos de computação em nuvem, assim como os
principais serviços e provedores de nuvem pública. Isso foi necessário para que haja um
amplo entendimento do objeto deste trabalho.
Assim sendo, no próximo capítulo serão apresentadas as funções escolhidas, por meio
do benchmark Faasdom [11], para realização dos testes que serão base para análise do
custo-benefício dos serviços de FaaS abordados neste trabalho.
23
Capítulo 3
Benchmark
3.1 FaaSdom
O FaaSdom [11] é uma arquitetura modular focada em aplicações serverless e foi imple-
mentado como uma prova de conceito de benchmark. O FaaSdom dá suporte aos pro-
vedores: AWS, Azure, GCP e IBM, possibilitando implementação de funções do tipo de
serviço FaaS de forma automática. A interface visual apresentada na Figura 3.1 permite
a implementação automática das funções e a execução automática de testes próprios do
FaaSdom, que proporcionam diversos insights através de uma dashboard no Grafana [68].
Os testes pré-implementados do FaaSdom são: Comparison Tests, Benchmark, Theorical
Pricing e Pricing regarding to tests. Para o teste de carga realizado neste trabalho, com
o intuito de estressar os ambientes de forma mais autônoma, foi utilizada a ferramenta
Apache Jmeter [69] que será melhor descrita na próxima seção.
No artigo FaaSdom [11], os autores utilizam as funções matrix, latency, filesystem e
factors para estressá-las em uma estrutura de FaaS. O objetivo foi obter mais dados sobre
24
o potêncial de performance de ambientes serverless. Para isso, as funções são implemen-
tadas em três diferentes linguagens de programação: Python, Node e Golang e além das
funções implementadas, o FaaSdom dá suporte para criação de funções customizadas para
ampliação dos casos de teste.
25
func Go_latency(w http.ResponseWriter, r *http.Request) {
msg := &Message{
Success: true,
Payload: Payload{
Test: "latency test",
},
}
b, err := json.Marshal(msg)
if err != nil {
log.Fatal(err)
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
fmt.Fprint(w, string(b))
}
26
function factors(num) {
let n_factors = [];
for (let i = 1; i <= Math.floor(Math.sqrt(num)); i += 1)
if (num % i === 0) {
n_factors.push(i);
if (num / i !== i) {
n_factors.push(num / i);
}
}
n_factors.sort(function(a, b){return a - b;});
return n_factors;
}
27
def randomTable(n):
return [[math.floor(random.random()*100) for i in range(n)] for j in range(n)]
def matrix(n):
matrixA = randomTable(n)
matrixB = randomTable(n)
matrixMult = [[0 for i in range(n)] for j in range(n)]
for i in range(0,len(matrixA)):
for j in range(0,len(matrixB)):
sum = 0
for k in range(0,len(matrixA)):
sum += matrixA[i][k] * matrixB[k][j]
matrixMult[i][j] = sum
return matrixMult
28
exports.node_filesystem = (req, res) => {
var instanceId = fs.readFileSync( /proc/self/cgroup , utf-8 );
var cpuinfo = fs.readFileSync( /proc/cpuinfo , utf8 );
var meminfo = fs.readFileSync( /proc/meminfo , utf8 );
var uptime = fs.readFileSync( /proc/uptime , utf-8 );
...
fs.mkdirSync( /tmp/test );
fs.mkdirSync( /tmp/test/ +rnd);
for(let i = 0; i<n; i++) {
fs.writeFileSync( /tmp/test/ +rnd+ / +i+ .txt , text, utf-8 );
}
for(let i = 0; i<n; i++) {
var test = fs.readFileSync( /tmp/test/ +rnd+ / +i+ .txt , utf-8 );
}
let files = fs.readdirSync( /tmp/test/ +rnd);
rimraf.sync( /tmp/test/ +rnd);
res.send(JSON.stringify({
success: files.length == n,
payload: {
"test": "filesystem test",
"n": files.length,
"size": Number(size),
"timewrite": (endWrite-startWrite).toFixed(3),
"timeread": (endRead-startRead).toFixed(3),
"time": ((endWrite-startWrite)+(endRead-startRead)).toFixed(3)
},
metrics: {
machineid: ,
instanceid: instanceId,
cpu: cpuinfo,
mem: meminfo,
uptime: uptime
}
}));
};
Código 4: Versão com trechos omitidos da Função Filesystem implementada em Node [9].
29
3.2 Ferramenta de Teste
O Apache Jmeter [69], ferramenta escolhida para realização dos testes neste trabalho,
consiste em um facilitador de testes de carga. O Jmeter é útil para estressar aplicações
e avaliar sua performance [70]. No contexto da avaliação do custo-benefício de Infras-
tructure as a Service versus Function as a Service, o Jmeter desempenhou a função de
um lançador de requisições, retornando informações relevantes como tempo de execução,
latência, percentual de casos bem sucedidos e outros.
O Jmeter foi escolhido para viabilizar o benchmark do presente trabalho por ser uma
ferramente de testes open source e validada no mercado por meio, também, de referências
em outros trabalhos acadêmicos. Assim sendo, através do Jmeter é possível simular o
comportamendo de uma pessoa interagindo com um sistema, deixando o cenário de teste
mais próximo de uma situação real. A ferramenta possibilita a exportação de arquivos no
formato CSV com todos os dados obtidos, assim como gráficos.
Para avaliar a performance dos ambientes se fez necessário um teste de carga, no qual
foi escolhido o disparo de requisições em Base 2. Assim, foram efetuados diferentes casos
de testes com variadas quantidades de requisições, as quais foram desde 1 requisição até
512 requisições. Dessa forma, foi possível realizar testes de menor carga até testes que, de
fato, estressaram a aplicação. O intervalo experimentado para disparo dessas requisições
foi um ramp-up de 30 segundos, visto que um tempo inferior a esse gera uma sobrecarga
que inviabiliza que as máquinas virtuais escolhidas suportem alguns casos de testes.
30
zona geográfica em cada provedor testado. Dessa maneira, os testes foram disparados e
recebidos o mais próximo possível, geograficamente.
31
Figura 3.3: Deploy da função filesystem no FaaSdom.
32
Figura 3.5: Versão final das funções na GCP.
33
portanto foi necessário utilizar uma máquina com 0,5vCPU, o que já a coloca em uma
situação inicial de desvantagem. As máquinas escolhidas em cada provedor foram as
especificadas na Tabela 3.1.
Diferentemente do deploy das funções do tipo de serviço FaaS que foram facilmente
implementadas pelo FaaSdom, para cada provedor foi necessária a alocação manual das
máquinas virtuais utilizadas nos testes. Após instanciar a máquina de disparo dos testes
foi necessário preparar todo ambiente com a instalação da linguagem Java, para suportar
a utilização do Apache Jmeter, assim como também fazer a instalação do Jmeter. Para
a máquina que hospeda as APIs, foram necessárias as intalações do Docker [78] e do
Docker Compose [79]. Essas ferramentas facilitaram a disponibilização das APIs através
de containers que permitiam deixar as portas expostas dentro da própria máquina virtual,
facilitando dessa forma as chamadas via protocolo HTTP para as portas expostas no
container por meio das APIs.
34
Capítulo 4
Resultados
Código 5: Exemplo de execução do Jmeter através de CLI para gerar tabelas e gráficos a
partir dos resultados.
35
./apache-jmeter-5.4.1/bin/jmeter -n -t input.jmx -Jurl= 20.124.129.42
-Jfilename= filesystem -Jport= 2000 -Jpath= /filesystem -Jreq= 1
-Jname= Azure - filesystem - -Jhttp= http -Jsec= 30 -Jtimeout="33000"
scp -i ~/Downloads/sendgcp
sendgcp@34.86.60.101:~/reports/*.csv
./GCP/Go/FaaS/latency/
36
níveis mais baixos de concorrência aconteceriam em outros cenários também, a fim de
comparação observou-se também curvas de testes com intuitos semelhantes apresentadas
no artigo [80]. O recorte mais detalhado das curvas será estudado adiante neste capítulo.
A partir dos resultados obtidos, optou-se por agrupar os resultados por provedor,
visando avaliar quanto o desempenho pode ser afetado entre os diferentes provedores
testados. Assim sendo, na Figura 4.3 foi possível perceber um padrão semelhante à
Figura 4.2 que mostra o FaaS performando melhor do que o IaaS em tempo de resposta,
quando comparado o resultado agrupado por provedor, ou seja, ao somar o resultado
de todas as funções de cada tipo de serviço. Os resultados apontaram para a Azure
como sendo o melhor provedor para IaaS, enquanto a AWS foi identificada como o melhor
provedor de FaaS. Porém, o resultado apresentado não levou em consideração que a Azure
não conseguiu executar os testes de maior tempo de resposta, tornando o resultado injusto
para os provedores que conseguiram executar essas funções, esse dado foi considerado na
análise de taxa de erros na Seção 4.2.
37
Figura 4.3: Resultado de desempenho agrupado por provedor.
Outro recorte feito foi o agrupamento dos resultados por linguagem de programação
na Figura 4.4. Nessa figura é possível perceber que IaaS na linguagem golang obteve um
resultado expressivamente melhor do que todos os outros, enquanto IaaS em Python teve
um resultado oposto, obtendo o pior desempenho experimentado. O serviço de FaaS em
todas as linguagens obteve um tempo médio de resposta melhor do que os de IaaS para
512 requisições, perdendo somente para IaaS em go. Os gráficos mostram que em todos os
casos anteriores o FaaS começa com certa desvantagem, isso acontece pelo característica
do tipo de serviço que apresenta um maior cold start (tempo de inicialização), agregando
um overhead considerável para os casos iniciais. Todavia, para casos mais robustos,
percebe-se que a escala do serviço supora esse custo computacional inicial.
38
Figura 4.4: Resultado de desempenho agrupado por linguagem de programação.
39
Figura 4.5: Função filesystem. Figura 4.6: Função factors.
Nas Figuras 4.7 e 4.8 o overhead inicial se mostrou novamente muito expressivo, fa-
zendo com que a curva do FaaS ficasse bem diferente do caso anterior. Outro ponto que
chamou a atenção foi o IaaS performando muito melhor nos dois casos de teste de me-
nor complexidade. Como citado anteriormente, os testes foram executados utilizando um
ramp-up de 30 segundos, ou seja, o disparo das requisições não são enviados instantâne-
amente e sim em um intervalo de 30 segundos. O resultado, por ser muito diferente do
esperado, tornou necessário que o teste para o caso de menor demanda computacional
fosse refeito sem o ramp-up para que fosse possível comparar os casos e verificar se o
padrão se mantém.
40
não foi utilizado até o caso de 128 concorrências. Entretanto, para os casos mais extremos
a não utilização do ramp-up se demonstrou mais custosa em tempo médio de resposta e,
para isso, acredita-se que a função escalou de forma mais lenta. Para o caso em que o
ramp-up foi utilizado, a função por ter um tempo de envio das requisições mais espaçado,
notou-se que o FaaS foi capaz de se preparar melhor para os casos de maior carga de
trabalho e demanda computacional.
41
Figura 4.10: Resultado comparativo do uso de ramp-up para a função latency.
42
Figura 4.11: Taxa de erro agrupado por função.
43
Figura 4.12: Taxa de erro agrupado por provedor.
44
Figura 4.13: Taxa de erro agrupado por linguagem de programação.
45
Tabela 4.1: Taxas de erro acima de 50% na AWS.
Python Golang Node
Latency - IaaS 0,00% 0,00% 0,00%
Latency - FaaS 0,04% 0,00% 0,00%
Filesystem - IaaS 0,00% 100% 0,00%
Filesystem - FaaS 0,01% 0,00% 0,00%
Factors - IaaS 100% 0,00% 0,00%
Factors - FaaS 96,83% 0,00% 0,00%
Matrix - IaaS 0,00% 0,00% 0,00%
Matrix - FaaS 0,00% 0,00% 0,00%
46
4.3 Considerações Finais
Neste capítulo foram apresentados os experimentos realizados para avaliar o custo-benefício
da utilização de FaaS e IaaS. Por meio dos resultados obtidos, fez-se uma análise do tempo
médio de resposta e também das taxas de erros. Concluiu-se que para os casos que de-
mandam recursos computacionais que o tipo de serviço IaaS consegue proporcionar, tais
como a função latency, ele garante maior performance considerando os cenários testados.
Entretanto, para funções com maior demanda por recursos computacionais, o IaaS não
conseguiu um desempenho mínimo satisfatório, perdendo para o FaaS nesses casos. O
próximo capítulo tratará das conclusões alcançadas neste trabalho e os passos futuros, de
modo a alcançar resultados mais específicos para os tipos de serviço testados.
47
Capítulo 5
Conclusão
48
funções mais simples, vale a pena escolher máquinas virtuais que atendam a demanda,
porém, caso seja necessário escalar a aplicação, haverá algum trabalho envolvido. No
FaaS, tem-se o trade-off que não será necessário nenhum trabalho para que essa escala
aconteça, porém envolve um maior custo monetário nesse conforto proporcionado.
É importante ressaltar também algumas limitações enfrentadas durante a fase de tes-
tes que pode ter influenciado os dados obtidos de alguma forma. Entre as limitações
observadas destaca-se a pequena amostra de máquinas virtuais utilizadas na experimen-
tação do tipo de serviço IaaS, esse tipo de serviço possui diversos conjuntos de máquinas
virtuais, possibilitando escolher uma ampla combinação de recursos computacionais pré
disponibilizados e permitindo personalização das configurações da VM caso as configu-
rações existentes não satisfaçam a demanda. Os testes foram realizados ao decorrer da
semana em diferentes dias e horários, dessa forma, torna-se mais provável que alguns
testes tenham sido realizados em horário de maior congestionamento, enquanto outros
testes foram feitos em horários com menor demanda da nuvem utilizada. Entre as limi-
tações observadas no presente trabalho também destaca-se a comparação feita entre os
resultados obtidos, toda comparação foi feita com base em valores médios utilizando um
conjunto de dez medições, a quantidade de amostras utilizadas para cada valor médio é
baixa, tornando suscetível que em algum caso tenha valores discrepantes que atrapalhem
a análise dos resultados. Dessa forma, uma sugestão para trabalhos futuros é que outras
avaliações sejam utilizadas para aumentar a robustez da análise, como por exemplo, o uso
de percentil.
Em trabalhos futuros será avaliado de forma mais específica o impacto do ramp-up
na utilização do FaaS e IaaS, pois o ramp-up simula uma situação em que usuários estão
acessando o serviço de forma mais espaçada, enquando o não uso dele representa um ce-
nário de acesso simultâneo. Além disso, é importante simular um ambiente de IaaS ainda
mais próximo que o de FaaS para tornar a comparação justa, isso pode ser feito por meio
da implementação de um ambiente que em que o IaaS proporcione escalabilidade e elas-
ticidade, assim como o FaaS, tornando possível uma comparação e conclusão próxima de
cenários reais de uso de ambos os tipos de serviço. Sugere-se também que sejam avaliados
cenários mais próximos aos dos ambientes de produção em relação ao armazenamento de
arquivos ao testar o desempenho de filesystem utilizando banco de dados serverless, como
por exemplo o DynamoDB [29], object storage e serviços de fila como o SQS [83].
49
Referências
[1] Bala, Raj, Bob Gill, Dennis Smith, Kevin Ji e David Wright: Quadrante Mágico
para infraestrutura em nuvem e serviços de plataforma. Relatório Técnico, Gart-
ner. https://www.gartner.com/technology/media-products/reprints/AWS/
1-271W1OT3-PTB.html, acesso em 2022-02-08. ix, 5
[10] Mell, Peter e Timothy Grance: The NIST Definition of Cloud Computing. página 7.
1, 4, 9, 12
[11] Maissen, Pascal, Pascal Felber, Peter Kropf e Valerio Schiavoni: FaaSdom: A
Benchmark Suite for Serverless Computing. Em Proceedings of the 14th ACM In-
ternational Conference on Distributed and Event-Based Systems, DEBS ’20, pá-
ginas 73–84, New York, NY, USA, 2020. Association for Computing Machin-
50
ery, ISBN 978-1-4503-8028-7. https://doi.org/10.1145/3401025.3401738, event-
place: Montreal, Quebec, Canada. 2, 23, 24, 34, 43, 48
[12] Surbiryala, Jayachander e Chunming Rong: Cloud Computing: History and Overview.
Em 2019 IEEE Cloud Summit, páginas 1–7, 2019. 3
[14] Puthal, Deepak, Bibhudutta PS Sahoo, Sambit Mishra e Satyabrata Swain: Cloud
computing features, issues, and challenges: a big picture. Em 2015 International
Conference on Computational Intelligence and Networks, páginas 116–123. IEEE,
2015. 3
[15] Jin, Hai, Shadi Ibrahim, Tim Bell, Wei Gao, Dachuan Huang e Song Wu: Cloud types
and services. Em Handbook of cloud computing, páginas 335–355. Springer, 2010. 4
[24] Varia, Jinesh, Sajee Mathew e others: Overview of amazon web services. Amazon
Web Services, 105, 2014. 6
51
[28] Amazon S3. https://aws.amazon.com/pt/s3/?nc1=h_ls, acesso em 2022-03-08. 6,
14
[32] Redding, Anna Crowley: Google it: A history of Google. Feiwel & Friends, 2018. 7
[39] Stross, Randall E: The Microsoft way: The real story of how the company outsmarts
its competition. Addison Wesley Longman Publishing Co., Inc., 1996. 8
52
[45] Azure Backup. https://azure.microsoft.com/en-us/services/backup/,
07/08/2022. 9
[49] Mahoney, Michael S.: The History of Computing in the History of Technology. Annals
of the History of Computing, 10(2):113–125, 1988. 11
[50] Islam, Mohammad A., Hasan Mahmud, Shaolei Ren e Xiaorui Wang: Paying to save:
Reducing cost of colocation data center via rewards. Em 2015 IEEE 21st International
Symposium on High Performance Computer Architecture (HPCA), páginas 235–245,
2015. 11
[51] Bhardwaj, Sushil, Leena Jain e Sandeep Jain: Cloud computing: A study of infras-
tructure as a service (IAAS). International Journal of engineering and information
Technology, 2(1):60–63, 2010. 11
[52] Ebert, Nico, Kristin Weber e Stefan Koruna: Integration platform as a service. Busi-
ness & Information Systems Engineering, 59(5):375–379, 2017. Publisher: Springer.
11
[55] Ma, Dan: The business model of" software-as-a-service". Em Ieee international con-
ference on services computing (scc 2007), páginas 701–702. IEEE, 2007. 12
[56] Duan, Yucong, Guohua Fu, Nianjun Zhou, Xiaobing Sun, Nanjangud C Narendra
e Bo Hu: Everything as a service (XaaS) on the cloud: origins, current and future
trends. Em 2015 IEEE 8th International Conference on Cloud Computing, páginas
621–628. IEEE, 2015. 12
53
[58] Bandeira, Waliff, Leonardo Carvalho e Aleteia Araujo: Análise do Custo-benefício de
Funções como Serviço e Infraestrutura como Serviço. Em Anais da IV Escola Regional
de Alto Desempenho do Centro-Oeste, páginas 38–40, Porto Alegre, RS, Brasil, 2021.
SBC. https://sol.sbc.org.br/index.php/eradco/article/view/18423, ISSN:
0000-0000 event-place: Evento Online. 13, 24
[59] Jonas, Eric, Johann Schleier-Smith, Vikram Sreekanti, Chia che Tsai, Anurag Khan-
delwal, Qifan Pu, Vaishaal Shankar, João Carreira, Karl Krauth, Neeraja Jayant
Yadwadkar, Joseph E. Gonzalez, Raluca Ada Popa, Ion Stoica e David A. Patterson:
Cloud Programming Simplified: A Berkeley View on Serverless Computing. CoRR,
abs/1902.03383, 2019. http://arxiv.org/abs/1902.03383, arXiv: 1902.03383. 14
[70] Erinle, Bayo: Performance Testing with JMeter 3. Packt Publishing Ltd, 2017. 30
[73] Soni, Anshu e Virender Ranga: API features individualizing of web services: REST
and SOAP. International Journal of Innovative Technology and Exploring Engineer-
ing, 8(9):664–671, 2019. 33
54
[74] Github: waliffcordeiro/APIs-Faasdoom. https://github.com/waliffcordeiro/
APIs-Faasdoom, acesso em 2022-04-09. 33
[80] Motta, Marcelo, Leonardo Reboucas De Carvalho, Michel Rosa e Aleteia Favacho De
Araujo: Comparison of FaaS Platform Performance in Private Clouds. Em Proceed-
ings of the 12th International Conference on Cloud Computing and Services Science
- CLOSER,, páginas 109–120. SciTePress, 2022, ISBN 978-989-758-570-8. Backup
Publisher: INSTICC ISSN: 2184-5042. 37, 41
55