L’avís va arribar de nit. La base de dades del web d’un client treballava molt per sobre del normal i el seu proveïdor d’allotjament n’havia localitzat el motiu: les cerques trigaven de mitjana 82 segons a resoldre’s, mentre diversos robots en llançaven una rere l’altra. L’endemà al matí, el cas era damunt la nostra taula.
Menys d’una hora després que s’obrís el tiquet, havíem respost amb la causa real, una mesura que la demostrava i la llista exacta del que calia comprovar a producció.
L’error en si és el de menys: dues peces de la base de dades que feia anys que no s’entenien, i una allau de cerques que ho va fer evident. El que val la pena explicar és la feina, perquè és la part del suport que no es veu quan tot funciona.
El primer sospitós té dret a coartada
Tot cas arriba amb una primera hipòtesi. Aquesta assenyalava una part concreta de la base de dades, era raonable i venia de qui millor coneix els servidors. El més còmode hauria estat retocar aquella part i esperar a veure què passava.
Abans la vam comprovar, i estava bé. Així ho vam dir al tiquet, juntament amb el motiu: tocar-la no arreglaria res. El client es va estalviar un canvi inútil en un web en producció, amb el seu cost i el seu risc. Això no surt en cap informe, i també és feina de suport.
L’escena del crim no es toca
Vam investigar al nostre entorn de desenvolupament, amb el mateix codi i una còpia de les dades reals. Mentrestant, el web va continuar atenent els visitants sense assabentar-se de res.
Allà vam reproduir el problema, el vam aïllar i vam provar la solució. Les mateixes cerques van passar a ser entre 8 i 12 vegades més ràpides i van retornar exactament els mateixos resultats. El segon importa tant com el primer, perquè una cerca molt ràpida que troba una altra cosa és una altra avaria.
Amb aquesta prova a la mà ja no demanàvem a ningú que confiés en la nostra intuïció.
Una investigació, un sol fil
L’allotjament veu els seus servidors i nosaltres veiem el web per dins. Ningú no ho veu tot des del seu costat, així que un cas com aquest només es resol si tots dos treballen junts.
Va ser un bon exemple. El proveïdor havia donat l’avís a temps i amb dades. Nosaltres li vam indicar al tiquet què havia de mirar i què havia de sortir si teníem raó. Ho va comprovar als seus dos entorns i ho va confirmar. Va proposar una prova controlada de la correcció i hi vam afegir com tornar enrere si alguna cosa anava malament. També li vam proposar frenar els robots abans que arribessin a la base de dades, perquè la protecció que hi havia no era suficient.
El client va ser en aquest fil des del principi. Va poder veure què passava i qui ho portava, i no va haver de reenviar ni un sol correu d’un proveïdor a l’altre.
Si la resposta a tot és «hem reiniciat i ja va», el cas continua obert.
Fins al final del rastre
Quan els robots se’n van anar, la càrrega va tornar a la normalitat. A efectes pràctics, ja no hi havia incidència, i moltes es tanquen just en aquell moment. La causa continuava allà, esperant els robots següents.
A més, quedava la pregunta que separa arreglar una cosa d’entendre-la: per què ha passat i com evitem que torni a passar? La vam respondre al tiquet el mateix dia que es va plantejar, després de seguir el rastre per l’historial del programari fins a l’origen. El culpable feia anys que era a casa. Venia de la versió amb què es va construir el web, i aquest web el vam construir nosaltres, així que ho vam dir tal qual.
Conèixer l’origen ens va donar el que un pedaç no dona mai: saber què cal corregir exactament, confirmar que una actualització rutinària no ho hauria resolt i poder assegurar que el que es creï a partir d’ara ja sortirà bé.
Sentència pendent d’execució
Mentre escrivim això, la correcció entra en prova controlada a preproducció. Abans de fer aquest pas ja vam comprovar que el canvi era segur i vam deixar per escrit què calia fer si alguna cosa es torçava. Quan arribi a producció, es mesurarà abans i després, perquè aquesta serà la xifra que comptarà.
Per reunir tot l’anterior no hem hagut de tocar producció ni una sola vegada.
Quatre preguntes per al teu suport
Serveixen per a qualsevol incidència al teu web, la porti qui la porti.
T'han explicat què falla, o només què han fet perquè deixi de notar-se?
Hi ha una mesura de l'abans i el després, o només la sensació que ara va millor?
Saps des de quan passa i per què? Sense aquesta resposta, ningú no et pot dir si tornarà.
Quan hi intervenen l'allotjament i l'equip del web, parlen entre ells o ets tu qui reenvia els correus?
Si la resposta a tot és «hem reiniciat i ja va», el cas continua obert.
Fonts
Per a qui vulgui entrar en el detall tècnic.
- MySQL, 8.0 Reference Manual, 12.1 «Character Sets and Collations in General»: què és una collation, el conjunt de regles amb què la base de dades compara caràcters.
- Drupal.org, Search API, issue #3227268, «Search API full text queries do not use an index when used via views due to utf8mb4 / utf8 mismatch on PRIMARY»: el problema al mòdul i la decisió de corregir-lo primer per als índexs nous.
- Search API, commit caff9cac, 2022: el pedaç, que actua en crear taules noves.
- Drupal.org, search_api 8.x-1.24: versió publicada el 7 de juliol de 2022 que inclou aquesta correcció.
- IETF, RFC 9309, «Robots Exclusion Protocol», 2022: les regles per a robots són una petició que els rastrejadors han de respectar pel seu compte, no un control d’accés.
