Muitas empresas deixam de adotar serviços de nuvem pública, independente do vendor, em função do aparente custo elevado. Entretanto, quase sempre, a causa é o desconhecimento de alternativas economicamente inteligentes de utilização. Quando contratamos infraestrutura (IaaS), por exemplo, o aspecto chave é o entendimento dos padrões de consumo, tanto para o dimensionamento das máquinas virtuais quanto […]
O primeiro microsserviço, em um processo de transformação de um monólito, não precisa (nem deve) ser perfeito!
[tweet]A transformação de um sistema monolítico, potencialmente legado, para microsserviços não é atividade simples. Buscar uma “primeira implementação perfeita” poderá atrapalhar mais do que ajudar. Além disso, é grande o risco de paralisia por análise.[/tweet] [tweet]Uma vez que se constate que a adoção de microsserviços se justifica, quanto antes houver algo que se assemelhe a […]
Proxy HTTP: um ótimo “primeiro passo” na transformação de sistemas monolíticos em microsserviços
Um dos grandes desafios para migração de sistemas monolíticos para arquiteturas baseadas em microsserviços é o uso ampliado dos recursos de rede. Por isso, em uma migração gradual, um ótimo primeiro passo é assegurar que a infraestrutura utilizada pela organização não será um empecilho. Nesse contexto, quando um sistema monolítico expõe funcionalidades através de APIs […]
Benefícios, técnicos e para o negócio, da desvinculação dos processos de “Deploy” e “Release”
Frequentemente, deploys precisam ser “desfeitos” em função de instabilidades causadas por features com problemas. Essas instabilidades são causadas, muitas vezes, por erros de implementação. Outras vezes, por condições inesperadas no ambiente produtivo que está, por alguma razão, incompatível com os ambientes de desenvolvimento e de homologação. Quando um problema acontece em produção, é comum que […]
Clean Code
Clean Code, de Robert C. Martin, com tradução em português, é citado frequentemente como referência obrigatória para quem tem interesse em codificar melhor. Neste livro, “Uncle Bob”, que tem mais de 50 anos de experiência em desenvolvimento, elabora diversas regras que, seguidas, resultam em código coeso, limpo e manutenível. You should name a variable using […]
Single-tenant, multi-tenant ou híbrido: Que estratégia adotar para aplicações que atendem diversos clientes?
Projetar aplicações para que múltiplos clientes, normalmente de diferentes empresas, as acessem de forma segura e isolada, porém com uso ótimo de recursos não é problema recente. Desde os mainframes existe a demanda por compartilhar recursos computacionais para diferentes grupos de usuários. Porém, com a popularização de modelos de negócios SaaS as arquiteturas para multitenancy ganham […]
Projetando e identificando contextos *bem* delimitados
Em DDD, delimitar contextos não é atividade simples. A razão para isso é que as organizações que vão usar os sistemas não tem estruturas simples e, geralmente, há uma relação forte entre a estrutura organizacional e os contextos delimitados. Conway ensina que a estrutura de comunicação da organização que está desenvolvendo um sistema determina a […]
Como arrays são representados em Assembly e o que muda na passagem de parâmetros em arquiteturas X64
Um array é um conjunto de valores posicionados na memória de maneira sequencial. Percorrer os elementos de um array implica, pura e simplesmente, em acessar essas posições memória. Esse conceito, aliás, é bem explícito em C++. #include <iostream> using namespace std; extern “C” int compute_sum_asm(const int* values, const int count); int compute_sum(const int* values, const […]
The Mythical Man-Month
The Mythical Man-Month, de Frederick P Brooks Jr, com boa tradução para o Português, é um dos clássicos da literatura da engenharia de software. Teve edições em 1975, 1982 e 1995. Neste livro, Brooks conclui que adicionar mais programadores a um projeto de software atrasado aumenta as chances de o atrasar ainda mais. Adding manpower […]
Não exponha objetos do domínio em uma “API pública”
Recentemente, Oren Eini (Ayende) publicou um post analisando o código de parte de uma API que continha uma falha grave de design. Nesse post, reproduzimos algumas das ideias que ele compartilhou e adicionamos algumas considerações que consideramos relevantes. [Route(“/public/api/v1/tickets/{org}”)] public async Task<IActionResult> Get(string org, int skip = 0) { var tickets = await session.Query<Domain.SupportTicket>() .Where(x=>x.Organization […]