A palavra serviço significa duas coisas

Prévia grátis 3 min de leitura

Esta aplicação tem 54 arquivos terminados em _service.rb. Ela não precisa de service mesh, e entender por que esses dois fatos andam juntos é a maior parte do objetivo deste curso.

Duas coisas diferentes com um nome só

Um objeto de serviço é uma classe Ruby com um método call. Auth::AuthenticateUserService, Enrollment::StartCourseService e Partners::FetchSiteIconService são invocados como chamadas de método, no mesmo processo, na mesma pilha.

Um serviço no sentido de sistemas distribuídos é um processo separado, normalmente numa máquina separada, alcançado pela rede.

Um service mesh conecta o segundo tipo. Ele não tem nada a oferecer ao primeiro, porque o primeiro não tem rede entre as partes.

O que a rede acrescenta

Uma chamada de método devolve ou levanta um erro. Esses são os únicos dois desfechos, e os dois são imediatos.

Uma chamada de rede tem um terceiro desfecho: nenhuma resposta. A requisição pode ter chegado e sido processada, chegado e não ter sido processada, ou nunca ter chegado, e quem chamou não consegue distinguir esses casos.

flowchart TB
  M["uma chamada de método"] --> R1["retorna"]
  M --> R2["levanta erro"]
  N["uma chamada de rede"] --> R3["retorna"]
  N --> R4["levanta erro"]
  N --> R5["nenhuma resposta"]
  R5 --> U["rodou? quem chamou não tem como saber"]

Tudo o que um mesh faz existe por causa desse terceiro desfecho. A rede também acrescenta latência, serialização, autenticação entre partes que antes confiavam umas nas outras, e o problema de encontrar o outro lado.

As cinco preocupações

Serviços distribuídos precisam responder às mesmas cinco perguntas, e um mesh é um lugar para colocar as respostas.

Descoberta: onde está o outro serviço agora?

Segurança: quem chama é quem diz ser, e o tráfego está cifrado?

Confiabilidade: novas tentativas, tempos limite e saber quando parar de tentar.

Controle de tráfego: canários, espelhamento, divisão por versão.

Observabilidade: qual chamada da cadeia foi lenta, e qual falhou?

Esta aplicação responde às cinco, e toda resposta é "não se aplica, há um processo só". Isso é o desenho funcionando, e não uma lacuna.

Pontos-chave

  • Esta aplicação tem 54 objetos de serviço e não precisa de mesh, e os dois fatos vêm do mesmo desenho.
  • Um objeto de serviço é uma chamada de método, e um serviço no sentido distribuído é um processo do outro lado da rede.
  • Uma chamada de método devolve ou levanta um erro, e uma chamada de rede também pode não responder.
  • Tudo o que um mesh faz remonta a esse terceiro desfecho.
  • As cinco preocupações são descoberta, segurança, confiabilidade, controle de tráfego e observabilidade.
Aula 1 de 7 · grátis

Continue com a aula 2

O sidecar que você já roda

O sidecar é um proxy ao lado de cada serviço, e o Thruster na frente do Puma o exemplifica.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...