Revivint Pinba: El motor de MySQL que oblida a propòsit

Pinba, el motor de MySQL que oblida dades a propòsit, ha estat reviscut. Descobreix com una eina de monitoratge de 15 anys funciona en bases de dades modernes.

sábado, 25 de julio de 2026 • 6 min de lectura • Equip Q2BSTUDIO

Cómo resucitar un monitor de 15 años

Al món del desenvolupament de programari, la memòria és un bé preuat. Però, què passaria si existís una taula de base de dades dissenyada específicament per oblidar? Aquesta és l'essència de Pinba, un motor d'emmagatzematge per a MySQL que va néixer el 2009 dins de Badoo, la plataforma de cites. Pinba no és una base de dades tradicional: és un servidor de monitorització disfressat de base de dades. La seva proposta és radical: emmagatzema estadístiques en temps real de les peticions web dels últims 15 minuts i després les descarta per sempre. Reinicia MySQL i les dades desapareixen sense que ningú se'n preocupi. Aquesta amnèsia programada és, precisament, la seva major fortalesa.

La història de Pinba comença amb Andrey Nigmatulin, el creador de PHP-FPM, i Antony Dovgal, un desenvolupador veterà del nucli de PHP. Tots dos treballaven a Badoo, un entorn amb centenars de servidors PHP i desplegaments continus. Les eines de monitorització existents, com Zabbix, indicaven que un servidor estava saturat, però no revelaven quin codi concret ho provocava. La solució va ser un motor que rep mètriques mitjançant paquets UDP, sense establir connexió, sense esperar resposta. Si el paquet es perd, no importa: se n'agreguen milions. Si el servidor de monitorització falla, la web ni se n'assabenta. Aquesta arquitectura és el que fa a Pinba inherentment segur: un sistema de monitorització que pot tombar la producció és pitjor que no tenir monitorització.

Tot resideix en memòria RAM, en buffers circulars preassignats. No hi ha escriptura en disc, ni operacions d'entrada/sortida que puguin convertir-se en colls d'ampolla. Les agrupacions es calculen sobre la marxa, a mesura que arriben els paquets. Consultar report_by_script_name no necessita escanejar milions de files; la resposta ja està calculada en memòria. Així, amb unes simples línies de SQL, un desenvolupador pot saber quines pàgines estan consumint més recursos en aquell mateix instant, no en logs d'ahir.

No obstant això, el temps no perdona. El projecte original va deixar de rebre actualitzacions cap al 2016. L'API dels plugins de motor d'emmagatzematge de MySQL va canviar dràsticament amb les versions 8.0 i 8.4 LTS. El codi de 2009 no compilava amb compiladors moderns. Les empreses que confiaven en Pinba s'enfrontaven a una decisió difícil: congelar les seves bases de dades en MySQL 5.7 o perdre l'eina. Fins que el 2024 un enginyer backend amb dues dècades d'experiència, que havia utilitzat Pinba diàriament durant més de deu anys, va decidir que un tancament així no era acceptable per a una eina tan ben concebuda. Va néixer el fork que avui reviu el projecte.

La resurrecció no va ser senzilla. Calia actualitzar el sistema de compilació d'autoconf a CMake, migrar el codi a C++23, netejar la gestió de protobuf (reutilitzant el runtime que ja inclou MySQL), i fer que el mateix arbre de codi generés plugins separats per a MySQL 8.0, 8.4, MariaDB 10.11 i 11.8. Es van afegir eines modernes: clang-format, clang-tidy, cppcheck, AddressSanitizer, UndefinedBehaviorSanitizer, CodeQL. Va ser un treball d'enginyeria inversa i adaptació que, segons l'autor, hauria estat impossible sense assistència d'intel·ligència artificial. Els models d'IA van ajudar a modernitzar el codi de threading, maneig de protobuf i gestió de memòria escrit per a una base de dades de fa quinze anys. Cada pocs mesos, les eines d'IA eren més intel·ligents i el full de ruta s'ampliava.

El resultat d'aquest esforç és un motor que no només funciona en bases de dades modernes, sinó que a més ha revelat errors ocults durant quinze anys. Per exemple, un error en la inicialització d'un punter next a la llista de tasques del pool de fils provocava caigudes aleatòries en MariaDB, però mai en MySQL, per una casualitat de l'assignador de memòria de glibc. LeakSanitizer va descobrir una fuita de memòria lenta en sobreescriure claus al mapa d'informes. CodeQL va trobar operacions aritmètiques amb snprintf sense verificar que podien desbordar buffers. Cadascun d'aquests errors era petit, antic, i ara està cobert per proves. Si mantens un codi C antic i no l'has executat amb sanititzadors, probablement tinguis sorpreses desagradables esperant-te.

La part final de la resurrecció no és codi, sinó logística. Un plugin de motor d'emmagatzematge ha de coincidir exactament amb la versió del servidor MySQL. Les versions de pedaç es publiquen amb el seu propi calendari. Per no haver de perseguir aquestes actualitzacions a mà, el fork va implementar un flux de CI que vigila les noves versions de MySQL, obre pull requests automàtics i, després de passar les proves, publica imatges Docker multiarquitectura (x86_64 i ARM), paquets DEB en un PPA d'Ubuntu i paquets RPM en Fedora COPR. Les imatges Docker es descarreguen unes 3.100 vegades al mes. Una eina dissenyada per monitoritzar la producció és ara monitoritzada per robots.

Quines lliçons podem extreure d'aquesta història per al desenvolupament de programari empresarial? Primer, que l'elecció d'una arquitectura importa més que la popularitat. Pinba va sobreviure perquè les seves decisions de disseny —UDP sense connexió, buffers circulars en RAM, agregacions en memòria— eren intrínsecament robustes. Segon, que el manteniment del programari heretat és un repte real que requereix inversió en eines modernes i, sovint, en intel·ligència artificial per accelerar la migració. Tercer, que la monitorització no ha de ser un punt únic de fallada. I quart, que les empreses necessiten socis tecnològics que entenguin tant el llegat com la innovació.

A Q2BSTUDIO, som especialistes en aquest tipus de transformacions. Ajudem les organitzacions a modernitzar els seus sistemes legacy, migrar al núvol (AWS o Azure), enfortir la seva ciberseguretat, i aprofitar la intel·ligència artificial per automatitzar processos i obtenir intel·ligència de negoci amb eines com Power BI. Si la teva empresa utilitza bases de dades antigues, aplicacions monolítiques o necessita programari a mida que evolucioni amb el temps, podem ajudar-te a fer el salt sense perdre funcionalitat. La història de Pinba demostra que fins i tot el codi més abandonat pot renéixer quan s'apliquen les tècniques i el talent adequats.

Per als desenvolupadors que vulguin provar Pinba, el fork modern està disponible a GitHub. N'hi ha prou amb executar un contenidor Docker amb la imatge xolegator/pinba-engine:8.4, exposar el port UDP 30002 i apuntar l'extensió PHP de Pinba a aquest port. En menys d'un minut, la teva aplicació estarà enviant mètriques i podràs consultar-les amb SQL. És una manera increïblement senzilla d'obtenir visibilitat en temps real sobre el rendiment del teu codi, sense afegir complexitat operativa.

El cas de Pinba ens recorda que, de vegades, la millor base de dades és la que oblida. I que, amb la combinació adequada d'enginyeria, intel·ligència artificial i visió estratègica, podem rescatar eines que semblaven perdudes per sempre. A Q2BSTUDIO creiem en aquest enfocament: solucions que funcionen avui, demà i dins de deu anys.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.