Slide 1

Slide 1 text

Computação Serverless: Conceitos, Aplicações e Desafios André G. Vieira¹, Gustavo Pantuza¹, Jean H. F. Freire¹, Lucas F. S. Duarte², Racyus D. G. Pacífico¹, Marcos A. M. Vieira¹, Luiz F. M. Vieira¹, José A. M. Nacif² ¹Universidade Federal de Minas Gerais (UFMG) - Belo Horizonte, MG - Brasil ²Universidade Federal de Viçosa (UFV) - Florestal, MG - Brasil

Slide 2

Slide 2 text

O Minicurso ● Introdução ● Histórico ● Potencial ● Computação Serverless ● Plataformas 2 ● Pesquisa ● Limitações do modelo ● Tutorial OpenFass ● Conclusões

Slide 3

Slide 3 text

Introdução ● Definição 3 Retirar do desenvolvedor a responsabilidade de configurar recursos computacionais, deixando apenas a escrita das funções que compõem o artefato desenvolvido [Hendrickson et al. 2016]

Slide 4

Slide 4 text

Introdução ● 67% dos gastos de infraestrutura em tecnologias em nuvem ○ [Castro et al. 2019] ● Pagar apenas pelo que se utiliza ● Escalabilidade ● Precisão de cobrança ● Desacopla a plataforma 4

Slide 5

Slide 5 text

Histórico ● Centros de dados (datacenters) ● Múltiplos clientes/aplicações ● Máquinas virtuais ○ Compartilhamento de recursos ○ Isolamento entre sistemas operacionais 5

Slide 6

Slide 6 text

Histórico ● IaaS (Infrastructure as a service) - Infraestrutura como serviço 6 2006 2010 2012

Slide 7

Slide 7 text

Histórico ● PaaS (platform as a service) - Plataforma como serviço 7 2006 2008

Slide 8

Slide 8 text

Histórico ● Contêineres ○ Isolamento ○ Reprodutibilidade ○ Automação ○ Imagens pequenas 8 2013

Slide 9

Slide 9 text

Histórico ● AWS Lambda ○ primeiro serverless ○ Funções ○ Linguagem ○ Chamada HTTP 9 2014

Slide 10

Slide 10 text

Computação em nuvem moderna ● +10 anos ● Escalabilidade ● Carga operacional ● Complexidade [Jonas et al. 2019] 10

Slide 11

Slide 11 text

Computação em nuvem moderna ● Serverless ○ Abstração ○ Contabilidade ○ Simplicidade 11

Slide 12

Slide 12 text

Computação em nuvem moderna ● Serverless ○ Estima-se 7.72 bilhões de dólares até 2021 ■ [Castro et al. 2019] ○ CNCF - Cloud Native Computing Foundation 12

Slide 13

Slide 13 text

Usos da computação serverless ● Serverless ○ Funções 13 ● Nuvem convencional ○ Funções ○ Plataforma ○ Infraestrutura

Slide 14

Slide 14 text

Usos da computação serverless ● Tarefas Periódicas ● Eventos ● Fila / Mensageria ● Tempo real ● Notificações 14 ● Ferramentas analíticas ● Serviços sob demanda ● Funções paralelas ● Internet das coisas

Slide 15

Slide 15 text

Potenciais computação serverless ● Depuração orientada a custo financeiro ● Decomposição de sistemas legados ● Compartilhamento de ambientes de execução [Hendrickson et al] 15

Slide 16

Slide 16 text

Potenciais computação serverless ● Minimiza curva de aprendizado ● Agilidade em usar serviços em Nuvem ● Reduz custos ● Aumenta granularidade de custo 16

Slide 17

Slide 17 text

Paradigma “Como Serviço” ● PaaS ● IaaS ● SaaS 17 “O paradigma de disponibilização de aplicações denominado ‘como serviço’ tem essa terminologia devido à ocultação de aspectos do usuário ” [Wang et al. 2018]

Slide 18

Slide 18 text

Funções como serviço ● FaaS ○ Functions as a Service ○ Funções como Serviço 18 Ao invés de se provisionar infraestrutura ou a própria plataforma na qual o código é executado, se fornece uma estrutura que irá executar uma unidade de código: Uma Função

Slide 19

Slide 19 text

Funções como serviço ● FaaS ○ Código da função ○ Lista de bibliotecas ○ Como deve escalar ○ Conectividade URI 19

Slide 20

Slide 20 text

Evolução ● Bare-metal: ○ Cada aplicação roda diretamente sob uma máquina física ○ Apenas sistema operacional como intermediário ○ Vantagens apresentadas no desempenho da aplicação; ○ Alto custo e a dificuldade de prover e gerenciar. 20

Slide 21

Slide 21 text

Evolução ● virtualização: ○ Hypervisor: camada extra sobre o sistema operacional ○ Vários sistemas operacionais de maneira isolada ○ Maior flexibilidade ○ Administração mais simples ○ Custos de implantação são reduzidos. 21

Slide 22

Slide 22 text

Evolução ● Contêineres: ○ Sistema de virtualização em nível de sistema operacional ○ Aplicações executadas de forma isoladas em espaço de usuário ○ Funções básicas do sistema operacional são compartilhadas ○ Mais enxuto e eficiente que as máquinas virtuais. 22

Slide 23

Slide 23 text

Evolução 23

Slide 24

Slide 24 text

Comunicação em contêineres ● Série de drivers de redes nativos; ● Escolhidos com base nos requisitos da aplicação; ○ Host ○ Bridge ○ Overlay ○ MACVLAN ○ None 24

Slide 25

Slide 25 text

Modelo Serverless ● Sem servidor mesmo? ● Não dispensa por completo o uso de servidores; ● Retira do desenvolvedor a responsabilidade de configurar o recurso computacional; ● Apenas a escrita das funções que compõem o artefato desenvolvido. 25

Slide 26

Slide 26 text

Modelo Serverless ● Deixa a cargo do provedor de serviço da aplicação a infra-estrutura computacional; ● Desde a disponibilização básica até a escalabilidade ● Nenhum membro da equipe possui acesso a infraestrutura, apenas à aplicação em si. 26

Slide 27

Slide 27 text

Modelo Serverless ● Inerentemente sem estado; ● Sistemas que necessitem de dados persistentes devem acessá-los de outra fonte; ● Armazenamento-como-serviço; ● Tarefas de gerenciamento, manutenção e segurança deslocadas para a plataforma; ● Preço e vendor lock-in. 27

Slide 28

Slide 28 text

Modelo Serverless ● Provedores se utilizam de contêineres; ○ Prover isolamento entre as funções; ○ Modelo rápido de escala. ● Controlados via orquestradores; ○ Docker Swarm; ○ Kubernetes. ● Executados sobre máquinas tradicionais; ● Ocultos do desenvolvedor da aplicação; ● Não há servidores visíveis para o usuário final. 28

Slide 29

Slide 29 text

Modelo Serverless ● Responsabilidades da plataforma: ○ Fornecer uma localidade onde o serviço é disponibilizado (URL) ○ Escalabilidade do serviço ○ Maneiras de se inserir, modificar e monitorar o uso da função ○ Segurança básica(DDOoS, virus) ● Responsabilidades do desenvolvedor: ○ Atenção ao ecossistema ○ Conhecimento da plataforma utilizada ○ Segurança: informações expostas, níveis de acesso e configuração de permissões. 29

Slide 30

Slide 30 text

Modelo Serverless ● Precificação: ○ Funções cobradas por invocação; ○ Sem custos por recursos não utilizados ou ociosos. ● Segurança: ○ Desenvolvedor ainda possui responsabilidades; ○ Modifica como deve ser realizado ou mesmo insere novos desafios. 30

Slide 31

Slide 31 text

Serverful ● Abordagem tradicional dos sistemas em nuvem. ● Desenvolvedor aluga a infraestrutura ● Configuração dos pacotes e serviços necessários à aplicação ● Acesso direto a máquina virtual ou contêiner ● Pagamento realizado por slots de tempo 31

Slide 32

Slide 32 text

Serverful x Serverless 32 Escalabilidade Serverful É necessário subir novas máquinas e/ou contêineres caso a demanda aumente. Em caso de baixa demanda, recursos são desperdiçados. Serverless Escala automaticamente, não é necessário nenhuma ação por parte do desenvolvedor da aplicação

Slide 33

Slide 33 text

Serverful x Serverless 33 Manutenção Serverful Requer manutenção, é preciso instalar, monitorar e manter atualizados os softwares necessários a aplicação Serverless A manutenção fica a cargo do provedor do serviço. O desenvolvedor apenas escreve e implanta código usando as ferramentas fornecidas

Slide 34

Slide 34 text

Serverful x Serverless 34 Custo Serverful pago por tempo para manter o servidor disponível mesmo que não esteja sendo usado. Serverless É pago por invocação, caso não ocorra o uso não existe cobrança.

Slide 35

Slide 35 text

Serverful x Serverless 35 Implantação Serverful Permite implantar serviços diretamente. É necessário logar na máquina e rodar o serviço e suas dependências. Serverless Baseado em eventos, o desenvolvedor implanta uma função e ela é executada como resposta a um evento que ocorre no sistema.

Slide 36

Slide 36 text

Plataformas 36

Slide 37

Slide 37 text

Plataformas 37

Slide 38

Slide 38 text

AWS Lambda ● Lançado em 2014 ● Altamente integrada a outros serviços AWS ● Firecracker ● linguagens suportadas ○ Java ○ GO ○ PowerShell ○ JavaScript ○ C# ○ Python ○ Ruby 38

Slide 39

Slide 39 text

Azure Functions ● Lançado em 2016 ● Altamente integrada a outros serviços Azure ● Durable Functions ● linguagens suportadas ○ C# ○ JavaScript ○ F# ○ Java ○ PowerShell ○ Python ○ TypeScript 39

Slide 40

Slide 40 text

Cloud Functions ● Lançado em 2016 ● Altamente integrada a outros serviços Google ● linguagens suportadas ○ JavaScript ○ Go ○ Python 40

Slide 41

Slide 41 text

OpenFaaS ● Plataforma de código aberto (licença MIT); ● Funções são executadas em contêineres individuais; ● Escalabilidade baseada no número de requisições; ● Suporta várias linguagens de programação; ● Possui uma interface gráfica amigável; ● É um framework portátil. 41

Slide 42

Slide 42 text

Arquitetura OpenFaaS 42

Slide 43

Slide 43 text

● Camada 4 (API Gateway): ○ Interliga todos os módulos do framework; ○ Gerencia os mecanismos de comunicação; ○ Mensagens enviadas através do protocolo HTTP; ○ Implementa mecanismos de segurança; ○ Utilizado pela GUI interativa. 43 Arquitetura OpenFaaS

Slide 44

Slide 44 text

● Camada 3 (Watchdog e Prometheus): ○ Interface entre as funções e o mundo externo; ○ A API envia os dados de entrada para o Watchdog; ○ A função recebe os dados e produz as respostas; ○ O Watchdog envia os dados de volta para a API; ○ Os dados são apresentados ao usuário final; ○ Métricas de utilização (Prometheus). 44 Arquitetura OpenFaaS

Slide 45

Slide 45 text

● Camada 3 (Comunicação entre API e função): 45 Arquitetura OpenFaaS

Slide 46

Slide 46 text

● Camada 2 (Orquestração): ○ Organiza e gerencia instâncias de contêineres; ○ Permite organização horizontal dos contêineres; ○ Fácil inclusão de novos servidores (nós); ○ Permite rápida adaptação de recursos; ○ Google Kubernetes (K8s); ○ Docker Swarm. 46 Arquitetura OpenFaaS

Slide 47

Slide 47 text

● Camada 1 (Docker): ○ Sistema de virtualização robusto; ○ Recursos compartilhados com o hospedeiro; ○ Rápidos e leves quando comparados com VMs; ○ Funções são encapsuladas como serviços. 47 Arquitetura OpenFaaS

Slide 48

Slide 48 text

OpenWhisk ● Lançado em 2016 ● Desenvolvida pela IBM ● Suporte Apache ● Linguagens Suportadas ○ JavaScript ○ Go ○ Python ○ Java ○ PHP ○ Ruby ○ Swift ○ .NET 48

Slide 49

Slide 49 text

OpenWhisk - Aquitetura 49 ● Ações ○ Funções Serverless ● Gatilhos ○ Dispara como resposta a um evento ● Regras ○ Conectam um Gatilho a uma Ação

Slide 50

Slide 50 text

OpenWhisk - Aquitetura 50

Slide 51

Slide 51 text

Detalhes do Sistema OpenWhisk ● Namespace ● Package 51

Slide 52

Slide 52 text

Openlambda ● Desenvolvido em 2016 ● Norteada pela AWS Lambda ● Linguagens Suportadas ○ Java ○ JavaScript ○ Python 52

Slide 53

Slide 53 text

Projetos de Pesquisa ● Processamento de vídeo; ○ Processamento de vídeos de forma escalável; ○ Objetivo: baixo tempo de resposta; ● Aprendizagem de máquina; ○ Treino de modelos em clusters distribuídos; ● Computação científica; ○ Operações matemáticas como funções; 53

Slide 54

Slide 54 text

● Computação nas bordas; ○ FaaS resolve limitações de gerenciamento, volume de dados e custo; ● Segurança; ○ Meios de impedir ataques maliciosos em sistemas serverless; ● Processamento em SmartNICs; ○ SmartNICs no processamento de funções; ○ Aumento da eficiência energética. 54 Projetos de Pesquisa

Slide 55

Slide 55 text

Prática Neste módulo do curso demonstraremos como instalar e utilizar funções serverless utilizando a plataforma OpenFaaS. 55

Slide 56

Slide 56 text

Instalação ● No primeiro passo vamos instalar a plataforma no computador hospedeiro ● Para instalar a plataforma primeiramente precisamos instalar os pacotes com se segue: $ sudo apt-get install git $ sudo apt-get install docker.io 56

Slide 57

Slide 57 text

Instalação ● Em seguida devemos clonar o repositório do OpenFaaS $ git clone https://github.com/openfaas/faas.git ● Instalar a plataforma: $ sudo su $ cd faas $ make 57

Slide 58

Slide 58 text

Instalação ● Ainda é necessário construir e publicar. ● Para construir use o script build via o comando: $ ./build.sh ● Agora a plataforma está apta a ser publicada $ docker swarm init --advertise-addr [interface de rede] $ ./deploy_stack.sh 58

Slide 59

Slide 59 text

Instalação ● Serão criadas as credenciais de usuário e senha para acessar o serviço ● Guarde estas credenciais, elas serão necessárias mais tarde ● Acessar a plataforma em um navegador, no endereço 127.0.0.1 : 8080. 59

Slide 60

Slide 60 text

Instalação da aplicação Cliente ● Necessário para acesso do desenvolvedor a plataforma ● Instalação via script. $ curl -sSL https://cli.openfaas.com | sudo sh ● aplicação pronta para divulgar funções, o gateway por padrão é 127.0.0.1 : 8080. 60

Slide 61

Slide 61 text

Instalação da aplicação Cliente ● Realizar o login no gateway usando as credenciais obtidas no passo anterior: $ faas-cli login [--username USERNAME] [--password PASSWORD] ● Caso deseje fazer o download de todos os templates oficiais basta executar: $ faas-cli template pull $ ls template/ 61

Slide 62

Slide 62 text

Implementação de funções ● Para começar a escrever as funções basta, digitar o seguinte comando: $ faas-cli new --lang [linguagem] [nome da função] ● Para o exemplo inicial criaremos uma função python $ faas-cli new --lang python hello-minicurso 62

Slide 63

Slide 63 text

Implementação de funções ● Serão criados 3 arquivos ● Um no diretório raiz e dois em uma pasta com o nome que foi dado para a função ○ hello-minicurso/handler.py ○ hello-minicurso/requirements.txt ○ hello-minicurso.yml 63

Slide 64

Slide 64 text

Implementação de funções ● Primeiro edita-se o arquivo handler.py def handle(nome): print("Ola: " + nome) ● O arquivo handler.py com é a função propriamente dita ● Neste caso imprime na tela "Olá nome", sendo nome uma variável fornecida função como parâmetro. 64

Slide 65

Slide 65 text

Implementação de funções ● No arquivo hello-minicurso.yml são definidas as opções da função 65 provider: name: faas gateway: http://localhost:8080 functions: hello-minicurso: lang: python handler: ./hello-minicurso image: hello-minicurso

Slide 66

Slide 66 text

Implementação de funções ● No arquivo requirements.txt específica dependências da função. ● Neste exemplo específico não será editado. ● Construir a função com o comando: $ faas-cli build -f ./hello-minicurso.yml 66

Slide 67

Slide 67 text

Implementação de funções ● Com a imagem Serverless gerada pode-se publicar função: $ faas-cli deploy -f ./hello-minicurso.yml ● Caso a função seja publicada sem nenhum erro, há um retorno da plataforma com código 200 e o endereço para invocar a função: 200 OK URL: http://localhost:8080/function/hello-minicurso ● Função está publicada e pronta pra ser invocada. 67

Slide 68

Slide 68 text

Invocar funções ● Usuários podem invocar funções diretamente; ● Requer o uso de softwares que atuam como clients; ● Para isso, o software deve suportar o protocolo HTTP; ● É possível enviar parâmetros de entrada; ● Clients abordadas neste minicurso: ○ cURL; ○ FaaS CLI; ○ UI Portal (nativo). 68

Slide 69

Slide 69 text

cURL ● Ferramenta de linha de comando; ● Baseada na biblioteca libcurl; ● Compatível com vários protocolos diferentes: ○ HTTP; ○ FTP; ○ LDAP; etc. ● Disponível para a maioria das versões Linux; ● Instalação (Debian e derivados): $ apt-get install curl 69

Slide 70

Slide 70 text

Invocando funções com cURL ● Parâmetros: ○ IP, porta, a função desejada e a lista de argumentos; ● Exemplo: $ curl :/function/ -d $ curl localhost:8080/function/hello-minicurso \ -d "oi" 70

Slide 71

Slide 71 text

FaaS CLI ● Interface de linha de comando oficial do OpenFaaS; ● Possui vários comandos de gerenciamento de funções; ○ Lista completa: $ faas-cli help ● Opção invoke: ○ Permite invocar funções; ○ Requer menos parâmetros do que o cURL; ○ Os parâmetros são inseridos após a execução; ● Exemplo: $ faas-cli invoke hello-minicurso 71

Slide 72

Slide 72 text

UI Portal ● Interface gráfica oficial do OpenFaaS; ● Apresenta uma lista de funções ativas; ● Possui uma interface de invocação interativa; ● Pode ser acessado através do navegador (porta 8080): ○ http://localhost:8080/ ● Permite configurar o formato da saída: ○ Texto simples; ○ JSON; ○ Download direto. 72

Slide 73

Slide 73 text

UI Portal ● Dados apresentados: ○ Status da função; ○ Número de réplicas e de invocações; ○ Imagem base, URL e processo principal. 73

Slide 74

Slide 74 text

UI Portal ● Dados apresentados: ○ Status e corpo da resposta HTTP; ○ Tempo de execução. 74

Slide 75

Slide 75 text

Templates ● Arquivos usados como modelo para novas funções; ● Podem ser criados para qualquer linguagem; ● Completamente customizáveis; ● Estrutura geral: ○ Dockerfile; ○ index.ext; ○ handler.ext; ○ template.yml. 75

Slide 76

Slide 76 text

Inserindo um template no OpenFaaS ● Comandos iniciais: $ mkdir -p ~/functions && cd ~/functions $ faas-cli template pull $ cd template && ls $ mkdir c-language && cd c-language $ mkdir function/ && cd function/ $ touch header.h handler.h 76

Slide 77

Slide 77 text

Inserindo um template no OpenFaaS ● Conteúdo do arquivo header.h: #include #include #include int handler(char *entrada); 77

Slide 78

Slide 78 text

● Conteúdo do arquivo header.c: #include "header.h" int handler(char *entrada) { printf("Oi! A mensagem é '%s'\n", entrada); return 0; } ● Próximos comandos: $ cd .. $ touch index.c 78 Inserindo um template no OpenFaaS

Slide 79

Slide 79 text

● Conteúdo do arquivo index.c: #include "header.h" #define TAM_MAX_DADOS 16 int main() { char *dados; int tamanho; // Alocando a memória para o vetor de dados; dados = malloc(TAM_MAX_DADOS * sizeof(char)); 79 Inserindo um template no OpenFaaS

Slide 80

Slide 80 text

● Conteúdo do arquivo index.c: // Armazenando dados da entrada padrão; fgets(dados, TAM_MAX_DADOS, stdin); tam = strlen(dados); // Removendo '\n' do final do vetor; if (dados[tam - 1] == '\n') dados[--tam] = '\0'; // Enviando dados recebidos para o handler; handler(dados); return 0; } 80 Inserindo um template no OpenFaaS

Slide 81

Slide 81 text

● Próximos comandos: $ touch Dockerfile template.yml ● Conteúdo do arquivo Dockerfile: FROM openfaas/classic-watchdog:0.18.0 as watchdog FROM alpine:latest RUN apk add build-base COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog RUN chmod +x /usr/bin/fwatchdog 81 Inserindo um template no OpenFaaS

Slide 82

Slide 82 text

● Conteúdo do arquivo Dockerfile: WORKDIR /app/ COPY function/header.h . COPY function/handler.c . COPY index.c . RUN gcc header.h handler.c \ index.c -static -o /exec \ && chmod +x /exec ENV fprocess="/exec" 82 Inserindo um template no OpenFaaS

Slide 83

Slide 83 text

● Conteúdo do arquivo Dockerfile: HEALTHCHECK --interval=3s CMD [ -e /tmp/.lock ] || exit 1 CMD ["fwatchdog"] ● Conteúdo do arquivo template.yml: language: c fprocess: /exec welcome_message: Parabéns! Você criou uma função serverless em C! 83 Inserindo um template no OpenFaaS

Slide 84

Slide 84 text

eBPF ● extended Berkeley Packet Filter ● Máquina virtual RISC de 64 bits ● Kernel do Linux ● Processamento rápido de pacotes ● Bytecode eBPF ● Suporte C e P4 84

Slide 85

Slide 85 text

eBPF ● extended Berkeley Packet Filter ● Máquina virtual RISC de 64 bits ● Kernel do Linux ● Processamento rápido de pacotes ● Bytecode eBPF ● Suporte C e P4 85

Slide 86

Slide 86 text

Adicionando suporte uBPF no template C ● uBPF ● Alterar template C feito anteriormente ● Instalar pacotes de dependências ● Gerar a máquina virtual ● Copiar o conteúdo da pasta c-language: $ cd ~/functions/template $ cp -r c-language c-ebpf && cd c-ebpf 86

Slide 87

Slide 87 text

Adicionando suporte uBPF no template C ● Alterar nosso Dockerfile ● As linhas a diretica RUN abaixo deve ser adicionada loga após as diretivas FROM para instalar as dependências, 87 RUN apk add build-base \ clang \ git \ llvm

Slide 88

Slide 88 text

Adicionando suporte uBPF no template C ● Logo após a primeira definição de WORKDIR adicionar as linhas abaixo que fazem download do código do uBPF do repositório oficial e compilam a máquina virtual ubpf de teste, 88 RUN git clone https://github.com/iovisor/ubpf.git WORKDIR ubpf RUN make -C vm

Slide 89

Slide 89 text

Adicionando suporte uBPF no template C ● a linha abaixo deve ser adicionada apos o comando que copia o arquivo handle.c para compilar o código uBPF escrito pelo usuário no arquivo. ● RUN clang -O2 -emit-llvm -c handler.c -o - | \ llc -march=bpf -filetype=obj -o handler.o 89

Slide 90

Slide 90 text

Adicionando suporte uBPF no template C ● Por fim adicionar a linha que executa o código gerado na maquina virtual. ENV fprocess="/home/app/ubpf/vm/test /home/app/ubpf/handler.o" 90

Slide 91

Slide 91 text

Adicionando suporte uBPF no template C ● O arquivo handle.c do template deve ser alterado como se segue #include "vm/inc/ubpf.h" int main() { } 91

Slide 92

Slide 92 text

Exemplo: função uBPF ● Primeiro instanciamos uma função baseada no template. $ faas-cli new --lang c-ebpf hello_ebpf $ cd hello_ebpf/function/ 92

Slide 93

Slide 93 text

Exemplo: função uBPF ● Adicionamos o código que queremos executar. Neste exemplo vamos apenas elevar uma constante ao quadrado, bastando para isso editar o arquivo handler.c 93 #include "vm/inc/ubpf.h" int main() { int a; a=2; return a*a; }

Slide 94

Slide 94 text

Exemplo: função uBPF ● Podemos gerar a imagem com o comando: $ faas-cli build -f ./hello-ebpf.yml ● Com a imagem Serverless gerada, pode-se publicar função: $ faas-cli deploy -f ./hello-ebpf.yml 94

Slide 95

Slide 95 text

Exemplo: função uBPF ● Em seguida, invocar a função e receber o resultado esperado. $ curl http://127.0.0.1:8080/function/hello-ebpf $ 4 ● Apesar de simples, o exemplo demonstra como, com essa ferramenta em mãos, se pode rapidamente gerar e disponibilizar funções ebpf. 95