@fidelissauro
Matheus Fidelis (Raj)
Arquiteto Cloud / DevOps
Superlógica / PJBank
ESQUEÇA TUDO
NoOps
Sem Servers
DevOps
Sem Preocupação
com Servers
Funções tem entrega e escala de forma unitária;
Máquinas, VM's ou containers não são VISÍVEIS ao usuário;
Storage Persistente é mantido transparentemente;
Scaling por request; Nunca acima ou abaixo da necessidade;
Never pay for idle; Sem custos por recursos sem utilização;
Tolerante a falhas;
Bring Your Own Code;
Métricas e logging são direitos universais;
MANIFESTO
PROVER RECURSOS DE INFRA
SEM AS EVENTUAIS
PREOCUPAÇÕES DE INFRA
CAMADA DE APLICAÇÃO
ONDE ISSO
MORA?
STORAGE
DATABASES
STREAMING
CONTAINERS
FAAS
API’s
IOT /
On Quase
Premise
Escala de...
ACESSOS
CLIENTES
DEMANDA
EQUIPE
INFRA
CLOUD REVOLUTION
X-aaS
IaaS
PaaS
BaaS
DaaS
MaaS
SaaS
FaaS
IaaS
Capacidade Computacional;
VM Servers, Network, Routers e
etc;
Focado em Infraestrutura e SO;
Requer mais provisionamento e
configuração;
Ideal para equipes grandes ou
aplicações mais complexas;
PaaS
Nível básico de abstração de
infra;
Focado em plataformas e
aplicação;
Ideal para equipes de
desenvolvedores;
Provisionamento e Escala
Facilitado;
BaaS
Alto nível de abstração;
Objetivos Específicos;
Corte de demanda;
Gerenciamento por terceiros;
FaaS
(Function as a Service)
Funções Independentes
Responsabilidades Independentes
Escala Independente
OBJETIVOS ESPECÍFICOS
MICROSERVIÇOS
Cloud Native
(Código escrito para nuvem)
Negócio
Abstração de administração
Auto-scaling
Pay-per-use*
Time to market
Baixo Overhead
Curva de aprendizado
BENEFÍCIOS
FaaS
Baseado em eventos
Alta disponibilidade
Alta escalabilidade
RUNTIMES
Event-Driven Applications
Triggers
ARQUITETURA
Event Sources
EPHEMERAL CONTAINERS
EPHEMERAL
Criados para morrer
Não garante um longo TTL
Online somente quando requisitado
Warm Ups
WARM UPS
COLD WARM UP
COLD WARM UP
Uma nova execução é requisitada
O código é copiado para o container
A função é inicializada
A função é executada
O container é congelado para execução
HOT WARM UP
HOT WARM UP
Uma nova execução é requisitada
Um container é descongelado (warm)
A função é executada
O container é congelado novamente
COMO ORQUESTRAR
TUDO ISSO?
FRAMEWORK
CLI
Open Source
Otimização de Deploy
Gerenciamento FaaS
Arquivo YAML de configuração
https://serverless.com
npm install -g serverless
$ serverless
create
deploy
invoke
logs
remove
serverless create 
--template aws-nodejs 
--path ./demo
handler.js
handler.js
nome do app
providers, runtimes e configurações globais
Declaração de uma função
serverless.yml
nome do app
providers, runtimes e configurações globais
Declaração de uma função
serverless.yml
Configuração de um evento HTTP
serverless.yml
Configurações específicas
serverless deploy -v
PROVIDERS
POR ONDE EU COMEÇO?
COMEÇANDO DO ZERO
Pequenos serviços satélites
Projetos novos em geral
Processos mais braçais
Crons e outros processos agendados
Gerenciamento de logs e alertas
MIGRANDO O PRODUTO
Migração parcial
Otimizações de Pain Points
Endpoints de gargalo
API Gateway
MIGRANDO O PRODUTO
MIGRANDO O PRODUTO
MIGRANDO O PRODUTO
MIGRANDO O PRODUTO
MIGRANDO O PRODUTO
DevOps
DEVOPS + FaaS
Pipelines
Unit Tests
Multi-environment
CI/CD de FaaS
Dev Onboarding
Desenvolvimento + Mocks
localstack - AWS Resources (Docker)
serverless-offline (npm)
serverless-dynamodb-local (npm)
Unit Tests
Mocha
Chai
Lab
Unit Tests
Módulo da função lambda
Unit Tests
Módulo da função lambda
Mock de um evento HTTP
Unit Tests
Módulo da função lambda
Mock de um evento HTTP
Captura do callback do Lambda
Autenticação
Amazon Cognito
JWT
Telemetria
New Relic
Cloudwatch
X-Ray
Serverless Dashboard
Dashbird
SERVERLESS PIPELINE
https://github.com/msfidelis/serverless-pipeline
Aplicações
Casos de Uso
Webhooks
API Gateway
Lambda Save webhooks-db
webhooks-queue
Webhooks Consumer
Async
Webhooks Execution
Async
execution feedback
SERVERLESS WEBHOOKS
https://github.com/superlogica/serverless-webhooks
API Logs / IDS / Comportamento
App Servers
RedisMQ - IDS
RedisMQ - API Logs
IDS Consumer
Logs Consumer
Lazy Data Streaming
API Gateway Lambda Post SQS
Messages
Consumer
App Servers
API’s de Bigdata
Cron Jobs
ETC...
S3 Batch Processing
HTTP Requests
AWS API Actions
Database Process
rate(2 hours)
cron(00 23 * * ? * )
cron(00 05 1 * * ? *)
cron(00 05 1 * ? * )
cron(* * * * * * )
Cron Jobs
SERVERLESS FRAMEWORK
https://github.com/serverless/serverless
SERVERLESS DOCS
https://serverless.com/framework/docs/
SERVERLESS EXAMPLES
https://github.com/serverless/examples
SERVERLESS ARCHITECTURE BOILERPLATE
https://github.com/msfidelis/serverless-architecture-boilerplate
Configurações de Ambiente
API Endpoints
Workers
Shared Libs
Tests
Docker
Travis
CI / CD
SERVERLESS EXPRESS
https://github.com/dougmoscrop/serverless-http
OBRIGADO!
PERGUNTAS?
Matheus Fidelis (Raj)
Twitter: @fidelissauro
Github: msfidelis
Web: raj.ninja

Road to serverless

Notas do Editor

  • #2 Conversar sobre tecnologias Serverless Quais são; Os principios; Onde são utilizadas; Apresentar ferramentas; frameworks; casos de uso;
  • #4 Confusão; Nome; Sem Servidor; A gente sabe que isso não é possível; Pedra; Tudo tem que arcar com custos computacionais;
  • #5 O termo Serverless, tem servidor. O que caracteriza um serviço Serverless é muito mais que isso, e muito menos mágico que isso. A usabilidade do paradigma já começa bugando o cérebro pelo primeiro contato, pelo NOME;
  • #6 Alguém aqui é usuário de serviços serverless? Alguém aqui já trabalha com serviços serverless? Alguém aqui tem algum projetinho pessoal legal usando Serverless? Alguém aqui já brincou em casa, no escuro, no silêncio da noite com alguma tecnologia Serverless? Antes de mais nada então, vamos começar do inicio. Quero que vocês peguem a gavetinha mental de vocês sobre o assunto, e coloque apenas folhas em branco. Vamos começar do zero a entender o que é esse tipo de tecnologia. Beleza?
  • #7 Uma das primeiras coisas mágicas que ouvimos falar a respeito do Serverless, é a total eliminação de práticas DevOps e custos computacionais. Isso não é verdade. Pra alguém dizer isso ela não faz a minima ideia do que é DevOps. As boas práticas de software, de qualidade, pipeline ainda são aplicadas normalmente. E como já vimos, vamos modificar a ideia de “Sem Servidores” para “Sem PREOCUPAÇÃO com servidores”.
  • #8 O paradigma/filosofia Serverless não nasceu da bagunça do dia pra noite. Existe um manifesto das tecnologias Serverless, Que ninguém sabe ao certo quem é o autor, só sei que esse manifesto está publicado em blogs da AWS, de figurões como Martin Folwer, Uncle Bob e etc. É meio confuso achar o autor verdadeiro disso, mas todas as ideias e tecnologias que surgiram com base em Serverless seguem ou estão tentando seguir fielmente o que está descrito nesse manifesto.
  • #9 Resumindo tudo isso, a ideia do Serverless é prover recursos de infraestrutura e serviço, sem as eventuais preocupações de manutenção e suporte pra recursos de infra.
  • #10 Te permitindo focar direto na camada de aplicação e consumo dos serviços que você pretende utilizar.
  • #12 E dentro dos níveis de abstração de cloud mais conhecidos, onde está o Serverless? Essa é a melhor imagem do universo pra explicar os níveis de abstração de Núvem
  • #13 Mas antes da gente responder essas perguntas, vamos pegar mais folhas brancas e onde tudo era mato.
  • #15 Mas esse cenário se tornou inviável com o BOOM da adoção da tecnologia. Com transformação digital da maioria dos produtos tradicionais, a facilidade de criar novos produtos de tecnologia, com a facilidade de acesso aos serviços de tecnologia, começaram a surgir N necessidades de escala. Sejam elas
  • #16 Foi mais ou menos ai que o Cloud começou a explodir em termos de adoção, custo, escalabilidade e performance pra esse novo tipo de necessidade.
  • #17 E com ele vieram vários terminhos técnicos, que são chamados de QualquerCoisaAaaS, que hoje são os níveis de abstração de Cloud,
  • #18 Vamos passar rapidamente entre os mais conhecidos, sendo o primeiro e até hoje mais adotado, o Infrastructure As A Service. A ideia de criar, dimensionar e destruir infraestrutura conforme demanda serviu como uma luva pra suportar o surgimento e crescimento de novos produtos e negócios. Porém o custo manual disso ainda era muito grande, seja por provisionamento, configuração de servidores, rede, roteadores virtuais. Gerenciamento de imagens, versionamento, manutenção de S.O. O que faz ele ideal pra quando seu produto requer níveis mais baixos de configuração. Esse modelo otimiza e muito custos, escala vertical, horizontal, te provê mais níveis de customização, porém ainda existem necessidades que não precisam de tanta gestão, e precisam ser mais ágeis.
  • #19 Dai foi criada mais um nível de abstração de infraestrutura, focada em código e na produtividade do desenvolvedor, o Platform as a Service, facilitando e abstraindo muito questões de infraestrutura pra quem não tinha a necessidade de tamanha customização, ou não possuia Know How suficiente pra tal. Esse modelo na maioria dos casos te provê apenas uma forma de você subir seu código desde que o Runtime fosse suportado, e disponibilizar o acesso para consumo dos clientes. Mais tarde esse nível evoluiu bastante, principalmente com a adoção de Containers e etc.
  • #20 Também existe o Backend as a Service que talvez fosse o primeiro passo pra algo Serverless de verdade. Esse modelo foi criado pra abstrair o uso de recursos especificos como Storage, Databases, Runtimes especificos de código, e ele veio para cortar a demanda de algum objetivo complicado de backlog.
  • #21 E o principal dessa noite o Function as a Service.
  • #22 Que são basicamente a possibilidade de fazer deploy de funções independentes, com responsabilidades independentes e que elas possam escalar independentemente de acordo com a demanda.
  • #23 A ideia é ter codar e entregar uma função que tenha um objetivo especifico, e permitir que a ela execute de forma independente e transparente pra cumprir o que ela foi criada pra fazer.
  • #24 Uma ideia que mais tarde evoluiu do que a gente conhece hoje como Microserviço, e uma ideia ajudou a evoluir a outra até chegar num nível de abstração que elas conseguiram se unir e se tornar a mesma coisa dentro de contextos especificos.