Executando verificação de segurança...
1

Que ideia genial pedir envolvimento da comunidade para montar essa lista srdavidsilva! Quero fazer minha contribuição:

Cache com stale-while-revalidate

Isso foi uma das últimas coisas mais legais que aprendi sobre APIs e pode revolucionar a performance de uma aplicação (caso ela possa se utilizar desse recurso) e o princípio por trás já está no nome stale-while-revalidate que traduzindo fica mais ou menos como "obsoleto enquanto revalida".

Imagina uma aplicação onde você faz uma request GET contra um endpoint /users e esse endpoint naturalmente retorna todos os usuários. Dado as características dessa aplicação de exemplo, esse é um endpoint muito devagar de retornar, chegando a demorar 10 segundos a cada request.

Por não ser um endpoint que você não precisa dos dados em tempo-real, ao aplicar o cabeçalho stale-while-revalidate, a primeira request contra esse endpoint continuará devagar da mesma forma como antes, mas terá um efeito colateral muito importante que é o resultado ter sido cacheado (e você pode definir as regras do cache). Mas isso significa que uma segunda request vai ser respondida instantâneamente (talvez com dados obsoletos), mas que por trás dos panos, o backend está fazendo uma nova consulta para atualizar esse cache o mais rápido que conseguir.

Então todas as requests dali para frente são respondidas instantaneamente, enquanto o backend se responsabiliza por ficar somente atualizando esse cache. Se você notar, isso é duplamente poderoso, pois você tira o peso do lado do client (do lado que consome o dado) e principalmente tira o peso do lado do server (do lado que produz o dado) porque independente da quantidade de requests que chegarem, todas vão cair o cache e o server vai só trabalhar uma vez.

Isso eu aprendi usando o Next.js junto com a CDN da Vercel, mas isso não é exclusivo deles. Hoje no TabNews isso está sendo usado na página de status mas eu quero fazer um ajuste na configuração do stale-while-revalidate.

Carregando publicação patrocinada...
3

Nossa, sensacional, excelente caminho!

Eu tive o prazer de implementar uma API onde o cache ajudou a gente a escalar em um nível absurdo. Mas eu não tive essa ideia genial, nós fizemos um midleware e incluímos na frente de todas as rotas pássiveis de cache com um tempo de expiração padrão. Ficou algo universal para o serviço, usando Redis, cada entrada era a própria rota com os query params ordernados, para não repetir.

Tivemos até o pensamento de como seria fazer algo assim a nível de infraestrutura em contextos de microserviços, imagina definir que determinada rota terá cache no esquema do ingress, ficando abstrato para o serviço. Pensa no time de SRE vendo tal rota GET explodindo e ativa um cache só nela para amenizar o serviço. Nunca trabalhei com time de SRE profissional, talvez tenha soluções mais inteligentes para essa minha ideia kk