.NET
Cloud Native e Cloud Agnostic
para rodar .NET em qualquer Cloud
ou sem Cloud sempre de forma profissional!
Últimas publicações
Aqui estão os últimos 12 posts de mais de 500…
Minimal API’s e Agnostic Services – Mais reaproveitamento e tolerância à mudanças
As Minimal API's são uma forma de implementar APIs em .NET, introduzida pela Microsoft no ASP.NET Core 6. Essas API's são projetadas para serem simples, leves e fáceis de usar, com uma sintaxe concisa que permite criar endpoints de API com menos código. Hoje quero chamar a atenção para o poder das...
MasterClass – Como um desenvolvedor .NET pode se destacar no mercado em 2023 apesar da crise
Hoje vou abordar o que mudou no mercado e mostrar um tipo de skill, um tipo de profissional que continua escasso e possui vagas aqui no Brasil ou fora dele. Aprenda a construir um perfil de sucesso resiliente às volatilidades do mercado de tecnologia. O que você verá nesta Masterclass Situação...
RabbitMQ Clustering #6 | Formas de Configurar um cluster
Agora vou te dar algumas estratégias diferentes para a construção do Cluster. Uma estática, outra baseada em peer discovery. Aí podemos usar K8S, Etcd, Consul ou o próprio EC2. No post passado No post passado eu falei sobre a quantidade ideal de nós de um cluster. Agora é hora de falar sobre quais...
RabbitMQ Clustering #5 | Projetando para disponibilidade
Se você sabe que precisa de um cluster, então é hora de pensar em como desenhar esse projeto. No post 2 dessa série(As 2 métricas vitais para o RabbitMQ), abordamos as métricas que fazem o RabbitMQ cair. Já no post 3 (RabbitMQ consome muita memória e disco?) falamos sobre o consumo de recursos,...
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...
RabbitMQ Clustering #3 | RabbitMQ consome muita memória e disco?
Será que o RabbitMQ consome demais? Se você pensava que ele consumia muita memória, está enganado. Ele só deixa em memória as mensagens que ele pretende entregar mais cedo para os consumidores. Então depende diretamente do throughput. Ele vai tentar balancear para não consumir muito, mas se o...
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. Acredito que a primeira dúvida que paire sob sua cabeça seja: É comum RabbitMQ...
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...
Cloud Native – Pela perspectiva das big techs
Ainda existe uma aura em torno do termo, mas com uma mensagem clara. Não basta só DevOps, não basta só Microsserviço, não basta só Nuvem. Cada uma dessas camadas de complexidade são complementares, e tem como objetivo aumentar a eficiência e eficácia de soluções projetadas para a nuvem. Aplicações...
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. Aqui...
RabbitMQ – Trabalha em memória?
Já não é tão comum, mas ainda existe quem diga que RabbitMQ é rápido porque não tem banco de dados. Essa é uma MEN-TI-RA!! Ele entrega resiliência e performance, por outros motivos. É sobre isso que vamos falar hoje! Essa semana recebi uma mensagem que dizia algo aproximadamente assim: Gago, como...
Todo sistema tem jeito? É possível recuperar qualquer projeto?
Muitas vezes nos perguntamos se é ou não possível arrumar a casa, ou se devemos demolir e criar novamente tudo do zero, ou pelo menos de algo próximo disso. Hoje quero falar sobre algumas experiências que tive e falar sobre o framework que usei para tornar algumas experiências de recuperação de...
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…
Conteúdo
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. Acredito que a primeira dúvida que paire sob sua cabeça seja: É comum RabbitMQ...
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...
Cloud Native – Pela perspectiva das big techs
Ainda existe uma aura em torno do termo, mas com uma mensagem clara. Não basta só DevOps, não basta só Microsserviço, não basta só Nuvem. Cada uma dessas camadas de complexidade são complementares, e tem como objetivo aumentar a eficiência e eficácia de soluções projetadas para a nuvem. Aplicações...
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. Aqui...
RabbitMQ – Trabalha em memória?
Já não é tão comum, mas ainda existe quem diga que RabbitMQ é rápido porque não tem banco de dados. Essa é uma MEN-TI-RA!! Ele entrega resiliência e performance, por outros motivos. É sobre isso que vamos falar hoje! Essa semana recebi uma mensagem que dizia algo aproximadamente assim: Gago, como...
Todo sistema tem jeito? É possível recuperar qualquer projeto?
Muitas vezes nos perguntamos se é ou não possível arrumar a casa, ou se devemos demolir e criar novamente tudo do zero, ou pelo menos de algo próximo disso. Hoje quero falar sobre algumas experiências que tive e falar sobre o framework que usei para tornar algumas experiências de recuperação de...
Rancher Longhorn no Kubernetes 1.25
Recém lançado em agosto, Kubernetes 1.25 trouxe desafios para o longhorn. Há pouco mais de 10 dias foi liberada na master do projeto a versão que permite usá-lo no Kubernetes 1.25. Mas afinal, o que é Longhorn? Se você usa AKS, EKS, GKE, ou Microk8s e instalações das mais variadas de Kubernetes,...
Depende!
Sempre que uma pergunta técnica ou sobre system design, ou até mesmo arquitetura é respondida com "Depende!", há quem se questione se realmente estamos trabalhando com exatas. Afinal, se estamos no mundo das exatas, porque tudo depende? O que de fato faz os melhores profissionais responderem essas...
Chiseled Ubuntu Images – O mais próximo que teremos de Imagens Distroless para .NET chega junto com o anúncio do .NET 6 no Ubuntu 22.04
No dia 16 de agosto de 2022, a Microsoft anunciou o resultado de sua parceria com a Canonical. Os frutos vão desde o .NET 6 instalável via APT, mas passam também pelas Chiseled Ubuntu Images. Imagens docker super enxutas. Claro que o anúncio não poderia deixar de falar sobre as novas imagens...
Sobre Ports and Adapters, Agnostic Services e modelagem de Serviços
Se você busca flexibilidade e alguma versatilidade para escolher entre estratégias de deployment e distribuição de aplicações a qualquer momento do ciclo de vida do projeto. Desde o dia 1 até a véspera de uma implantação. Ou se você não está certo, mas quer poder trocar uma chamada HTTP por uma...
Quiet Quiting – Problema ou Oportunidade?
Se você acredita que é responsável pelos seus próprios resultados e acredita que pode crescer pelo trabalho duro, disciplina e estudo, esse post é para você. Se você está disposto a sacrificar o hoje por um amanhã melhor, e acredita que tem de ralar para conseguir suas coisas, esse post é para...
Cloud Native | 4 – DevOps
Ao lado de Containers, Microsserviços e Entrega Contínua, DevOps está no alicerce do Cloud Native. Hoje desmistificaremos DevOps e espero acabar de uma vez por toda com essa ideia de que é coisa de infra. Antes de começarmos, preciso recorrer à sua própria memória recente. Preciso que você faça...
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 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.
ler mais…
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 que você dê seus primeiros passos.
ler mais…
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 sistemas, criando uma interoperabilidade inédita.
Não me refiro ao WebAssembly em navegadores. Estou falando sobre o WebAssembly no SERVIDOR, rodando jobs, Api’s, Workers, servidores de jogos, servidores de mensageria, qualquer coisa que seja backend, distante do browser. Sem nenhuma relação com blazor ou com front-end.
E o que estou prestes a revelar não tem qualquer relação com o Blazor!
Estamos falando de algo tão surpreendente quanto poderoso!
Sei que muitos ainda estão fascinados com o Blazor e com o WebAssembly no browser.
ler mais…
Adicionando ChatGPT na sua aplicação
A primeira vez que ouvi falar em chatGPT fiquei empolgado com o avanço das IA’s Generativas, mas nem passou pela minha cabeça que já fosse possível usar em uma aplicação real.
Ao encontrar no ChatGPT inputs e outputs em texto livre, que hora traz texto normal, hora markdown, hora outros formatos, sem a capacidade de forçar o tipo de dado, via parâmetros, me pareceu uma realidade distante.
Uma vez que as API’s foram liberadas, não conseguia sequer pensar em uma utilização que não fosse simplória.
Hoje eu vou mostrar todo o caminho até conseguir produzir
insights,
predições,
recomendações
e expectativas
usando ChatGPT de forma estruturada produzindo JSON como output.
Embora esse projeto de referência seja feito em C# com .NET, você consegue replica em qualquer lugar, com qualquer linguagem/plataforma que consiga fazer uma requisição para um endpoint HTTP.
ler mais…
Entendendo CORS
CORS é um daqueles assuntos que atrapalha de iniciante a veteranos.
Considerando que toda nova aplicação poderá sofrer com erros de CORS e muitas vezes leva algum tempo para resolver, ou pior, muitas vezes resolvemos da forma errada, esse post vem para ajudar nesse assunto.
Hoje abordaremos tudo que você precisa saber CORS, para economizar semanas da sua vida.
Faça bom proveito desse tempo!
ler mais…Arquitetura
RabbitMQ Clustering #6 | Formas de Configurar um cluster
Agora vou te dar algumas estratégias diferentes para a construção do Cluster. Uma estática, outra baseada em peer discovery. Aí podemos usar K8S, Etcd, Consul ou o próprio EC2.
ler mais…
RabbitMQ Clustering #5 | Projetando para disponibilidade
Se você sabe que precisa de um cluster, então é hora de pensar em como desenhar esse projeto.
ler mais…
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…Containers
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-toolsin the example above. - Run
npm install [email protected] - Run
npm .libinstall.jsnode .libinstall.jsfrom 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!
Azure Functions + Containers (Parte 1/2)
Certa vez rolou uma discussão sobre Function as a Service (FaaS) e Containers questionando se um suplantaria o outro, ou se seríamos capazes de ignorar um em função do outro. Minha resposta curta e objetiva é: Não! Functions e Containers se complementam.
Sempre que olharmos para Function as a Service, o Lock-in bate à sua porta.
ler mais…
Dockerfiles: Entrypoint vs CMD?
Você viu Entrypoint e CMD em algum lugar, seja em um dockerfile ou em um docker run, mas não faz a ideia do que seja?
Vem comigo, é mais simples do que você imagina.
ler mais…
Docker no WSL² – Walkthrough
No post anterior eu contei um pouco da história do projeto, mas agora é hora de olharmos para ele de fato. Que tal um passeio no parque com o WSL2?
ler mais…Mensageria
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…
Mensageria já existia quando Jesus nasceu…
Até hoje eu consigo me surpreender com quão “novo” é o conceito de filas e troca de mensagens assíncronas para programadores. Hoje eu vou mostrar como esse conceito já está presente na nossa sociedade desde antes do nascimento de Jesus Cristo e você não percebeu ainda.
ler mais…
EDA – Event Driven Architecture: Não confunda eventos com comandos
A diferenciação entre eventos e comandos foi um tema discutido dentro do grupo de arquitetura do Docker Definitivo, e como um tema que gera confusão e ceticismo em alguns aspectos, é hora da gente sair da discussão sobre a parte visível desse iceberg e aprofundarmos na execução e nos cuidados a respeito do tamanho de mensagens e principalmente na diferenciação entre evento e comando.
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.


















