O documento discute como processar grandes volumes de dados do Twitter em tempo real usando AWS Lambda e Kinesis. A solução inicial usava Node.js e Elasticsearch, mas não era escalável. A nova solução usa Kinesis para streaming de dados, Lambda para processamento e Elasticsearch para indexação, fornecendo escalabilidade, tolerância a erros e elasticidade.
Quais são as opções de banco de dados gerenciados na AWS?
Semelhante a TDC2017 | São Paulo - Trilha NODEJS How we figured out we had a SRE team at - Processamento de dados em alta escala com Node.js e AWS Lambda
Construindo Data Lakes e Analytics na AWS - BDA301 - Sao Paulo SummitAmazon Web Services
Semelhante a TDC2017 | São Paulo - Trilha NODEJS How we figured out we had a SRE team at - Processamento de dados em alta escala com Node.js e AWS Lambda (20)
7. O problema é...
Em um dia não podemos sincronizar a base de um
mês com a API do Twitter, como faremos isso em
real-time?
8. O problema é...
● Captura de dados (na época):
○ ~ 18 milhões de tweets/mês
○ ~ 300 milhões de registros/mês
● Checagem de tweets (via Twitter API /statuses/lookup):
○ 8 milhões de tweets/dia
12. É possível...
É só ter capacidade para checar este volume de dados via a api de
real-time do Twitter:
50 mil registros / minuto
~ 834 registros / segundo
72 M registros / dia
13. É possível… será?
Como fazer isso com uma base histórica de
mais de 4 TB e mais de 300 bilhões de
registros?
15. Uma primeira solução!
● Listener:
○ ter uma máquina "parruda" para suportar a conexão do Twitter
○ utilizar o PM2 para gerenciar o app em Node.js
● Compliance:
○ uma api em Node.js usando Express
○ utilizar um Elastic Search pré-existente com os dados necessários
indexados para aliviar a carga no Scup Core (e no banco)
22. Características necessárias
● Escalabilidade
○ devemos suportar o volume de dados
● Tolerância a erros
○ erros ocasionais não devem impactar o todo
● Elasticidade (+)
○ queremos utilizar os recursos certos na hora certa
26. AWS SQS (Simple Queue Service)
• Engine de filas da Amazon
• Permite que cada leitor "reserve" os dados lidos por um período de tempo
• Possui mecanismo de "dead letter" caso algum erro de leitura ocorra com frequência
Produtor SQS Consumidor
28. AWS Kinesis Streams
• Engine de processamento de Streams em Tempo Real
• Semelhante ao Apache Kafka, uma "fila" que pode ter múltiplos leitores
• Leitura de dados rápida (cerca de 300 ms)
Produtor
Kinesis Stream
Shard 1
Shard 2
...
AWS Lambda
KCL Apps
Outros
consumidores
30. AWS Lambda
• Executa funções sem servidores ("Serverless", "Function as a Service")
• Acionamento através de eventos, escalando a medida que eles são disparados
• Atualmente suporta Node.js (4.3.2 e 6.10.2), Python (3 e 2.7), Java 8 e C# (.Net Core 1.0.1)
Evento Função Resultado
31. AWS Lambda e AWS Kinesis
É possível definir o número de registros a ser lido por um único lambda
Caso haja erro na leitura, o ponteiro do Kinesis congelará nos registros com erro até os
dados serem lidos corretamente ou expirarem (1 ou 7 dias)
Produtor
Kinesis Stream
Shard 1
Shard 2
...
AWS Lambda 1
AWS Lambda 2
AWS Lambda ...
33. Características da solução
● Escalabilidade e Elasticidade
○ ajustamos a capacidade de leitura em função dos shards do Kinesis
○ mais ativação de Lambdas em razão ao volume de dados
● Tolerância a erros
○ o Lambda tem mecanismos de retries em caso de erro (por exemplo,
timeouts de queries)
38. Open source @ Sprinklr
Conheça os nossos projetos em https://github.com/scup
● Speck - Entidades de domínio com validações reativas
● Nodebase - boilerplates de NodeJS da Sprinklr
● Speck Sequelize Repository - modelos de repositório de acesso a dados
com o Speck