0% acharam este documento útil (0 voto)
3 visualizações2 páginas

GraphQL e Ribbon: Eficiência em APIs

O GraphQL oferece flexibilidade e eficiência ao cliente, permitindo menos requisições e dados desnecessários, embora em algumas situações uma API RESTful possa ser suficiente. O Ribbon, uma ferramenta open-source da Netflix, atua como um Client Side Load Balancer com diferentes regras para escolher instâncias de serviços, como RoundRobin e AvailabilityFiltering. Chris Richardson sugere o uso de um Microservice Chassis para questões transversais, mas propõe que uma alternativa é implementar essas preocupações na infraestrutura de redes através de um Service Mesh.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações2 páginas

GraphQL e Ribbon: Eficiência em APIs

O GraphQL oferece flexibilidade e eficiência ao cliente, permitindo menos requisições e dados desnecessários, embora em algumas situações uma API RESTful possa ser suficiente. O Ribbon, uma ferramenta open-source da Netflix, atua como um Client Side Load Balancer com diferentes regras para escolher instâncias de serviços, como RoundRobin e AvailabilityFiltering. Chris Richardson sugere o uso de um Microservice Chassis para questões transversais, mas propõe que uma alternativa é implementar essas preocupações na infraestrutura de redes através de um Service Mesh.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

O GraphQL dá bastante poder ao cliente.

Isso é especialmente útil quando a equipe que


implementa
o cliente é totalmente separada da que implementa o servidor. Mas há casos mais simples,
em que as
equipes do cliente e servidor trabalham juntas. Então, não haveria tanta dificuldade em
manter uma API
RESTful customizada para o cliente.
Poderíamos buscar outros dados da API do GitHub: o número de issues abertas, a data da
última
release, informações sobre o último commit, etc.
Uma coisa é certa: com uma consulta GraphQL, eu faria menos requisições e receberia
menos dados
desnecessários. Mais flexibilidade e mais eficiência.
Considerando o Modelo de Maturidade de Richardson, podemos considerar que o GraphQL
está no
Nível 0:
não diferentes recursos, apenas uma URI como ponto de entrada para toda a API GraphQL
não há a ideia de diferentes verbos HTTP, só é usado POST
não há diferentes representações, apenas um JSON que contém uma estrutura GraphQL

A Netflix lançou como parte de sua iniciativa open-source o Ribbon, um Client Side Load
Balancer
integrado com outras ferramentas do Netflix OSS.
Uma das necessidades do Ribbon é saber o IP ou DNS name das instâncias de um
determinado
serviço. Isso pode ser feito por uma configuração estática (
ConfigurationBasedServerList ), ou de
maneira dinâmica, de modo a remover, de tempos em tempos, instâncias indisponíveis e
adicionar novas
instâncias ( DiscoveryEnabledNIWSServerList ). Nesse capítulo, focaremos na
configuração estática.
Em um capítulo posterior, estudaremos a configuração dinâmica da lista de instâncias.
O Ribbon possui diferentes rules, que são lógicas de escolha de uma instância da lista.
Entre elas:
RoundRobinRule : usa o algoritmo round robin, que rotaciona a lista de instâncias,
alternando
sequencialmente entre as instâncias disponíveis. É o algoritmo padrão. Se tivermos 3
instâncias, as
chamadas seriam à primeira, à segunda e à terceira, e então à primeira novamente, e assim
por
diante.
AvailabilityFilteringRule : um algoritmo que pula as instâncias indisponíveis. Por
padrão,
uma instância é considerada indisponível se há falha em 3 conexões consecutivas. Depois
de 30
segundos, há nova tentativa de conexão. Se houver falha nas novas tentativas, há um
aumento
exponencial do tempo de espera. Todos esses valores são configuráveis.
WeightedResponseTimeRule : é coletado o tempo de resposta de cada instância. Quanto
maior o
tempo de resposta, menor a probabilidade da instância ser obtida da lista.
Além disso, o Ribbon mantém estatísticas da latência e frequência de falha de cada
instância.

No livro Microservice Patterns (RICHARDSON, 2018a), Chris Richardson recomenda usar


um
Microservice Chassis, um framework ou coleção de frameworks, para implementar
questões transversais
às funcionalidades da aplicação.
Mas, para Richardson, um obstáculo é que frameworks são restritos a uma plataforma
específica. É
possível usar Spring Boot e Spring Cloud em aplicações escritas em Java ou Kotlin (e talvez
em outras
linguagens da JVM). Mas se alguns serviços forem escritos em Go, Elixir ou NodeJS,
precisaremos de
Microservices Chassis específicos.
Uma alternativa emergente identificada por Chris Richardson é implementar essas
preocupações
transversais na própria infraestrutura de redes, mediando tanto a comunicação entre os
serviços como as
requisições de clientes externos: é um Service Mesh.

Você também pode gostar