SDK da AWS e mensagens/streaming

Trabalhe com AWS SDK, desenvolva integracoes SQS/Kinesis, Dead Letter Queues e padroes de retentativa.

DVA-C02 e um exame para desenvolvedores que avalia nao apenas o conhecimento de infraestrutura em nuvem, mas tambem como voce escreve codigo para trabalhar com os servicos da AWS. Este artigo explica, de forma acessivel para iniciantes, como os desenvolvedores se comunicam com os servicos da AWS (SDK), como trocar mensagens com seguranca (SQS) e como processar dados em tempo real (Kinesis).

 

SDK da AWS — Controlando servicos da AWS atraves do codigo

O SDK (Software Development Kit) e um conjunto de ferramentas que permite aos desenvolvedores usar linguagens de programacao como Python, Java ou Node.js para operar os servicos da AWS atraves do codigo. Pense nele como um tradutor que permite que seu codigo fale com os servicos da AWS. Se voce quer fazer upload de um arquivo para o S3 ou salvar dados no DynamoDB a partir do seu codigo Python, voce usa o SDK.

Para usar a AWS a partir do seu codigo, voce precisa de credenciais para provar quem voce e. O SDK segue uma ordem fixa (a cadeia de credenciais) ao procurar essas credenciais. Primeiro ele verifica as variaveis de ambiente, depois o arquivo de credenciais compartilhadas e por ultimo a funcao IAM anexada ao servidor. Conhecer essa ordem ajuda a resolver rapidamente situacoes de "por que estou recebendo um erro de permissao".

A configuracao de regiao consiste em especificar qual centro de dados da AWS (regiao) usar ao criar um cliente SDK. Isso tambem pode ser definido por variaveis de ambiente.

A paginacao e uma funcionalidade em que o SDK divide automaticamente grandes conjuntos de resultados em multiplas paginas quando ha resultados demais para retornar de uma vez. Voce recebe os resultados em pedacos, como capitulos de um livro.

 

Desenvolvimento com SQS — Entrega segura de mensagens

O SQS e um sistema postal para trocar mensagens com seguranca entre servicos. O remetente (produtor) e o receptor (consumidor) nao precisam estar diretamente conectados.

Ciclo de vida da mensagem

Vamos percorrer passo a passo como uma mensagem e processada.

Primeiro, o produtor envia uma mensagem para a fila. Quando um consumidor pega a mensagem, o timeout de visibilidade comeca naquele momento. O timeout de visibilidade e um bloqueio temporario que diz "esta mensagem esta sendo processada — outros consumidores, nao toquem". Uma vez que o consumidor termina o processamento, ele exclui a mensagem. Se a mensagem nao for excluida dentro do timeout de visibilidade (por falha ou atraso no processamento), ela reaparece na fila e outro consumidor pode trata-la.

Dead Letter Queue (DLQ)

Algumas mensagens podem continuar falhando independentemente de quantas vezes sejam reprocessadas. Deixar essas mensagens sem resolver causa tentativas repetidas de reprocessamento que desperdicam recursos. A DLQ move mensagens que falharam mais de um numero definido de vezes (maxReceiveCount) para uma fila de isolamento separada para ser guardada. Os desenvolvedores podem analisar a DLQ posteriormente para encontrar a causa raiz dos erros. Pense nisso como uma enfermaria de isolamento num hospital.

Long Polling vs Short Polling

Ha duas formas de buscar mensagens do SQS.

Short Polling pergunta imediatamente a fila "ha alguma mensagem?" e retorna uma resposta vazia imediatamente se nao houver nenhuma. O problema e que continua perguntando mesmo quando nao ha mensagens, desperdicando custos de chamadas de API.

Long Polling aguarda ate 20 segundos para uma mensagem chegar. Isso e configurado com WaitTimeSeconds. As respostas vazias sao reduzidas, o numero de chamadas de API diminui e os custos sao menores. Long Polling e geralmente a abordagem recomendada.

!Short Polling vs Long Polling

Kinesis Streaming — Processamento de dados em tempo real

Ao contrario do SNS e SQS, o Kinesis e um servico de streaming que processa grandes volumes de dados em tempo real. Enquanto SNS e SQS lidam com mensagens individuais, o Kinesis lida com dados que fluem continuamente como um rio. Por exemplo, ele pode ser usado para analisar em tempo real os logs de uso de milhoes de usuarios de um aplicativo, ou para processar dados de sensores IoT.

O Kinesis Data Streams e organizado em unidades chamadas shards. Pense nos shards como faixas de uma rodovia. Os produtores usam partition keys para direcionar os dados para faixas especificas (shards), e os consumidores leem dados de cada faixa.

Enhanced Fan-out e uma funcionalidade que garante throughput dedicado por consumidor quando varios consumidores estao lendo do mesmo stream. Cada consumidor recebe dados de forma independente a 2MB por segundo por shard.

O periodo de retencao de dados padrao e de 24 horas e pode ser estendido ate 365 dias.

 

Padroes de codigo resiliente

Logica de retentativa — Exponential Backoff

Quando ocorre um erro de rede ou uma interrupcao temporaria de servico, tentar novamente imediatamente pode na verdade aumentar a carga no servidor. O Exponential Backoff dobra o intervalo de retentativa a cada falha: tentar novamente apos 1 segundo, depois 2 segundos se isso falhar, depois 4 segundos, 8 segundos, e assim por diante. Isso esta integrado por padrao no SDK da AWS, mas pode precisar de implementacao personalizada em alguns casos.

Padrao Circuit Breaker

Como um disjuntor em sistemas eletricos, esse padrao interrompe temporariamente as chamadas para um servico externo quando ele continua falhando. Se voce continuar enviando solicitacoes para um servico que falha consistentemente, seu proprio servico pode desacelerar ou ficar offline tambem. O Circuit Breaker decide "este servico esta com problemas agora, entao vou cortar a conexao temporariamente", evitando que as falhas se propaguem por todo o sistema.

 

Pontos-chave para o exame

"Mover mensagens falhas para uma fila separada" -- Dead Letter Queue

"Reduzir chamadas de API e evitar respostas vazias" -- Long Polling (WaitTimeSeconds)

"Retentar com intervalos progressivamente mais longos" -- Exponential Backoff

"Parar de chamar servico externo que falha" -- Padrao Circuit Breaker

"Streaming de dados em tempo real" -- Kinesis Data Streams

"Throughput dedicado por consumidor" -- Kinesis Enhanced Fan-out

"Ordem em que o SDK busca credenciais" -- Cadeia de credenciais

O timeout de visibilidade do SQS deve ser maior que o tempo de processamento

Voltar à lista do blog