Postagens

Lidando com Idempotência dentro dos Atores

Imagem
No post anterior, eu comecei a construção de uma aplicação que une os conceitos do Clean Architecture e o Actor Model. Entretanto, ela ainda não tratava vários aspectos essenciais para uma aplicação ser considerada resiliente. Agora nesse segundo artigo, eu vou mostrar uma proposta para tratar a idempotência na aplicação, de forma com que possamos lidar com cenários de reprocessamento de mensagens com segurança. O código resultante está disponível em  https://github.com/fabiogouw/OrleansBank/tree/3283d13eea84da34b8a7131c63cdc1ad8d186f63 O problema Um problema que meu exemplo no post anterior trazia era que, caso houvesse um erro no processamento do débito e no crédito da transferência bancária, simplesmente as contas ficariam com seu estado inconsistente. Por exemplo, a conta debitada teria o dinheiro retirado, mas a conta que era para ser creditada nunca receberia esse valor. Isso numa aplicação no mundo real é inconcebível. Uma possibilidade para corrigir esse comportamento aqui ser

Uma proposta de Clean Architecure com Modelo de Atores

Imagem
Hoje eu trago uma proposta de artigo que é um exercício onde juntei dois conceitos bem legais no desenvolvimento de software: a arquitetura no estilo Clean Architecture e o modelo de atores! Eu pensei em escrever esse artigo baseado num estudo de como utilizar esses dois assuntos que eu fiz e que está disponível no meu GitHub:  https://github.com/fabiogouw/OrleansBank   Minha proposta é que este seja o primeiro artigo de uma série onde eu vou evoluindo essa aplicação de exemplo, melhorando o código e resolvendo problemas que vão surgindo, sejam eles técnicos ou mesmo conceituais. Benefícios e premissas Antes de seguirmos com este exercício, faz sentido relembrarmos os benefícios e premissas do clean architecture e do modelo de atores. Também vale citar que não são conceitos que se excluem, são coisas bem diferentes! Por que Clean Architecture? Os modelos de arquitetura como o Clean Architecture, do Uncle Bob, o Hexagonal, do Alistair Cockburn ou o Onion do Jeffrey Palermo seguem todos

Criando um data source personalizado para o Apache Spark

Imagem
O Spark é uma ferramenta de processamento para grandes volumes de dados que permite o uso de diversas fontes de dados. É uma plataforma muito flexível, onde conseguimos ler e escrever arquivos em diversos formatos (CSV, JSON, Parquet, etc.), bancos de dados (MySQL, SQL Server, DynamoDB, etc.) e até ferramentas de streaming / mensageria (Kafka, etc.). Esses providers podem ser adicionados como bibliotecas externas ao Spark e, caso você não encontre nenhum que atenda os seus requisitos, o Spark permite a criação dos seus próprios data sources implementando a API DataSourceV2, introduzida na versão 2.3 do Spark. É com a ideia de exercitar esse conceito que eu resolvi criar um data source para escrever em uma fila da AWS (SQS). O código fonte pode ser encontrado em  https://github.com/fabiogouw/spark-aws-messaging e o componente foi disponibilizado como uma biblioteca pública no repositório central do Maven . Criando seu próprio data source O diagrama abaixo mostra as classes que foram ne

.NET com Apache Spark

Imagem
Olá, pessoal! Este final de semana tive a honra de participar de uma live no canal DX Lab para falar um pouco sobre Apache Spark e como podemos utilizar .NET com essa ferramenta. Sim, não é apenas de Scala e Python que vive essa plataforma de processamento distribuído que é o Spark! No vídeo, comentamos um pouco dos cenários de uso onde o Spark nos auxilia, um pouco da sua arquitetura e demonstramos dois exemplos de uso: um para processamento batch (ETL) e outro para processamento de fluxo contínuo de eventos (streaming). []'s

Impressões sobre a prova SAA-C02 (AWS Solutions Architect Associate)

Há algumas semanas atrás eu passei na prova de certificação de arquiteto da AWS, a SAA-C02, e como de costume eu gostaria de relatar aqui as impressões que eu tive com a prova pra ajudar um pouco quem está se preparando para tirar este exame. Meu objetivo aqui não é fazer uma análise profunda dos tópicos e das questões, mas sim passar alguns pontos que entendo serem importantes receber um reforço e atenção durante os estudos. Estrutura da Prova Como várias provas de certificação, o exame consiste em questões do tipo múltipla escolha, a maioria delas com apenas uma alternativa correta, mas outras com mais de uma opção para selecionar. Não existe separação de seções na prova, ou seja, não existem partes da prova que você não consiga voltar quando terminar de responder todas as questões e for começar as revisões. Tópicos Relacionados Todo o material requisitado para a prova pode ser consultado neste link  https://aws.amazon.com/pt/certification/certified-solutions-architect-associate/ . D

Os 8 Princípios Reativos de uma Arquitetura Distribuída

A construção de aplicações em ambiente cloud traz alguns desafios que precisam ser endereçados para o sucesso de um produto: estado inconsistente, rede muitas vezes não confiável, quedas de serviços, tudo isso são exemplos de problemas que o desenvolvedor de hoje deve se preocupar para conseguir tirar o máximo de proveito dos benefícios das plataformas de nuvem, como elasticidade, uso eficiente de recursos, custos adaptáveis, entre outros. Esses problemas não devem ser endereçados exclusivamente nos serviços de infraestrutura já disponibilizados pelas plataformas de cloud (containers, bancos de dados, balanceadores de carga, etc.), mas também é uma preocupação que deve ser tratada na arquitetura e na codificação das aplicações. Recentemente foi publicado um guia contendo alguns princípios e padrões que definem uma arquitetura reativa e complementa o que foi descrito no Manifesto Reativo . Esse material escrito por Jonas Bonér, criador do framework Akka, traz os princípios que habilitam

Microsoft Orleans: uma introdução ao modelo de atores

Imagem
Olá, pessoal! Na semana passada eu tive a oportunidade e honra de participar de uma live no Canal .NET  onde conversamos sobre o modelo de atores e o framework Orleans. O modelo de atores permite que sejam criadas aplicações distribuídas e com o conceito de stateful, onde o estado é armazenado diretamente nos servidores de aplicação. Com o auxílio do framework Orleans, podemos trazer elasticidade e resiliência para este modelo de arquitetura.