All Projects → epiresdasilva → super-serverless-sample

epiresdasilva / super-serverless-sample

Licence: Apache-2.0 License
Backend serverless que simula o sistema de votação do BBB

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to super-serverless-sample

Lambdaguard
AWS Serverless Security
Stars: ✭ 300 (+900%)
Mutual labels:  lambda, aws-lambda, dynamodb, sqs
terraform-aws-lambda
A Terraform module to create AWS Lambda ressources.
Stars: ✭ 40 (+33.33%)
Mutual labels:  lambda, dynamodb, sqs, eventbridge
Aws Cli Cheatsheet
☁️ AWS CLI + JQ = Make life easier
Stars: ✭ 94 (+213.33%)
Mutual labels:  lambda, api-gateway, dynamodb, rds
Serverless Express
Run Node.js web applications and APIs using existing application frameworks on AWS #serverless technologies such as Lambda, API Gateway, Lambda@Edge, and ALB.
Stars: ✭ 4,265 (+14116.67%)
Mutual labels:  lambda, aws-lambda, api-gateway, dynamodb
Serverless Sharp
Serverless image optimizer for S3, Lambda, and Cloudfront
Stars: ✭ 102 (+240%)
Mutual labels:  lambda, aws-lambda, api-gateway
shim
HTTP Handler shim for Go projects running on AWS Lambda
Stars: ✭ 64 (+113.33%)
Mutual labels:  lambda, aws-lambda, api-gateway
Hello Lambda
🔥 An example of a Python (AWS) Lambda exposed with API Gateway, configured with Terraform.
Stars: ✭ 114 (+280%)
Mutual labels:  lambda, aws-lambda, api-gateway
Sqs Worker Serverless
Example for SQS Worker in AWS Lambda using Serverless
Stars: ✭ 164 (+446.67%)
Mutual labels:  lambda, dynamodb, sqs
Serverless Es Logs
A Serverless plugin to transport logs to ElasticSearch
Stars: ✭ 51 (+70%)
Mutual labels:  lambda, aws-lambda, api-gateway
Serverless Next.js
⚡ Deploy your Next.js apps on AWS Lambda@Edge via Serverless Components
Stars: ✭ 2,977 (+9823.33%)
Mutual labels:  lambda, aws-lambda, api-gateway
Laravel Bridge
Package to use Laravel on AWS Lambda with Bref
Stars: ✭ 168 (+460%)
Mutual labels:  lambda, aws-lambda, sqs
Awesome Aws
A curated list of awesome Amazon Web Services (AWS) libraries, open source repos, guides, blogs, and other resources. Featuring the Fiery Meter of AWSome.
Stars: ✭ 9,895 (+32883.33%)
Mutual labels:  lambda, dynamodb, rds
Lambda Refarch Webapp
The Web Application reference architecture is a general-purpose, event-driven, web application back-end that uses AWS Lambda, Amazon API Gateway for its business logic. It also uses Amazon DynamoDB as its database and Amazon Cognito for user management. All static content is hosted using AWS Amplify Console.
Stars: ✭ 1,208 (+3926.67%)
Mutual labels:  lambda, aws-lambda, dynamodb
Up
Up focuses on deploying "vanilla" HTTP servers so there's nothing new to learn, just develop with your favorite existing frameworks such as Express, Koa, Django, Golang net/http or others.
Stars: ✭ 8,439 (+28030%)
Mutual labels:  lambda, aws-lambda, api-gateway
Aws Mobile React Native Starter
AWS Mobile React Native Starter App https://aws.amazon.com/mobile
Stars: ✭ 2,247 (+7390%)
Mutual labels:  lambda, api-gateway, dynamodb
Apilogs
Easy logging and debugging for Amazon API Gateway and AWS Lambda Serverless APIs
Stars: ✭ 216 (+620%)
Mutual labels:  lambda, aws-lambda, api-gateway
Zappa
Serverless Python
Stars: ✭ 11,859 (+39430%)
Mutual labels:  lambda, aws-lambda, api-gateway
go-localstack
Go Wrapper for using localstack
Stars: ✭ 56 (+86.67%)
Mutual labels:  lambda, dynamodb, sqs
Workshop Donkeytracker
Workshop to build a serverless tracking application for your mobile device with an AWS backend
Stars: ✭ 27 (-10%)
Mutual labels:  lambda, api-gateway, dynamodb
Corgi
AWS Lambda / API Gateway native, fast and simple web framework
Stars: ✭ 44 (+46.67%)
Mutual labels:  lambda, aws-lambda, api-gateway

SSS - Super Serverless Sample

Esse é um projeto de exemplo de arquitetura serverless usando como inspiração a votação para eliminação do paredão do BBB. Nessas votações, o sistema da Globo recebe uma alta carga de execuções e precisa de uma arquitetura que consiga processar tudo isso.

Arquitetura

Explicação sobre cada recurso utilizado

  • API Gateway: recebimento das requisições através de uma API Rest e enviando de forma assíncrona para processamento, proporcionando um alto throughput
  • EventBridge: poderoso broker de mensagens que permite a execução paralela de cada mensagem de forma massiva. Alta capacidade de processamento das mensagens no mesmo ritmo que é recebido
  • DynamoDB: armazenamento dos votos individuais
  • SQS: envio de mensagens em lotes para processo assíncrono de contagem dos votos. O envio de lotes proporciona uma contagem mais rápida. Ao mesmo tempo, o SQS permite um processamento alto e controlado para não sobrecarregar o banco de dados
  • RDS (Aurora Serverless): armazenamento da contagem dos votos, permitindo o incremento do valor e emissão de relatórios de forma mais otimizada

Desafio da definição da arquitetura

Esse desenho de arquitetura mostrado anteriormente é a versão final, mas precisei iterar sobre ele para chegar nessas conclusões. Por isso, quero registrar também as escolhas que não atenderam as necessidades. Para começar, é importante dizer que serverless te entrega escala sem preocupação, mas isso não significa que você terá a escala necessária para resolver o seu problema. Isso porque cada serviço tem suas característica e apesar de em termos de infraestrutura você não ficar na mão, você pode ainda ter problema de vazão.

API Gateway e SQS

Na primeira tentativa, utilizei o SQS conectado ao API Gateway para receber os votos de forma assíncrona direto do endpoint. Em termos de disponibilidade não tive nenhum problema, mas o consumo dessas mensagens não atendia a velocidade de contabilização de votos que precisava. Por esse motivo, o uso de um Broker como o EventBridge fez mais sentido.

DynamoDB Stream

Também na primeira versão da arquitetura, ao invés do uso de SQS como Destination da Lambda de registro de votos, eu havia utilizado a Lambda conectada no DynamoDB Stream para ouvir os eventos de cadastro. Em termos funcionais funcionou muito bem, mas assim como o Kinesis, o DynamoDB Stream trabalha com o conceito de shard. Sendo assim, só é possível paralelizar a mesma quantidade de shards configuradas no DynamoDB. Mesmo tendo a opção de paralelizar e aumentar a capacidade, ainda ficou aquém da velocidade necessária para o problema.

Executar

Esse projeto utiliza Serverless Framework para gerar a infraestrutura como código. Por esse motivo, fica fácil reproduzir essa aplicação em sua própria conta da AWS.

Basta executar o comando abaixo na raiz do projeto:

sls deploy

Antes de realizar uma chamada para o endpoint, você precisa criar uma tabela no seu banco de dados RDS:

create table vote_bag_count (id serial primary key, name text, vote_count integer, saved_at timestamp);

Estatísticas

Teste de carga

  • Nos testes mais simples: 5k requisições por segundo
    • 10 segundos de duração
    • 50k requisições no total
  • Testes de processamento: 20k requisições por segundo
    • 60 segundos de duração
    • 1,2mi requisições no total
    • Tempo de processamento do placar: 25 minutos

Desenvolvimento

O desenvolvimento todo foi realizado dentro de uma semana, trabalhando somente em dias úteis em torno de 2 horas por dia. Um total de 10 horas de desenvolvimento.

Custos

Os valores abaixo são do intervalo todo de desenvolvimento, portanto esses custos incluem todos os testes realizados inúmeras vezes e não somente o teste final que resultou na estatística citada anteriormente.

  • RDS: US$ 2,90 / dia
  • VPC: US$ 1,44 / dia
  • Lambda: US$ 1,00 total
  • API Gateway: US$ 7,12 total
  • DynamoDB: US$ 2,46 total
  • SQS: US$ 0,21 total
  • Total: US$ 52,57

O que ainda poderia ser feito

  • Abordagem mais robusta de dados: processar as mensagens mais rapidamente
    • Near realtime com Kinesis, por exemplo
  • Pipeline para deploy automatizado: não precisar de deploy manual
  • Utilização de SecretsManager: basicamente para proteger a credencial do banco de dados RDS
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].