A palavra serviço significa duas coisas
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.
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.