O que a Fórmula 1 e todo software tem em comum?
Tags: telemetria, formula1, softwareengineering, observability
Published: 2023-09-15 00:55:14

Se você não conhece, **Fórmula 1** é a categoria mais relevante hoje quando pensamos em automobilismo e mesmo que você não goste desse esporte, saiba que ela tem um ponto em comum com a maior parte dos nossos softwares: **telemetria**. 

Mesmo que você não goste do esporte, muito das tecnologias que hoje temos disponíveis em nossos carros, como o _freio ABS_, vieram graças ao desafio tecnológico imposto nessa competição onde cada milissegundo ganho em relação ao outro pode te colocar mais perto da vitória. 

Para nós do mundo de software carros em alta velocidade podem parecer um mundo distante reservado para os engenheiros mecânicos, mas na verdade nós temos um trabalho vital nessa indústria de alta performance, em especial no âmbito da telemetria.

## Índice

- [O que é telemetria?](#ancora1)
- [Como a telemetria é aplicada no dia a dia?](#ancora2)
- [Mas o que isso tem a ver com as minhas aplicações?](#ancora3)
- [Como funciona dentro do software?](#ancora4)
- [Em suma, temos telemetria](#ancora5)

<a id="ancora1"/>
### O que é telemetria?


Seguindo o dicionário podemos definir telemetria como processo ou técnica de obtenção, processamento e transmissão de dados a longa distância. Graças ao avanço da **Internet das Coisas** _(IoT)_ e das redes móveis a transmissão e obtenção de dados vem se tornado cada vez mais fácil e constante no nosso cotidiano. Não só isso, os aparelhos computacionais vêm se tornando cada vez mais invisíveis no nosso dia a dia e diminuindo a barreira entre o mundo digital e o físico, tal como imaginou **Mark Weiser** em seu artigo [“The computer for the 21st Century”](https://www.ics.uci.edu/~djp3/classes/2012_09_INF241/papers/Weiser-Computer21Century-SciAm.pdf). 

Não só em veículos, a telemetria hoje está presente em tudo, em usinas de energia, aparelhos médicos, dispositivos vestíveis _(wearables)_ ou até mesmo nos nossos celulares, todo dado hoje é passível de ser extraído e processado.

<a id="ancora2"/>
### Como a telemetria é aplicada no dia a dia?


Voltando ao nosso exemplo da **Fórmula 1**, se você nunca viu um carro aqui está um exemplo.


![Red bull racing carro](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lev4e64jlvkskspmgd06.jpg)
_Fonte: Oracle Red Bull Racing_

A princípio pode parecer apenas uma “nave”, mas acredite, esse carro tem sensor para tudo e quando eu digo tudo é tudo mesmo, pressão externa do pneu, pressão interna do pneu, combustível, pressão aerodinâmica em cada parte do carro, velocidade absoluta e relativa, GPS, temperatura interna e externa, enfim, existe uma diversidade de dados que podem ser obtidas de um “simples” carro e que são todas transmitidas por sensores conectados a redes móveis _(5G)_ e processadas na nuvem dando luz a uma gama de dados que são analisados pelos engenheiros e estrategistas das equipes praticamente em tempo real, dando-os mais munição para tomarem as melhores decisões. 

Por exemplo, um engenheiro ao ver que o carro está tendo mais pressão aerodinâmica do que o esperado pode pedir ao piloto mude a configuração do carro no próprio volante fazendo com que ganhe mais vantagem em relação ao adversário, isso só é possível graças a telemetria.

<a id="ancora3"/>
### Mas o que isso tem a ver com as minhas aplicações?

Como disse anteriormente hoje em dia praticamente tudo produz dados e é passível de ser extraído e processado, basta você extrair as métricas certas. Com nossos softwares não é diferente, seja um simples CRUD em **NodeJS** ou um website **Angular**, tudo produz dados. 

Você pode obter por exemplo qual o tempo de resposta médio da sua aplicação em NodeJS, quanto de memória e processamento de CPU ela está gastando, quantos requests por segundo ela está recebendo? 

Assim como no front você pode ter métricas de quantos usuários estão baixando meus arquivos estáticos? Quais os pontos eles mais clicam na tela? Quanto tempo eles demoram para trafegar de uma tela a outra? 

Tudo vai depender de o que exatamente você quer observar, a partir daí você extrai esses dados, transforma-os em métricas e gera informação que pode ser usada para otimizar ou ganhar mais vantagem em relação a concorrência ou otimizar a sua aplicação em pontos que ela ainda tem espaço para melhoria. 

É claro que diferente de um carro, aqui não temos sensores físicos, usamos outros softwares como **Prometheus** por exemplo para extrair essas métricas a partir das máquinas/containers que estão rodando essas aplicações ou então bibliotecas que disparam eventos para outros servidores que por sua vez coletam e armazenam esses dados. 


![Prometheus Logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pg6i9npubch4cikb627q.png)
_Fonte: Prometheus_

<a id="ancora4"/>
### Como funciona dentro do software?

![Pipeline de dados Cisco](https://camo.githubusercontent.com/32e8471ab5750f4bb09a899404623edfb1cbf7a5573102a671b1b15de3fe9ca4/68747470733a2f2f643177717330306e6265656f78312e636c6f756466726f6e742e6e65742f73746167696e672f736d61727473686565742f72632d75706c6f61642d313539333432373034323839382d332f313539333432373432393835392e706e67)
_Fonte: [Cisco Code Blog](https://developer.cisco.com/codeexchange/github/repo/cisco/bigmuddy-network-telemetry-pipeline/)_

Bom, é claro que aqui vai diferenciar um pouco de caso a caso, mas de forma geral pode-se imaginar que as métricas geralmente são **exportadas** de um dispositivo e **coletadas** por outro. No meio desse caminho podemos ter outras ferramentas que por exemplo categorizam esses dados deixando-os mais palatáveis para nossos olhos. Ou seja, podemos de forma geral pensar que a telemetria funciona como uma pipeline (popularmente conhecido como esteira), você tem um ponto de origem, alguns processos e um ponto final no qual um processo depende do resultado do anterior.  A isso nomeamos de arquitetura de pipeline ou arquitetura pipe-and-filter.  (Abordei em um artigo futuro mais sobre esses modelos arquiteturais).

Ainda no exemplo do Prometheus, pense que temos uma aplicação em NodeJS rodando, o prometheus estará plugado como uma biblioteca nessa aplicação exportando dados como número de requisições sendo recebidas, status https sendo respondidos, tempo de resposta entre outras métricas. Essas métricas são enviadas para outra aplicação que atua como um **coletor** e capta esses dados, levando-os para uma fila por exemplo a qual irá transportar esses dados até uma outra aplicação que os processa e pode gerar dashboards, como por exemplo o **Grafana** o qual cumpre bem essa função. 


<a id="ancora5"/>

### Em suma, temos telemetria

Telemetria é talvez a grande ferramenta para a mina de ouro da era que estamos atuais: a era da informação, a era orientada a dados. Dados são ouro e informação é o ouro trabalhado. Seja em um micro-ondas, em um carro de Fórmula 1 ou na sua aplicação de estudo, sempre temos que ter isso em mente: como posso extrair e disponibilizar mais dados? Como posso processá-los e gerar valor com isso? Onde posso encontrar as perguntas que ainda não descobri e encontrar o caminho para a resposta? A telemetria nos dá o poder para isso.