Trabalho Em Equipe Dds - DDS SOBRE TRABALHO EM EQUIPE by Vitória Ketleen on Prezi
DDS SOBRE TRABALHO EM EQUIPE by Vitória Ketleen on Prezi

Entendendo DDS e por que a maioria das equipes falha na implementação

DDS (Data Distribution Service) é uma camada de middleware padronizada pela OMG para comunicação entre sistemas em tempo real. O padrão define como dados fluem entre produtores e consumidores sem acoplamento espacial ou temporal. Na prática, você instala um provedor DDS — como RTI Connext, Eclipse Cyclone DDS ou OpenDDS — e começa a publicar/assinar dados usando APIs C++, Java, Python ou C#. A parte técnica em si é bem documentada. O problema real surge quando você tenta fazer o trabalho em equipe dds funcionar em um projeto grande.

Configurando o ambiente de trabalho em equipe dds

O primeiro passo costuma ser escolher o provedor. Para times pequenos, Cyclone DDS é gratuito e relativamente simples. Para ambientes industriais com requisitos rigorosos de QoS, RTI Connext domina o mercado. Depois vem a definição do schema de dados. Use IDL para definir tipos compartilhados entre todos os desenvolvedores. Isso evita que o Pedro no time frontend use uma estrutura diferente da que o Lucas no time backend espera receber. Eu vi duas vezes times inteiros perderem dias porque cada um tinha sua própria versão dos dados sem documentação centralizada. Configure um repositório Git com o arquivo de schema IDL e um script de code generation como parte da integração contínua. Quando alguém modifica o schema, o build quebra para todo mundo imediatamente. Isso é muito mais eficiente do que descobrir na hora do teste de integração que os dados não estão sendo interpretados corretamente pelo subscriber.

A configuração de rede também merece atenção. DDS usa descoberta automática via multicast por padrão. Em ambientes com muitas sub-redes ou VLANs isolados, o multicast pode não atravessar. Nesse caso, você precisa configurar descoberta estática usando um lista de endpoints conhecidos. Eu passei três dias tentando diagnosticar por que os nós não se encontravam em um cluster com switches gerentes, até perceber que o multicast estava sendo bloqueado em dois dos segmentos. A solução foi migrar para modo peer-to-peer com configuração de discovered nodes no XML de configuração.

O que ninguém conta sobre trabalho em equipe com DDS

QoS (Quality of Service) é onde a maioria dos times sofre. O padrão DDS tem dezenas de políticas: Durability, Deadline, Reliability, History,Liveliness, e outras. Você não precisa configurar todas, mas ignorantemente deixar os valores padrões pode causar comportamentos completamente inesperados. Por exemplo, o valor padrão de Reliability é BEST_EFFORT. Se o seu sistema exige que nenhuma mensagem crítica seja perdida, você precisa explicitamente configurar para RELIABLE. E aí vem outra pegadinha: quando você muda para RELIABLE, o DDS precisa de ACKs de confirmacao, o que aumenta a latência e o uso de banda significativamente. Outro ponto cego comum é a configuração de History. O padrão permite KEEP_LAST com um depth qualquer, ou KEEP_ALL. KEEP_ALL parece atrativo no começo, mas em producao com alto throughput, ele cresce sem controle ate estourar a memoria do processo. Eu vi um sistema de telemetria de satelite onde o KEEP_ALL acabou consumindo 8GB de RAM porque os dados chegavam mais rápido do que os subscribers conseguiam processar. A correcao foi mudar para KEEP_LAST com depth razoavel e ajustar a politica de Deadline para garantir que subscrevers ociosos fossem detectados.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Profiling tambem e necessario desde o inicio. DDS nao vem com dashboard visual integrado em praticamente nenhuma implementacao. Voce vai depender de ferramentas externas ou construir as suas proprias para monitorar throughput, latencia e perda de pacotes. Cyclone DDS tem uma API de monitoring, mas e limitada. RTI Connext tem o QoS Editor e o Monitoring Dashboard, mas sao pagas. OpenDDS obriga voce a implementar seus proprio contador ou usar trace files com ferramentas de analise posteriores.

Limitacoes e quando evitar DDS

DDS nao e bala de prata. O overhead de memoria e CPU pode ser significativo, especialmente em dispositivos embarcados com poucos recursos. Cada dominio DDS usa recursos fixos mesmo sem trafego ativo. Em um sistema com 200 nodos em 5 dominios diferentes, o consumo basico de memoria do daemon DDS pode facilmente ultrapassar 500MB, dependendo da implementacao. Para sistemas onde a comunicaçao e predominantemente request-response e nao pub/sub orientada a dados, DDS e o framework errado. Nestes casos, gRPC ou Message Pack rodando sobre TCP/UDP simples pode ser mais adequado e muito mais facil de debugar. DDS brilha em cenarios com muitos produtores e consumidores, topologias dinamicas (nodes entrando e saindo), e requisitos de baixa latencia e alta confiabilidade simultaneamente.

Tambem cuidado com a curva de aprendizado da equipe. Um desenvolvedor acostumbrado a REST APIs leva de duas a quatro semanas para se tornar produtivo com DDS, principalmente nas politicas de QoS. Treine a equipe antes de colocar DDS em producao. Documente as escolhas de QoS feitas no projeto e mantenha esse documento atualizado. Sem isso, cada nova pessoa no time vai fazer suas proprias suposicoes e criar inconsistencias. Se o seu projeto tiver menos de cinco nodos, comunicacao simples e sem requisitos criticos de tempo real, considere se DDS vale a pena. frameworks mais leves como ZeroMQ ou ate mesmo WebSockets com JSON podem resolver o mesmo problema com uma fração da complexidade.

Recursos uteis

O site oficial da OMG DDS tem a especificação completa: https://www.omg.org/spec/DDS. Para começar rapidamente com código aberto, o Eclipse Cyclone DDS tem boa documentacao e exemplos em varios linguagens em https://github.com/eclipse-cyclonedds/cyclonedds. O material de treinamento do RTI Academy também é completo, embora algumas peças sejam voltadas para a ferramenta paga deles.