.NET
Cloud Native e Cloud Agnostic
para rodar .NET em qualquer Cloud
ou sem Cloud sempre de forma profissional!
Últimas publicações
Comece sempre com 2 instâncias
Subir uma única instância de qualquer componente, seja uma API, um Worker ou um Job, pode parecer suficiente em fases iniciais. No entanto, a verdadeira eficiência e capacidade de resposta de uma aplicação só são testadas quando operam em múltiplas instâncias. Iniciar com duas ou mais instâncias...
Cloud Native .NET com .NET Aspire – Primeiras Impressões
Um dos lançamentos do .NET Conf foi o .NET Aspire. Ele é um orquestrador de recursos (containers ou não), é um conjunto de building blocks para inicialização resiliente e observável dos principais recursos que sua aplicação pode depender. Diferente de tudo que já vimos, hoje começamos a desvendar...
Keyed DI services e Como o uso de tipos como identidade penaliza o design
Nos últimos anos vimos muitas implementações que usam Tipos (classes ou interfaces) como discriminador único em diversos contextos. Essa é uma decisão prejudicial que torna o design mais burocrático, eleva a complexidade desnecessariamente. Como veremos nesse post o resultado é que temos um código...
Uma nova arquitetura não é páreo para velhos hábitos — Parte 1 — Requisitos não funcionais são objetivos estratégicos de negócio
Então é hora de remodelar todo o projeto, partindo de uma nova arquitetura. A nova arquitetura tem sob seus ombros muita responsabilidade. Principalmente a de conduzir o projeto à dias melhores. A partir da nova arquitetura, gerentes, arquitetos, desenvolvedores, testers e clientes, todos serão...
RabbitMQ e .NET – Usar ou não usar bibliotecas?
Nesse post detalho meus argumentos para que você não use nenhuma abstração e use o cliente nativo do RabbitMQ feito para .NET. Contexto RabbitMQ é o Message Broker mais usado do mercado, uma solução open source e amplamente difundida. O projeto adota AMQP 0.9.X enquanto Azure Service Bus, Apache...
Filas exclusivas e autodelete
Nem sempre as demandas exigem filas que durem aos restarts da sua aplicação. Há casos de uso significativos em que você quer que a fila nasça com a instância da sua aplicação e morra junto com ela. Embora seja um conceito trivial, em mais de 10 anos usando RabbitMQ, essa foi a primeira vez que...
Dev ou Ops, de quem é a responsabilidade?
Muitas e muitas vezes me envolvi em discussões sobre responsabilidades sobre serviços de suporte e tudo que está ao redor das nossas aplicações, como Proxy Reverso, API Gateway, Cache Server, Mensageria, Vault, Plataforma e por aí vai. Afinal, quem é o Owner dessas tecnologias e ferramentas? Será...
Quais dados, logs estruturados precisam ter?
Eu estava escrevendo sobre logs estruturados, em especial sobre o Enterprise Application Log, e resolvi quebrar meus argumentos em frações menores para poder isolar as ideias. Aqui hoje quero falar sobre o que um bom log deve ter. Nos primeiros anos de 2010, a evolução na gestão de logs começou a...
Como descrever um roadmap de arquitetura de forma clara
Em um mundo cada vez mais voltado para a tecnologia, a arquitetura de soluções desempenha um papel crucial na orientação de como as organizações desenvolvem e implementam suas estratégias digitais. No entanto, a maneira como apresentamos e comunicamos essas arquiteturas pode muitas vezes ser um...
GPT para Desenvolvedores .NET
Nos últimos meses venho experimentando o ChatGPT e a API dos modelos GPT 3.5-turbo e GPT 4.0. Como sempre esse assunto foi compartilhado na mentoria, e naturalmente consigo encontrar dúvidas que não me pareciam óbvias. Esse é um guia que pode te ajudar a pensar nas possibilidades e também permite...
10 anos com RabbitMQ — O que aprendi sobre – parte 1
Uma das ferramentas que mudou minha carreira foi sem dúvidas o RabbitMQ. RabbitMQ, embora tenha Coelho no nome, se comporta mais como um cavalo selvagem e arisco. Mensageria, Aplicações assíncronas e Aplicações distribuídas são mais complexas, mas dão um poder que poucos no mercado conseguem...
Entendendo o poder do WASM + WASI
Quando se fala em WebAssembly no universo .NET, é comum pensar imediatamente no Blazor, não é mesmo? No entanto, para mim, a imagem que surge é a revolução que o WebAssembly no backend pode desencadear. Imagina mudar completamente a maneira como construímos, encapsulamos, hospedamos e gerenciamos...
Projetos Open Source
projetos ativos e projetos antigos disponíveis para estudo
Nenhum resultado encontrado
A página que você solicitou não foi encontrada. Tente refinar sua pesquisa, ou use a navegação acima para localizar a postagem.
Entender | Analisar | Projetar | Desenvolver | Implantar | Manter
A segurança que você busca não está em um tutorialPara entender uma tecnologia é importante entender o que influenciou sua criação, o que ela faz de fato, como ela faz. Para que então se sinta seguro e confiante a respeito das decisões que está prestes a tomar.
De um lado precisamos compreender o que está sendo feito por baixo dos panos para descobrir como extrair o máximo de uma tecnologia ou, ao menos, não atrapalhar o bom funcionamento dela.
O Cloud Native .NET é uma jornada de descoberta sobre tecnologias e patterns que fazem parte da maioria dos softwares que usamos, que somos usuários e que suportam e toleram altas cargas de trabalho, de forma eficaz, eficiente e sustentável.
É primeiro entendendo o que eles fazem, que podemos descobrir oportunidades e evoluir no que fazemos…
Conheça nosso Podcast
DevShow PodcastEm 2019 resolvemos criar um podcast, o DevShow Podcast, desde lá são mais de 40 episódios com muito assunto legal, sempre com essa pegada pessoal, falando coisas sérias, mas sem o menor compromisso com a formalidade.
.NET
RabbitMQ, .NET, OpenTelemetry, Distributed Tracing, Jaeger, Prometheus e Grafana
Parece sopa de letrinhas aleatórias né? Mas isso fez algum sentido para você, e achou legal, deixa eu te contar o que fizemos aqui do lado de dentro.
ler mais…NHibernate em 2022 – Será que faz sentido?
Se você já me viu falar de persistência, você talvez já saiba do que eu estou falando, mas talvez não entenda os argumentos.
ler mais…Enterprise Application Log v4
Hoje chegamos à versão 4 do nosso stack de observabilidade. Contamos com o upgrade para a versão 7.13.0 de todos os recursos da Elastic e a adição de novos componentes entre eles o Application Performance Monitoring (APM).
ler mais…Hub de Eventos
Na quinta-feira, dia 18/Março/2021 vamos falar do Hub de eventos que produzi para atender uma demanda particular. Eu não precisava de extrema performance e redundância, mas e se precisasse?
ler mais…Publish com VS em produção: Impactos e Consequências
A Microsoft sem sombra de dúvidas é uma empresa com um foco incrível no desenvolvedor. Diariamente recebemos algum tipo de update, feature, novo produto ou projeto para ajudar no nosso dia-a-dia.
ler mais…Arquitetura
RabbitMQ Clustering #4 | Como as mensagens são persistidas
RabbitMQ é um excelente aliado na hora de entregar alta disponibilidade, resiliência, confiabilidade, eficiência e escalabilidade. Mas não basta subir uma instância, e sair usando de qualquer forma.
Um dos cenários mais comuns que já esbarrei em consultorias ou na comunidade, é a falta de atenção por total ignorância, produzindo como efeito, risco.
Na ansia de pegar um exemplo e tentar rodar com base no exemplo, ignoram-se os fundamentos, ignoram-se as boas prática e o entendimento de como RabbitMQ funciona e como consequência, o que está sendo implantado vai falhar, vai perder mensagens.
ler mais…RabbitMQ Clustering #3 | RabbitMQ consome muita memória e disco?
Será que o RabbitMQ consome demais?
ler mais…RabbitMQ Clustering #2 | As 2 métricas vitais para o RabbitMQ
Se você usa RabbitMQ ou pretende usar, é importante saber o que é um ofensor para seu deployment RabbitMQ. Aquilo que fará seu servidor RabbitMQ parar.
Aqui apresento 2 métricas que ajudam a prever e prevenir quedas.
ler mais…RabbitMQ Clustering #1
Você já deve ter visto que o RabbitMQ é usado para entregar resiliência, disponibilidade e confiabilidade.
Eu já mostrei isso algumas vezes nos últimos anos.
Talvez já tenha descoberto como pode reduzir a pressão de um volume intenso de trabalho sob seus sistemas, sua infra e seu banco, fazendo com que seja possível tolerar cargas de trabalho vezes maiores do que de fato seu parque consegue tolerar, sem precisar escalar seus sistemas.
Mas afinal, e se o RabbitMQ falhar? O que acontece? Como lidar com isso caso aconteça? Como contornar?
Essa série de posts RabbitMQ Clustering – Publish & Consumer Recovery aborda a criação de clusters, seus principais comportamentos e como aplicações .NET podem se recuperar de falhas com pouco ou nenhum esforço.
Usamos Docker e Docker Compose em exemplos de código que são feitos com C# e .NET 7. Divirta-se.
ler mais…Resolvendo caso de cochilos de 20s do Kong API gateway
Um dos problemas que percebi com o Kong no docker é que em alguns momentos, principalmente na primeira requisição a ele, encontrei um delay de pontuais 20s. Como estava também usando-o para cache, suspeitei do plugin e estava errado.
A intenção do post é evitar que você também passe por isso.
ler mais…Containers
Publish com VS em produção: Impactos e Consequências
A Microsoft sem sombra de dúvidas é uma empresa com um foco incrível no desenvolvedor. Diariamente recebemos algum tipo de update, feature, novo produto ou projeto para ajudar no nosso dia-a-dia.
ler mais…Kubernetes em C#, seria possível?
Você já pensou em criar seu próprio Kubernetes em C#? Hoje eu vou mostrar como você pode dar os primeiros passos nessa direção.
ler mais…Kubernetes sem Docker! É o fim do docker?
Ontem a comunidade parou diante da notícia de que o Kubernetes não daria mais suporte ao Docker como Container Runtime. Mas afinal, qual o impacto real dessa decisão na sua vida? Como isso influencia seu dia-a-dia?
ler mais…Enterprise Application Log + Access Log NGINX
Embora esse tutorial trate detalhadamente de configurações do NGINX e LogStash, no lugar do NGINX você pode usar qualquer aplicação que produza log em textos e que seja possível manipular o formato dos logs.
ler mais…Azure Functions + Containers (Parte 2/2)
No post passado o foco estava nos Agnostic Services e no uso de containers. Agora é hora de olharmos outra questão mais braçal. Rodar Azure Functions 3 com Containers, uma tarefa que deveria ser trivial, mas não é.
Nossa jornada começa com o tutorial Criar uma função no Linux usando um contêiner personalizado, onde no step “Configurar o ambiente local” temos o passo de instalação do “O Azure Functions Core Tools versão 2.7.1846 ou uma versão 2.x posterior.”, que nos redireciona para o post “Trabalhar com o Azure Functions Core Tools“.
Esse step nos dá 2 opções, Azure Functions 2 ou 3. Para instalar a versão 3, local, precisamos executar:
npm install -g azure-functions-core-tools@3
A instalação ocorre perfeitamente.
Mas… ao executar o passo para a criação do projeto, que encontramos no link Criar uma função no Linux usando um contêiner personalizado (primeiro da lista acima)
func init LocalFunctionsProject --worker-runtime dotnet --docker
Somos surpreendidos com um erro.
$ func init LocalFunctionsProject --worker-runtime dotnet --docker
events.js:292
throw er; // Unhandled 'error' event
^
Error: spawn C:UsersluizcAppDataRoamingnpmnode_modulesazure-functions-core-toolsbin/func ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:468:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:274:12)
at onErrorNT (internal/child_process.js:468:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: -4058,
code: 'ENOENT',
syscall: 'spawn C:\Users\luizc\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin/func',
path: 'C:\Users\luizc\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin/func',
spawnargs: [
'init',
'LocalFunctionsProject',
'--worker-runtime',
'dotnet',
'--docker'
]
}
A solução, está nesse comentário do GitHub.
- Go to the installed location.
C:Users[USERNAME]AppDataRoamingnpmnode_modulesazure-functions-core-tools
in the example above. - Run
npm install [email protected]
- Run
npm .libinstall.js
node .libinstall.js
from that directory
Autor: Ankit Kumar
Uma vez executado o procedimento, deixamos de ter um problema na criação do projeto.
$ func init LocalFunctionsProject --worker-runtime dotnet --docker
Writing C:_devdocker-definitivoAzFuncLocalFunctionsProject.vscodeextensions.json
Writing Dockerfile
Writing .dockerignore
Daqui pra frente é só seguir o tutorial, instalando o plugin do Visual Studio Code (ms-azuretools.vscode-azurefunctions)
E seguir com debug e teste local.
Aliás, você deu uma olhadinha no Dockerfile?
É peculiar, mas vou deixar para você dar uma olhada e comentar nesse post.
Quer saber mais sobre Azure Functions?
Te indico o material do Renato Groffe no Medium.
Se precisa de um treinamento sobre Serverless + Azure Functions, o Renato, o Milton e o Ericson encabeçam o Azure na Prática que pode te ajudar nessa direção.
Aliás, um passarinho me contou que vai rolar o Azure na Prática #13 – Serverless + Azure Functions #03, e está em pré-venda. Vale lembrar que em pré-venda, são R$ 400 reais de desconto.
Azure na Prática – Serverless + Azure Functions
Vai rolar no dia 29/08/2020 (sábado), com foco em Serverless + Azure Functions e englobando o uso de tecnologias como:
Azure Logic Apps, RabbitMQ, Apache Kafka, SQL Server, MongoDB, Redis, Application Insights, Azure Cosmos DB e GitHub Actions.
Acesse então o link a seguir para efetuar sua inscrição com o desconto especial de pré-venda (apenas R$ 200,00).
Sim, é isso mesmo! De R$ 600 por R$ 200!!!!
Quer saber mais sobre Docker & .NET + Open Source?
No mais, se quiser saber mais sobre Docker e .NET, principalmente Open Source e .NET vem comigo que também tenho muita coisa legal!
Mensageria
Event Driven Or Not? Quando usar Event Driven e quando usar só usar mensageria
Sempre que somos tocados por algum tipo de desenho ou arquitetura que demonstra significativo ganho em um determinado cenário, tendemos a tentar reaproveitar esse mesmo desenho mais pela memória do sucesso passado, do que pela necessidade efetivamente. Aqui está uma casca de banana, e é sobre isso que vamos discutir hoje.
ler mais…RPC sob AMQP seduz enquanto mata… sua implantação de mensageria
Se você viu meu último post e se animou por acreditar que usar RPC sob AMQP seja uma ideia incrível, calma que lá vem um balde de água fria!
Com toda certeza eu não vou falar bem da abordagem! E se você resolveu que não vai ler, e ainda vai adotar RPC sob AMQP assim mesmo. Esse post é o que os teus colegas trarão para a discussão no trabalho! 🙂
ler mais…Messaging Patterns: RPC – Remote Procedure Call
RPC pode parecer sofisticado demais, mas que tal Request/Response? Agora “SOA” familiar? Nem só de total assincronismo vive o mundo da mensageria, há momentos em que precisamos de uma resposta. RPC é a forma mais prática de adotar mensageria, mas é preciso entender as consequências dessa abordagem.
ler mais…Resiliência: Polly vs RabbitMQ
Fato que eu adoro essas comparações inusitadas! A intenção desse post é poder trazer de forma consistente uma visão que ajude a trazer clareza, e me permita também referenciar um conteúdo mais estruturado em vez de ter de construir toda uma argumentação em locais que propositalmente não possuem esse espaço para isso.
Nos últimos meses falando de RabbitMQ eu escutei algumas falácias a respeito do Polly e vamos desmistificar o assunto. Bora falar de resiliência de forma séria.
ler mais…RabbitMQ Streams com TypeScript e NodeJS
Em Julho o RabbitMQ ganhou suporte a Streams. De um lado aproxima o RabbitMQ do Kafka já que possui a mesma estrutura de dados, mas por outra ótica se isola completamente sendo provavelmente o único produto da categoria com suporte a ambos. Mas você sabia que a diferença entre Streams e Queues são enormes? Ao ponto da discussão RabbitMQ vs Kafka sequer fazer muito sentido?
Hoje entrego mais um projeto de exemplo para os alunos do curso de RabbitMQ, e dessa vez é uma demo 2 em 1. Além de apresentar RabbitMQ com NodeJS, aproveitei para entregar o suporte a Streams e demonstrar as demandas específicas para lidar com o consumo dessa estrutura, visando mostrar uma forma uniforme de trabalhar com queues e streams.
ler mais…Conteúdo e Posicionamento
.NET + Cloud Native + Cloud Agnostic
.NET | DevOps | Microservices | Containers | Continuous Delivery
.NET muito além do .NET
O mínimo de infra que todo dev e/ou arquiteto deveria saber
Aplicações distribuídas e comunicação entre serviços (RabbitMQ / gRPC)
Containers, Docker e Kubernetes
RabbitMQ e Mensageria e comunicação assíncrona entre aplicações e serviços
Arquitetura de Software e Arquitetura de Solução com foco no melhor aproveitamento em projetos .NET
Nossos números
Desde 2002 trabalhando com desenvolvimento de software
Desde 2002 ajudando outros devs
Desde 2010 trabalhando exclusivamente como arquiteto
Contas atingidas no telegram/facebook
Alunos
Microsoft MVP
Conteúdo Gratuito
Tudo que está aqui no gaGO.io é conteúdo gratuito, feito para ajudar desenvolvedores dos mais variados níveis.
Cursos
Tenho também alguns programas de acompanhamento. Esses programas tem a função de ajudar desenvolvedores em áreas específicas ou de forma mais abrangente na jornada do arquiteto.