Número 58
7 de xuño de 2023

O rabaño atronador

Agora que todos estamos a facer sistemas distribuídos e cliente-servidor, quero recordarvos, unha vez máis, que eses sistemas teñen peculiaridades e problemas que non aparecen nos programas monolíticos que funcionan nun só ordenador.

Un rabaño de ñus correndo na sabana mentres os lóstregos iluminan o horizonte.

Un destes problemas ocorre cando o voso servizo ten moitos clientes que, dunha maneira ou outra, se sincronizan e moitos deles fan peticións ao mesmo tempo, saturando os servidores.

Este problema chámase “o rabaño atronador” (ou “thundering herd” en inglés) porque, para o servidor que o sofre, esa experiencia é coma estar no medio da sabana e que apareza de súpeto un rabaño de ñus ao galope, co petar dos seus pezuños no chan facendo un estrondo que atorda, e que todos eses animais pasen por riba e polos lados e diante e detrás del, e que despois de trescentos anos ou quince minutos non fique nada con vida ata onde chega a vista: só o chan cuberto de terra remexida e herba esmagada.

Un podía pensar que este problema debería ser imposible porque, se os clientes son independentes entre si, deberían emitir peticións a intervalos arbitrarios e, polo tanto, o número de peticións por segundo recibido polos servidores debería ser máis ou menos uniforme.

Pois ben: o motivo polo que isto ocorre é que os clientes non son totalmente independentes, senón que teñen algo en común que pode influír neles: o servidor.

Algunhas veces, este problema ocorre cando o servidor fai unha pausa, e daquela pásalle coma ao meu barbeiro, que cando tornou despois dunha semana de vacacións tiña unha multitude agardando na porta.

O barbeiro tivo que lle pedir aos clientes que, se eles chegaban e el tiña o negocio pechado, non volveran no día seguinte, senón que agardaran entre tres e sete días e tornaran daquela. Desta maneira non tería a todos os clientes agardando na porta na volta das vacacións, senón que se repartirían durante os seguintes días.

Pasou uns poucos días intensos cortando cabelo sen parar, pero finalmente conseguiu atender a toda a xente e incluso puido descansar un pouco cando outro día, sen previo aviso, atopou unha multitude agardando na porta.

—E logo, que pasou? Por que volvestes? —preguntou.
—Xa pasou un mes! Vimos cortar o cabelo! —responderon.

O pobre home tivo que volver razoar cos clientes e pedirlles que non viñeran cada mes exacto, senón un número aleatorio entre vintecinco e corenta días para repartírense un pouco.

Algunhas veces os servizos que están detrás dunha caché sofren o problema do rabaño atronador cando a caché non contén un dato ou cando ese dato vén de caducar.

No meu barrio había unha tenda de lambonadas que facía tanto negocio que tiña tres dependentes atendendo. Un día fun con dous amigos e pedín goma de mascar. Como a caixa que tiñan detrás do mostrador estaba baleira, o dependente tivo que ir ao almacén a buscar outra caixa nova. Ao mesmo tempo, un dos meus amigos tamén lle pediu goma de mascar a outro dependente, que tamén viu a caixa baleira e marchou por unha nova. O meu outro amigo tamén pediu o mesmo ao terceiro dependente, cun resultado idéntico.

Medio minuto despois chegaron os tres dependentes con cadansúa caixa. Botáronnos unha ollada asasina e vendéronnos as nosas gomas de mascar sen dicir unha palabra.

A seguinte vez que fun a esa tenda e a caixa da goma de mascar estaba baleira, o dependente tirouna do seu sitio antes de ir ao almacén.

—Así xa saben que fun buscar outra caixa e non van eles senón que agardan a que eu a traia —dixo.
—É unha boa idea —respondín e, chiscando un ollo, engadín—: e, cando chegas coa caixa e os outros queren coller a súa goma de mascar, como evitades ter un rabaño atronador?

A ilustración desta Folla foi producida mediante IA.