You are on page 1of 31

Graduação em Sistemas de Informação

Centro de Informática
Universidade Federal de Pernambuco

Em direção a uma ferramenta para gerar


relatórios de métricas de desempenho de
funções serverless a da partir realização de
testes de carga configuráveis
Trabalho de Conclusão de Curso

Eduardo Santos de Moura

Orientado por: Vinicius Cardoso Garcia


Roteiro

❏ Contexto e Motivação
❏ Método de Trabalho
❏ Análise do Estado da Arte
❏ Apresentação da Ferramenta
❏ Experimentos com a Ferramenta
❏ Resultados e Discussões
❏ Conclusão e Trabalhos Futuros
A Internet

WWW
Crescimento dos sistemas

Número de usuários Concorrência entre sistemas

Número de Complexidade dos sistemas


funcionalidades
Sistemas distribuídos

Serviço A

Monolito Serviço B

Serviço C
Cloud Computing -> Function as a Service
Objetivo

Entender e assim aprimorar o processo de benchmarking em funções serverless pelo


ponto de vista de engenheiros de software, em ambientes possivelmente
multi-cloud.
Questão 1

Quais métricas e parâmetros são os mais relevantes para a realização e comparação


de resultados do benchmarking em funções serverless?

➔ Número de utilizações e menções na literatura consultada


Questão 2

Existem ferramentas de comparação entre funções serverless implantadas em


provedores cloud distintos?

➔ Número de ferramentas
Analise do estado da arte

2014 2016
Parâmetros mais utilizados

Número de requisições Número de requisições simultâneas

Quantidade 7/7 2/7


Métricas mais utilizadas

Latência na resposta da requisição Sucesso na requisição

Quantidade 7/7 7/7

➔ Média de requisições por segundo


➔ Latência média das requisições
➔ Taxa de sucesso
➔ P95
➔ P99
Visualização de resultados de testes

Possui Não possui

Quantidade 2/7 5/7


Capacidade de testes Multi-Cloud

Possui Não possui

Quantidade 7/7 0/7


Load Donkey
load-donkey-cli

Instalação

$ bash install-cli

Uso

$ load-donkey /path/to/specfile
SpecFile
testEngine: ab
functions:
- address: http://host-aws.com
provider: aws
- address: http://host-gcp.com
provider: gcp
- address: http://host-azure.com
provider: azure
request:
method: POST
contentType: application/json
headers:
- key: Authorization
value: 123
queryParameters:
- key: pageSize
value: 25
bodyFile: /path/to/file/containing/body
parameters:
requestCount: 10000
concurrencyCount: 100
Report

➔ Total Time (in seconds)


➔ Success Count
➔ Fail Count
➔ Requests Per Second
➔ Mean Time Per Request (in milliseconds)
➔ P95 (in milliseconds)
➔ P99 (in milliseconds)
➔ Longest Request (in milliseconds)
load-donkey-core
TestEngine
Disponibilização da ferramenta
Experimentos

➔ AWS, GCP e Azure

➔ NodeJS 12

➔ Região do Norte da Virgínia

➔ 256mb de RAM
E1: Processamento de Imagem
E1: Processamento de Imagem

Número de requisições Número de requisições Tamanho da imagem


concorrentes

10 1 90kb

100 10 90kb

1000 100 90kb

10 1 180kb

100 10 180kb

1000 100 180kb


E2: Variação no tamanho do payload

'use strict';

exports.handler = async (event) => {


const responsePayloadSize = event.queryStringParameters.responsePayloadSize;
const payload = getPayload(responsePayloadSize);
return {
statusCode: 200,
body: JSON.stringify({
message: `Payload[${responsePayloadSize}] ${payload}`,
}),
};
};

function getPayload(size) {
switch (size) {
case '32':
return '<32kb_string>';
case '64':
return '<64kb_string>';
case '128':
return '<128kb_string>';
case '256':
return '<256kb_string>';
}
}
E2: Variação no tamanho do payload
Número de requisições Número de requisições Tamanho do payload de
concorrentes resposta

10 1 32

100 10 32

1000 100 32

10 1 64

100 10 64

1000 100 64

10 1 128

100 10 128

1000 100 128

10 1 256

100 10 256

1000 100 256


E1: Resultados

➔ Correlação entre o tamanho da imagem enviada e o tempo médio por requisição em configurações
mais pesadas (1000 requisições com 100 concorrentes);

➔ Funções implantadas na AWS e GCP possuem uma performance equiparável;

➔ Função implantada na Azure apresentou tempos médios por requisição consideravelmente maiores,
assim como suas taxas de falha.
E2: Resultados

➔ Funções conseguiram lidar muito melhor com número de requisições mais elevados, tendo latências
médias por requisição consideravelmente inferiores comparados com o E1;

➔ A função implantada na GCP foi a que apresentou a maior estabilidade às variações das
configurações;

➔ Mais uma vez a da Azure foi a que apresentou a pior performance.


Concluindo

➔ Trabalho atinge satisfatoriamente seu propósito;

➔ Elucida das questões fundamentais que nortearam o trabalho;

➔ Foi desenvolvida uma ferramenta capaz de realizar o benchmarking de funções serverless;

➔ Com os experimentos realizados, foi perceptível a viabilidade no uso da ferramenta.


Trabalhos futuros

➔ Aprimoramento visual do report;

➔ Criação de outros módulos na camada de interface de usuário;

➔ Implementação de interfaces com outros motores de teste de carga;

➔ Implementação de mecanismo de coleta de logs dos próprios provedores cloud;

➔ Fazer com que a própria ferramenta aponte qual das funções sob teste teve o melhor desempenho.
Obrigado!