Backend serverless que simula o sistema de votação do BBB

Overview

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
You might also like...

Backend para encurtar url utilizando o que aprendi no Ignite da Rocketseat.

🔗 URL Shortener 🔗 💡 Tecnologias | 💻 Projeto | 🚀 Como executar | 📝 Licença 💡 Tecnologias Esse projeto foi desenvolvido com as seguintes tecnolog

Jan 25, 2022

Highly opinionated project template for Serverless Framework that follows and applies hexagonal architecture principle to serverless world. Prepared with easy testing in mind.

Highly opinionated project template for Serverless Framework that follows and applies hexagonal architecture principle to serverless world. Prepared with easy testing in mind.

serverless-hexagonal-template Highly opinionated project template for Serverless Framework that applies hexagonal architecture principles to the serve

Dec 26, 2022

Learn Web 2.0 and Web 3.0 Development using Next.js, Typescript, AWS CDK, AWS Serverless, Ethereum and AWS Aurora Serverless

Learn Web 2.0 Cloud and Web 3.0 Development in Baby Steps In this course repo we will learn Web 2.0 cloud development using the latest state of the ar

Jan 3, 2023

A Serverless GraphQL Sample project using Apollo and Serverless Framework with TypeScript and Webpack.

Serverless GraphQL Boilerplate This is a base project with a structure that includes Serverless Framework, Apollo, TypeScript and Webpack. It can be d

Aug 23, 2022

AWS Lambda & Serverless - Developer Guide with Hands-on Labs. Develop thousands line of aws lambda functions interact to aws serverless services with real-world hands-on labs

AWS Lambda & Serverless - Developer Guide with Hands-on Labs. Develop thousands line of aws lambda functions interact to aws serverless services with real-world hands-on labs

AWS Lambda & Serverless - Developer Guide with Hands-on Labs UDEMY COURSE WITH DISCOUNTED - Step by Step Development of this Repository - https://www

Dec 17, 2022

Uma aplicação back-end para listar e verificar se o dia é um feriado de acordo com os feriados registrados no sistema

Holydayzer Sobre Uma aplicação back-end para listar e verificar se o dia é um feriado de acordo com os feriados registrados no sistema. Como rodar Exe

Mar 9, 2022

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

Ignite - Trilha ReactJS Sobre o projeto O projeto foi baseado no 4º módulo da trilha ReactJS do Ignite. Além do que foi construído na aula, foi criado

Nov 23, 2022

Sistema de controle financeiro em ReactJS / Typescript

Sistema de controle financeiro em ReactJS / Typescript

Sistema de controle financeiro em ReactJS / Typescript Sistema de controle financeiro que organiza e calcula mensalmente a receita, despesa e o balanç

Jun 26, 2022

APi sistema de um e-commerce para compra de jogos novos e usados

APi sistema de um e-commerce para compra de jogos novos e usados

🎮 E-COMMERCE API 💸 APi sistema de um e-commerce para compra de jogos novos e usados Dependencias • Features • Rodando Aplicação • Demonstração • Aut

Aug 25, 2022

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

Ignite - Trilha ReactJS Sobre o projeto O projeto foi baseado no 4º módulo da trilha ReactJS do Ignite. Além do que foi construído na aula, foi criado

Nov 23, 2022

Recreación del entorno de escritorio del sistema operativo macOS Monterey utilizando HTML, CSS y JavaScript

Recreación del entorno de escritorio del sistema operativo macOS Monterey utilizando HTML, CSS y JavaScript

macOS Réplica del sistema operativo macOS Monterey utilizando HTML, CSS y JavaScript. GitHub pages https://jonathan-yv.github.io/macOS/ Componentes Ve

Feb 4, 2022

Sistema de demonstração do livro Engenharia de Software Moderna

ESM Fórum Sistema de demonstração do livro Engenharia de Software Moderna. O objetivo é permitir que o aluno tenha um primeiro contato com os conceito

Nov 28, 2022

Trabalho de Grupo de ESW, Sistema de Candidatura, Matricula e Inscricao

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: ya

Jul 3, 2022

Sistema Web Pessoal - utilizado para estudo

:::::::::::::::::::::::::::: SOBRE :::::::::::::::::::::::::::: ℹ️ O Personal System é uma plataforma web que possui como objetivo conter as funções e

Jun 18, 2022

Frontend - Sistema para cadastro e análise de anomalias e desvios

/ Recent activity / Top contributors Análise de Desvios e Anomalias para a Segurança do Trabalho Sistema para configurar, cadastrar e analisar anomali

Jul 20, 2022

Gatsby-Formik-contact-form-with-backend-panel - Full working contact form with backend GUI panel.

Gatsby minimal starter 🚀 Quick start Create a Gatsby site. Use the Gatsby CLI to create a new site, specifying the minimal starter. # create a new Ga

Jan 2, 2022

Venni backend - The backend of the Venni client apps implementing the credit card payments, matching algorithms, bank transfers, trip rating system, and more.

Cloud Functions Description This repository contains the cloud functions used in the Firebase backend of the Venni apps. Local Development Setup For t

Jan 3, 2022

Thin Backend is a Blazing Fast, Universal Web App Backend for Making Realtime Single Page Apps

Thin Backend is a Blazing Fast, Universal Web App Backend for Making Realtime Single Page Apps

Website | Documentation About Thin Thin Backend is a blazing fast, universal web app backend for making realtime single page apps. Instead of manually

Dec 25, 2022

Uma simples pokédex que consome os dados da PokeAPI.

Uma simples pokédex que consome os dados da PokeAPI.

POKEDEX - Caio Almeida Uma pokedex consumindo os dados provindos da API pública: PokeAPI. Protótipo FIGMA Pokedex FIGMA Pré-requisitos Ter o NodeJS in

Dec 29, 2021
Comments
  • Outras ferramentas utilizadas

    Outras ferramentas utilizadas

    Na tech talk foi comentado que fez a utilização de outras ferramentas, porém que não obtiveram sucesso. Seria interessante documentar as outras ferramentas utilizadas e qual foram as limitações que não as tornaram eligíveis para o case.

    opened by jasondavindev 2
Owner
Evandro Pires da Silva
Software Engineer
Evandro Pires da Silva
Serverless URL Shortener made with Next.js + Redis.

linki: a place for your links linki is a url shortener made with next.js and redis! built with simplicity in mind, it's all in one page. deploy your o

Jack Reiker 12 Sep 15, 2022
Easily redirect one entire domain to another with a serverless Cloudflare Worker.

Domain Redirecting with Cloudflare Workers Easily redirect one entire domain to another with a serverless Cloudflare Worker. All paths and other data

Erisa A 19 Dec 11, 2022
Store and Deliver images with R2 backend Cloudflare Workers.

r2-image-worker Store and Deliver images with Cloudflare R2 backend Cloudflare Workers. Synopsis Deploy r2-image-worker to Cloudflare Make a base64 st

Yusuke Wada 62 Jan 3, 2023
Projeto responsivo, que simula uma Landing Page de uma site de turismos.

FlexTurismos Projeto responsivo, que simula uma Landing Page de um site de turismos. Tecnologias utilizadas: Site com a tela interia Click aqui para a

Ricardo 1 Jan 29, 2022
Olá, este repositório, é um mini-relatório do que eu aprendi através de cursos de JavaScript. Este repositório, muito provável que fique familiar com o que os professores ensinam .

About Project Olá pessoal, este repositório tem o objetivo de relatar meus aprendizados dos cursos que fiz sobre a linguagem JavaScript. Não só com o

Nior 6 Jul 10, 2022
Um sistema de tickets muito simples baseado em mensagens do WhatsApp, que permite multiusuários na mesma conta do WhatsApp.

Press-Ticket Manual de Instalação INSTALL.md Changelog 05/04/2022 Iniciar com o menu lateral fechado 30/03/2022 Atualização da lib wwebjs para a versã

Robson Tenorio 93 Dec 27, 2022
sistema de bate ponto para os aprendizes da brisa, usando Angular no frontend, golang no backend e postgresql como banco.

Migule Points Este projeto tem o intuito de automatizar a frequência dos aprendizes da brisanet, usando Angular no front, Golang no backend e postgres

Pedro Miguel 3 Sep 26, 2022
Hola bienvenido al the LoliBot-MD aquí se hacer actualizaciónes de bot. Bot que funciona el (WhatsApp multidivice) espero que te guste😊

Esta versión de THE LOLIBOT-MD casi está terminada. ✨ —◉ DUDAS SOBRE EL BOT?, CONTACTAME ✨ Quieres tener un bot 24/7 activo ?? ACTIVAR EN HEROKU ☂️ PA

The Lolibot-MD 34 Dec 26, 2022
Apenas uma página que exibe um countdown com a data em que Bolsonaro sai da presidência e tem seu sigilo de 100 anos quebrado

Chá de revelação - Sigilo de 100 anos Descrição Apenas uma página que exibe um countdown com a data em que Bolsonaro sai da presidência e tem seu sigi

Mauricio Taffarel 9 Nov 6, 2022