Um sistema distribuído é aquele em que a falha de um computador que você nem sabia que existia pode inutilizar seu próprio computador.
Embora essas palavras prescientes tenham sido proferidas em 1987, elas continuam sendo o caso em 2018. Elas também subestimam o problema.
Na Couchbase, temos a missão de fornecer uma plataforma de banco de dados de engajamento. Se você estiver criando um sistema envolvente para este mundo moderno, ele deve ser responsivo. Se o seu aplicativo demorar a responder, uma mensagem instantânea ou uma notificação sobre uma nova "insty" poderá distrair o usuário que está trabalhando com o seu aplicativo. A falta de capacidade de resposta do seu aplicativo significa a perda do usuário.
No entanto, há um desafio. Em um sistema distribuído em que há muitas engrenagens em funcionamento, se apenas uma estiver deixando as coisas mais lentas (e possivelmente apenas ocasionalmente!), como identificá-la?
Vou precisar de um barco melhor
Como muitos de nossos usuários podem atestar, o Couchbase já é muito bom em encontrar o problema. Há muito tempo, temos um conjunto de ferramentas de diagnóstico, seja o métricas incorporadas no Java SDK, o métricas avançadas e informações de perfil no N1QLou os limites e o registro em log introduzidos no Couchbase Server 5.0.
Nosso setor está tendendo a ser mais distribuído, com mais camadas de abstração de mais provedores de nuvem e contêineres. Ao mesmo tempo, os sistemas modernos tendem a operar com latências extremamente baixas em estado estável, mas espera-se que as tolerâncias do sistema em relação às latências sejam praticamente as mesmas quando houver congestionamento ocasional ou um erro. Passar de dezenas de microssegundos para tempos limite em segundos (a especificação TCP exige a espera de 1 segundo em uma retransmissão TCP!) é como se deparar repentinamente com um penhasco em uma montanha.
Na verdade, eu diria que você provavelmente já passou por isso. Muitas pessoas já fizeram uma chamada pelo Skype/Hangout/Conferência com vídeo de alta definição e áudio estéreo de alta qualidade. No entanto, eu também apostaria que 100% delas já viram alguns quadros de vídeo travados, ruídos ocasionais no vídeo e áudio cortado ou distorcido.
Quando você tem a sorte de ter resolvido muitos dos problemas fáceis e suas ferramentas não são mais suficientes para encontrar a causa do próximo problema difícil, é nesse momento que você inova com novas ferramentas.
Use a força, desenvolvedor
No entanto, inovar uma solução não significa necessariamente começar com uma folha em branco.
Acreditamos na ideia de que a inovação acontece em outro lugar e acreditamos que é de nosso interesse encontrar pessoas apaixonadas e com a mesma mentalidade para colaborar em uma solução.
A equipe e eu fizemos algumas pesquisas, e um conjunto de notas de pesquisa em Comunicações da ACM no ano passado foi inspirador. Isso nos levou ao projeto OpenTracing, que faz parte da Cloud Native Compute Foundation. O Couchbase é membro da CNCF.
OpenTracing está trabalhando para ser uma API padronizada para rastreamento distribuído. Embora nós, da Couchbase, não estejamos no negócio de criar ferramentas de rastreamento, temos nossas próprias necessidades modestas e, se pudermos acrescentar e aproveitar a inovação de uma comunidade, devemos fazê-lo.
A criação de uma solução aberta também possibilita estender nosso trabalho a um conjunto mais amplo de peças integradas criadas com base nas mesmas interfaces.
Tudo o que você precisa decidir é o que fazer com os horários que fornecemos a você*
Com o Couchbase Server 5.5, apresentaremos um novo recurso que chamamos de Tempo de resposta Observabilidade. Isso proporcionará aos implantadores de sistemas uma maneira muito simples de observar os tempos de resposta em relação a um limite (ajustável). A equipe considerou cuidadosamente como tornar isso eficiente e seguro para estar sempre ativo, além das possíveis complexidades de implementação.
Mike Goldsmith (que liderou o desenvolvimento do sdk-rfc) descreve em seu blog o ThresholdLoggingTracer como é conhecido em um nível mais baixo e como ele aproveita o OpenTracing, cuja API ainda está evoluindo e para a qual estamos contribuindo.
Então em seu blogMichael Nitschinger descreve como o Java SDK implementa o ThresholdLoggingTracer do Couchbase e a interface OpenTracing (atualmente volátil) pode ser usada por outros sistemas de rastreamento ou até mesmo estendida pelos próprios usuários para observar melhor o que está acontecendo com os sistemas.
O Couchbase Server 5.5 já está disponível e será ótimo receber feedback nos fóruns ou em nosso rastreador de problemas.
* Ok, essa referência específica pode ser um pouco obscura, mas alguém vai gostar dela!