<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Welton Batista</title>
    <description>The latest articles on DEV Community by Welton Batista (@welton_batista_dad5abfbe7).</description>
    <link>https://dev.to/welton_batista_dad5abfbe7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1835644%2F93c9cf8b-e477-4a08-926c-8bc16f14016f.png</url>
      <title>DEV Community: Welton Batista</title>
      <link>https://dev.to/welton_batista_dad5abfbe7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/welton_batista_dad5abfbe7"/>
    <language>en</language>
    <item>
      <title>Por que logs não são suficientes?</title>
      <dc:creator>Welton Batista</dc:creator>
      <pubDate>Thu, 16 Jan 2025 03:21:00 +0000</pubDate>
      <link>https://dev.to/welton_batista_dad5abfbe7/por-que-logs-nao-sao-suficientes-29l</link>
      <guid>https://dev.to/welton_batista_dad5abfbe7/por-que-logs-nao-sao-suficientes-29l</guid>
      <description>&lt;p&gt;Imagine que você é acionado bem cedo com uma ligação informando que o sistema da empresa parou de funcionar. Está chegando o momento em que a operação será iniciada, mais precisamente nos próximos 60 minutos. A pressão bate na porta, e as coisas precisam voltar ao normal o mais rápido possível. Enquanto isso, a equipe te envia um conjunto de logs que já foram coletados pelo pessoal do NOC. Esses logs contêm informações de pelo menos 10 sistemas diferentes. Aposte suas fichas: você acredita que seria capaz de identificar o problema nesse tempo? Pois esse é o problema de confiar apenas em logs!&lt;br&gt;
Antes de avançar, preciso deixar um aviso importante: &lt;strong&gt;logs são ferramentas essenciais&lt;/strong&gt; para depuração e monitoramento de sistemas. &lt;strong&gt;Dito isso, apenas logs podem não ser suficientes!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Limitações dos logs tradicionais&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Falta de contexto&lt;/strong&gt;&lt;br&gt;
Quando analisamos um log isoladamente, não temos uma visão geral do que aconteceu antes ou depois. Temos apenas um registro do ocorrido em um instante específico de um único sistema. Isso prejudica muito nossa percepção geral sobre o problema. Surgem questões como: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Será que esse erro está relacionado com o problema que estou investigando?&lt;/em&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Problemas de volume e escalabilidade&lt;/strong&gt;&lt;br&gt;
Em cenários de grande escala, onde há uma enorme variedade de sistemas com níveis de detalhamento elevados, como logs configurados em INFO ou DEBUG, a análise manual pode se tornar inviável. Isso também aumenta os custos de armazenamento e processamento, além de tornar a busca por informações relevantes em meio a uma grande quantidade de dados quase uma missão impossível. Ou, como dizem, é como tentar achar uma agulha no palheiro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Falta de estrutura e padronização&lt;/strong&gt;&lt;br&gt;
Um ponto crítico é a falta de padronização ao registrar logs não estruturados (apenas texto simples). Isso dificulta buscas e filtros. Essa falta de padronização está diretamente ligada à forma como cada desenvolvedor interpreta e julga o que é relevante registrar. Quanto mais equipes dentro da empresa, mais "silos" de informação são criados, o que acaba gerando distorções e inconsistências.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problemas de desempenho&lt;/strong&gt;&lt;br&gt;
O registro excessivo de logs pode impactar negativamente o desempenho da aplicação, especialmente se o armazenamento for síncrono. Embora possamos filtrar o excesso de logs, a contrapartida pode ser a perda de informações cruciais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
Embora os logs sejam fundamentais para sistemas de software, confiar exclusivamente neles não é suficiente para entender e diagnosticar problemas, especialmente em sistemas distribuídos. A falta de contexto, correlação e granularidade impede a resolução rápida de problemas, principalmente em arquiteturas modernas.&lt;br&gt;
Por isso, a combinação de logs com práticas como rastreamento distribuído e métricas é essencial para alcançar uma verdadeira observabilidade.&lt;br&gt;
Na próxima vez, vou escrever sobre como resolver essas limitações com a tríade &lt;strong&gt;Logs&lt;/strong&gt;, &lt;strong&gt;Métricas&lt;/strong&gt; e &lt;strong&gt;Traces&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>backend</category>
      <category>api</category>
      <category>software</category>
    </item>
    <item>
      <title>Resiliência em Sistemas: Explorando o Constant Work Pattern (CWP)</title>
      <dc:creator>Welton Batista</dc:creator>
      <pubDate>Thu, 25 Jul 2024 01:18:17 +0000</pubDate>
      <link>https://dev.to/welton_batista_dad5abfbe7/resiliencia-em-sistemas-explorando-o-constant-work-pattern-cwp-5593</link>
      <guid>https://dev.to/welton_batista_dad5abfbe7/resiliencia-em-sistemas-explorando-o-constant-work-pattern-cwp-5593</guid>
      <description>&lt;p&gt;Eu quero falar sobre um conceito chamado de &lt;strong&gt;Constant Work Pattern&lt;/strong&gt; (CWP) para isso vamos imagina um cenário fictício de uma aplicação no contexto de pagamento. Suponha que temos um sistema de pagamento com dois fluxos: o &lt;strong&gt;principal&lt;/strong&gt;, integrado com o parceiro Pagamentos Feliz S/A, e o &lt;strong&gt;alternativo&lt;/strong&gt;, ou &lt;strong&gt;fallback&lt;/strong&gt;, com o parceiro Pague Aqui LTDA. Enquanto o fluxo principal é mais detalhado e amplamente testado, o fluxo alternativo, embora funcional, é menos explorado e possui menor vivência.&lt;/p&gt;

&lt;p&gt;O princípio do CWP visa eliminar a diferença entre fluxos principais e alternativos, garantindo que ambos sejam acionados com a mesma frequência. Dessa forma, qualquer falha em um fluxo pode ser compensada pelo outro, aumentando a resiliência do sistema.&lt;/p&gt;

&lt;p&gt;Na prática, o CWP assegura uma exploração equilibrada de todos os fluxos, proporcionando um entendimento mais profundo sobre os diferentes cenários e nuances que podem surgir em produção. Isso resulta em uma abordagem mais robusta e resiliente, com impactos reduzidos em caso de problemas. Portanto, a adoção do Constant Work Pattern faz sentido do ponto de vista da resiliência, pois permite uma exploração abrangente dos fluxos principais e alternativos, ajudando a equipe a compreender melhor o sistema e identificar problemas potenciais com impacto minimizado.&lt;/p&gt;

&lt;p&gt;Failover Quebra o Princípio do Constant Work Pattern (CWP)?&lt;/p&gt;

&lt;p&gt;Para entender se o failover quebra o princípio do CWP, primeiro precisamos definir o que é failover. Trata-se de uma aplicação com duas ou mais instâncias idênticas, localizadas em servidores ou regiões diferentes, prontas para assumir o lugar da instância primária em caso de falha.&lt;/p&gt;

&lt;p&gt;Por exemplo, em nossa API de pagamentos, podemos ter o parceiro Pagamentos Feliz S/A acessível em um endereço como &lt;a href="https://pagamento.feliz.1/process" rel="noopener noreferrer"&gt;https://pagamento.feliz.1/process&lt;/a&gt;. Em caso de falha, a API pode alternar para um segundo endereço, como &lt;a href="https://pagamento.feliz.2/process" rel="noopener noreferrer"&gt;https://pagamento.feliz.2/process&lt;/a&gt;. A questão é: esse desenho de solução fere o princípio do CWP?&lt;/p&gt;

&lt;p&gt;Na minha visão, não! Isso ocorre porque, mesmo que a API de pagamentos mude de endereço, ela está chamando a mesma aplicação com o mesmo contrato e comportamento semântico. Não há quebra de contrato nem um fluxo alternativo de processamento. Portanto, o failover, que se refere à troca entre instâncias idênticas e funcionais, não viola o princípio do CWP, ao contrário do que ocorre com o fallback.&lt;/p&gt;

&lt;p&gt;Confira os seguintes links úteis sobre os temas abordados:&lt;/p&gt;

&lt;p&gt;Fallback e CWP na visão de um arquiteto da AWS: &lt;a href="https://aws.amazon.com/pt/builders-library/avoiding-fallback-in-distributed-systems/" rel="noopener noreferrer"&gt;https://aws.amazon.com/pt/builders-library/avoiding-fallback-in-distributed-systems/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Failover: &lt;a href="https://www.cloudflare.com/pt-br/learning/performance/what-is-server-failover/#:%7E:text=O%20failover%20de%20servidor%20%C3%A9,como%20um%20gerador%20de%20backup" rel="noopener noreferrer"&gt;https://www.cloudflare.com/pt-br/learning/performance/what-is-server-failover/#:~:text=O%20failover%20de%20servidor%20%C3%A9,como%20um%20gerador%20de%20backup&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>api</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
