Más allá de las bases de datos in-memory
La mayoría de las palabras de moda en IT envejecen mal, y con razón: la mayoría de las tecnologías que antes tenían una ventaja competitiva son reemplazadas por alternativas superiores en una década o menos. Por lo tanto, si un proveedor de software sigue impulsando una palabra de moda más allá de su fecha de caducidad (1), la explicación más sencilla es que su equipo de I+D ni siquiera se ha dado cuenta de que el mundo ha avanzado.
De modo anecdótico, varios capitalistas de riesgo también me han dicho que estaban cansados de invertir en cualquier empresa de software que tuviera más de unos pocos años, ya que la mayoría de las compañías nunca logran desacoplar su propia tecnología del panorama tecnológico que las definió cuando comenzaron.
(1) El propio mercado tecnológico define cuándo la tecnología “expira”. Al analizar una determinada tecnología, en el mejor de los casos solo se puede conjeturar cuánto tiempo permanecerá razonablemente cerca del estado del arte.
Las bases de datos in-memory solían ser una palabra de moda en IT, y esto no envejeció bien: cualquier empresa de software que hoy se promocione como proveedora de in-memory computing o in-memory está introduciendo tecnología desactualizada al mercado (2). No me malinterpreten: aprovechar al máximo la “memoria” - más sobre esto más adelante - nunca ha sido tan importante; sin embargo, el panorama de la computación ahora es más complejo que antes.
(2) En teoría, podría ser simplemente que el equipo de marketing se esté quedando atrás, mientras que el equipo técnico ya ha avanzado considerablemente. Sin embargo, nunca he conocido a ninguna empresa de software que sufriera este problema. Se puede asumir con seguridad que el marketing siempre va por delante de la tecnología.
A finales de los 90 y principios de los 00, un tipo específico de memoria volátil, coloquialmente conocida como la RAM, se había vuelto lo suficientemente asequible como para que conjuntos de datos cada vez más interesantes y valiosos pudieran caber “in-memory”. En ese entonces, la mayoría del software se diseñaba en torno a la idea de que la RAM era tan cara y limitada que recurrir a complicaciones extremas, solo para restringir al máximo la presión sobre la RAM, era un enfoque válido. Al replantear la mayoría de los problemas desde un enfoque fresco y sin restricciones, es decir, “in-memory” computing, muchos proveedores de software lograron aceleraciones tremendas en comparación con productos más antiguos, que se basaban exclusivamente en discos giratorios.
Adelantémonos hasta 2018, las bases de datos in-memory son una perspectiva desfasada, y lo han sido durante años. Existen muchos tipos de almacenamiento de datos:
- Caché de CPU L1
- Caché de CPU L2/L3
- RAM local
- RAM local de GPU
- SSD local
- HDD local
- RAM remota
- SSD remoto
- HDD remoto
- Almacenamiento en cinta o en óptico
Ni siquiera estoy enumerando tecnologías de almacenamiento más nuevas, como el Intel Optane, que casi representa una categoría de dispositivo propia.
Los proveedores que promueven la computación in-memory insinúan que su tecnología de software está orientada fundamentalmente hacia la explotación de dos tipos de memoria: la RAM local y la RAM remota. Aunque aprovechar al máximo la RAM, tanto local como remota, es ciertamente algo positivo, esto también revela enfoques de ingeniería que subutilizan las alternativas.
Por ejemplo, en las últimas dos décadas, la caché de CPU ha pasado de 512KB a más de 60MB en CPUs de alta gama. Con tanta caché de CPU, ahora es posible hacer “in-cache computing”, logrando aceleraciones masivas en comparación con la simple “in-memory computing”. Sin embargo, aprovechar la caché requiere la minificación de muchas estructuras de datos o incluso estrategias más inteligentes, muy por encima de lo que se considera necesario o incluso deseable desde la perspectiva de la RAM.
Sin embargo, señalar únicamente que la caché de CPU es más rápida que la RAM local se perdería el sentido. Hoy en día, una buena ingeniería de software implica maximizar las capacidades de todas esas clases de almacenamiento de datos. Gracias a computación en la nube, ensamblar una mezcla ad-hoc de recursos de computación nunca ha sido tan fácil.
Por lo tanto, Lokad no ofrece tecnología de software “in-memory”, ya que ello nos impediría aprovechar las otras opciones que actualmente tenemos disponibles. Por ejemplo, aunque podríamos alquilar máquinas con hasta 2TB de RAM, sería innecesariamente caro para nuestros clientes. Existen muchos algoritmos que pueden transmitirse por completo; por lo tanto, procesar TBs de datos no requiere TBs de RAM, y considerando que 1GB de RAM es aproximadamente 1000 veces más caro que 1GB de HDD, no se trata de un detalle de implementación.
Nuestro objetivo no es adherirnos a alguna perspectiva rígida sobre la ingeniería de software, sino mantener una perspectiva de ingeniería más amplia, que consiste en hacer lo máximo posible con el presupuesto que se tiene. En otras palabras, preferimos utilizar procesamiento in-memory siempre que supere a las alternativas, pero nada más.
Luego, dado que los recursos de computación no son completamente ajustables a demanda - por ejemplo, no se puede alquilar de forma realista una máquina sin caché de CPU - en Lokad, nos esforzamos por aprovechar al máximo todos los recursos por los que se está pagando, incluso si esos recursos no fueron estrictamente solicitados desde el inicio.