Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

¿Por qué cucaracha?

Bienvenido a CockroachDB: La Guía Definitiva, ¡y gracias por estar aquí! Con este libro, queremos ayudarte a aprender a crear e implementar aplicaciones con CockroachDB, la base de datos SQL distribuida creada para la nube.

En primer lugar, la pregunta que todo el mundo se hace: ¿Por qué el nombre CucarachaDB?

Un hecho inmutable de la ingeniería es que las cosas se rompen. A escala suficientemente grande, las cosas se rompen todo el tiempo. Los tipos de fallos que pueden ocurrir una vez al año en una sola máquina se convierten en sucesos diarios cuando estás ejecutando cientos de fragmentos. Un sistema que aspire a manejar la gran escala debe tratar la tolerancia a los fallos como una responsabilidad fundamental. Esta fue una de las ideas clave del marco MapReduce de Google. Al exigir que todos los cálculos se ajustaran a un marco relativamente restrictivo, resultó sencillo para el sistema volver a ejecutar automáticamente las piezas de trabajo necesarias tras un fallo.

Creemos que así es como debe ser: la replicación de alta disponibilidad debe ser el estado por defecto de una base de datos desde el primer día, no el resultado de un minucioso trabajo de configuración. Y de cara al día dos (o al día doscientos), la base de datos debe poder crecer junto con la aplicación, de modo que el éxito arrollador sea motivo de celebración, no de pánico.

Cuando nos propusimos construir una base de datos relacional desde cero, queríamos aportar coherencia, resistencia nativa, localidad de datos y escala masiva a las aplicaciones modernas en la nube. Nuestra visión era la de un sistema capaz de colonizar cualquier recurso que le dieras en la nube pública y luego optimizarse implacablemente. Una base de datos que utilizara el espacio disponible y alcanzara el equilibrio a través de un conjunto coordinado de nodos distribuidos globalmente, de modo que no sólo incorporara nuevos recursos, sino que -si una máquina o un centro de datos o incluso una región entera se caían- la base de datos simplemente igualara el resto de recursos disponibles.

Nuestro objetivo era construir una base de datos que fuera globalmente ubicua e imposible de erradicar... igual que la periplaneta brunnea, la molesta cucaracha común. Y así nació CockroachDB.

Construir CockroachDB

El origen de CockroachDB es una historia de necesidad. Literalmente, Spencer Kimball, Peter Mattis y yo, Ben Darnell, nos propusimos construir la base de datos relacional que nosotros mismos necesitábamos.

Después de trabajar juntos en Google, los tres tomamos rumbos distintos durante un tiempo. Al final acabamos juntos de nuevo (junto con el hermano de Spencer, Andy, un veterano de Microsoft SQL Server) en una startup llamada Viewfinder, creando una aplicación para organizar fotos y compartirlas socialmente. Nosotros, por supuesto, esperábamos que tuviera éxito, así que queríamos construir a escala. Al fin y al cabo, como dice Spencer: "A veces ocurren mierdas. Y, a escala, la mierda siempre pasa".

Resulta que, dada la historia de ese proyecto, no nos fue tan bien como para necesitar nunca una escalabilidad masiva, pero queríamos planificarla desde el principio. Tampoco queríamos encerrarnos en una base de datos monolítica, fragmentando MySQL ni nada parecido. Ya habíamos recorrido ese camino antes y sabíamos que no nos llevaba adonde queríamos ir. Esto nos hizo buscar opciones NoSQL como la mejor alternativa y finalmente nos decidimos por DynamoDB.

DynamoDB cumplía muchos requisitos: es escalable, rápido y predecible. Es muy similar a Bigtable, que yo había utilizado como backend para Google Reader cuando estaba en Google. Así que, al menos sobre el papel, nos gustó mucho ese modelo. Pero cuando adquirimos experiencia con él, nos dimos cuenta de que teníamos un par de problemas fundamentales con NoSQL.

La más importante fue que descubrimos que realmente necesitábamos índices secundarios. El modelo Bigtable/DynamoDB es realmente sólo de claves primarias; no existe el concepto de índices secundarios. Para conseguirlos, tuvimos que crear nuestra propia implementación parcial de transacciones sobre DynamoDB, lo cual era factible. Sin embargo, una vez que utilizamos este sistema, nos encontramos con un problema posterior. DynamoDB por sí solo es muy rápido, predecible y escalable, pero cuando empiezas a hacer cosas que combinan varios registros, como hacíamos con nuestros índices secundarios, las cosas se complican.

Al final, llegamos a un sistema que funcionaba, pero la superposición de transacciones e índices sobre DynamoDB era ineficaz, tanto en términos de rendimiento como de nuestros esfuerzos de ingeniería.

Durante este tiempo empezamos a hablar de la idea de construir una base de datos nosotros mismos, pero Viewfinder era una startup con un equipo pequeño. Decidimos: "Sabes, DynamoDB no es ideal, pero existe y podemos utilizarla hoy, así que eso es lo que haremos". Pero uno o dos años más tarde Square compró Viewfinder, y descubrimos que estaban luchando con MySQL fragmentado. Entonces nos dimos cuenta de que no se trataba sólo de nosotros, sino de una necesidad real de bases de datos que no estaba siendo satisfecha. En Square estábamos ahora en una buena posición para intentar construir un sistema que fuera intrínsecamente escalable y soportara índices secundarios. Así que ahí empezó realmente el esfuerzo en serio.

Spencer empezó con él como un proyecto paralelo de código abierto, al principio por las noches y los fines de semana. Luego consiguió algunos colaboradores más, y con el tiempo incluso se convirtió en un proyecto oficial en Square. Pero sabíamos que el verdadero destino de este proyecto era servir a todo el mercado de bases de datos, así que fue entonces cuando decidimos dejar Square y crear una empresa para hacer precisamente eso: Cockroach Labs se fundó en 2015.

Próximos pasos

Habiéndonos propuesto construir una base de datos tan indestructible como una intrusión de cucarachas, la siguiente pregunta era, por supuesto, qué otras capacidades necesitaría.

Creíamos que el enfoque correcto era adoptar las transacciones distribuidas desde el principio y convertirlas en parte integrante de la arquitectura. Y aunque SQL no es la idea que nadie tiene de un lenguaje de consulta perfecto, es el que todo el mundo conoce, con un conjunto de características probadas a lo largo del tiempo. La gestión declarativa de esquemas de SQL y la optimización de consultas basada en estadísticas proporcionan a los operadores potentes herramientas para gestionar el rendimiento de sus aplicaciones en tiempo de ejecución.

Así que la historia para llegar a la versión 1.0 de CockroachDB fue resolver el nuevo problema de escala más transacciones utilizando SQL. El resultado es una base de datos SQL distribuida globalmente y construida sobre un almacén de valores clave (KV) transaccional y consistente. Los principales objetivos de diseño son la compatibilidad con transacciones ACID, la escalabilidad horizontal, la baja latencia/alta disponibilidad y la capacidad de supervivencia. CockroachDB implementa un algoritmo de consenso Raft para la coherencia y pretende tolerar fallos de disco, máquina, bastidor e incluso del centro de datos con una interrupción mínima y sin intervención manual.

Una vez que empezamos a construirlo y desplegarlo, descubrimos que el mayor interés en lo que estábamos haciendo procedía de personas que trabajaban con implementaciones globales. Resulta que esto es algo que Cockroach es capaz de manejar de forma única, así que con la versión 2.0 empezamos a crear más y más funciones para la distribución global y geográfica.

Ha pasado mucho tiempo desde que lanzamos CockroachDB 2.0 y multiregión. Desde entonces, los mayores avances han sido CockroachDB Cloud, seguido de CockroachDB Serverless. Con ellos cumplimos nuestra siguiente misión: facilitar los datos. Nuestros días de startup en Viewfinder nos mostraron la necesidad de una base de datos que pudiera utilizarse en proyectos desde el primer día y que también creciera con ellos, sin quebrar la banca. Puedes autoalojar CockroachDB de código abierto localmente en un portátil, en un clúster de desarrollo corporativo o en una nube privada, así como en cualquier infraestructura de nube pública, pero el precio de entrada sigue siendo bastante considerable. El primer paso para que CockroachDB fuera accesible fue eliminar la carga operativa del usuario, y lo conseguimos con nuestro servicio alojado en la nube y totalmente gestionado, ahora llamado CockroachDB Dedicado.

Ahora hemos añadido CockroachDB sin servidor para ofrecer a los usuarios la posibilidad de utilizarlo desde el principio a bajo coste, o incluso sin coste, y luego escalarlo de forma asequible con tu uso. Aún estamos desarrollando las capacidades sin servidor, pero pronto dispondremos de multiregión sin servidor. Será entonces cuando podamos hacerlo lo suficientemente barato como para que todo el mundo construya multirregión por defecto.

¿Qué viene después? Bueno, seguimos explorando formas de utilizar las funciones nativas de la nube para ganar aún más eficiencia y reducir los costes operativos. Cosas como examinar el menú de diversas soluciones de almacenamiento que ofrecen las nubes y elegir las adecuadas para nuestros distintos tipos de necesidades de almacenamiento, en lugar de utilizar dispositivos de almacenamiento en bloque para todo, como hacemos actualmente. La multiregión sin servidor es definitivamente algo que estamos construyendo ahora mismo. Sin embargo, primero tenemos lo que hemos estado llamando sin servidor empresarial: la capacidad de una empresa para obtener clústeres dedicados que luego subdivides para tu propio uso privado al estilo sin servidor. En otras palabras, obtener la eficiencia operativa de la tecnología sin servidor, pero estando totalmente aislados.

Más adelante, queremos incorporar funciones definidas por el usuario y procedimientos almacenados. Esto es un pararrayos para el debate porque la gente tiene opiniones muy firmes, pero creo que cuando combinas funciones definidas por el usuario y procedimientos almacenados con una base de datos escalable, se vuelve realmente interesante. Puede transformar realmente tu forma de pensar sobre la arquitectura de tu aplicación, porque te permite trasladar más lógica a la base de datos.

¿Más especulativamente? Como arquitecto jefe de CockroachDB, me gustaría explorar formas en las que pudieras alojar toda tu aplicación, directamente desde la base de datos, utilizando procedimientos almacenados. Incluso decir eso en voz alta va a ser un poco controvertido, porque es el tipo de cosa que la gente intentó hacer en 1998 y, lo admitimos, no funcionó bien entonces. Sin embargo, creo que las cosas han evolucionado hasta el punto de que ahora puede ser el momento adecuado. Eso es todavía muy especulativo, sólo algo en lo que estoy pensando y no algo que esté oficialmente en la hoja de ruta de los Laboratorios Cucaracha en este momento. Pero me gustaría intentar crear algún tipo de prototipo en lugar de limitarme a hablar de ello. Quizá ahora que este libro está publicado, eso me deje algo de tiempo libre para experimentar.

Por qué escribimos este libro

Este libro pretende ayudarte a ti, lector, a comprender la arquitectura y las capacidades de CockroachDB, así como los casos de uso adecuados para CockroachDB. Al final de este libro, podrás empezar a utilizar CockroachDB, crear aplicaciones eficaces con él y, en última instancia, ejecutar un clúster en producción.

Los capítulos enseñan a los desarrolladores, arquitectos y equipos DevOps cómo crear, optimizar y gestionar aplicaciones que se ejecutan en CockroachDB. Escribimos este libro para dar a cualquier desarrollador, independientemente de cómo quiera trabajar con CockroachDB, los conocimientos y herramientas que necesita para hacerlo con eficacia.

A quién va dirigido este libro

Desarrolladores innovadores

CockroachDB: La Guía Definitiva es para desarrolladores que crean aplicaciones modernas, ya sea en una pequeña startup o en una gran empresa. Esta guía enseñará a los desarrolladores a crear y distribuir aplicaciones con menos obstáculos utilizando una potente base de datos SQL distribuida que simplemente funciona.

Arquitectos

La Guía Definitiva es para arquitectos modernos que proporcionan aplicaciones escalables y resistentes en todo su ecosistema de TI. Los arquitectos aprenderán a diseñar aplicaciones distribuidas para proporcionar baja latencia, alta disponibilidad y un rendimiento más rápido.

Equipos DevOps

La Guía Definitiva está dirigida a operadores de TI estratégicos que gestionan aplicaciones con cargas de trabajo intensivas en datos. Los operadores aprenderán a optimizar las capacidades inherentes de escala y resistencia de CockroachDB, distribuyendo eficazmente los datos para satisfacer cualquier demanda de carga de trabajo, dondequiera que se implemente.

Quienes ya estén familiarizados con los sistemas distribuidos descubrirán las ventajas de las sólidas garantías de corrección y consistencia de los datos, así como las optimizaciones para ofrecer transacciones de baja latencia a usuarios de cualquier parte del mundo.

Incluye orientaciones específicas para quien esté pasando de una base de datos monolítica (por ejemplo, MySQL o PostgreSQL) a una arquitectura distribuida, así como ejemplos prácticos para quien esté más familiarizado con los sistemas NoSQL.

Cómo está organizado este libro

Este libro contiene 15 capítulos divididos en tres secciones.

  • La Parte I, "Introducción a CockroachDB", establece el contexto histórico de CockroachDB, abarcando la evolución de las bases de datos y la aparición de las bases de datos distribuidas en la nube. Los lectores cubren los conceptos básicos de SQL distribuido, y luego se sumergen en la arquitectura y las capacidades de CockroachDB, seguidas de exámenes de casos de uso adecuados para CockroachDB. La Parte I termina con una guía práctica para empezar, tanto con una instalación local como con el servicio gratuito en la nube de Cockroach Labs, y una guía completa del dialecto SQL de CockroachDB.

  • La Parte II, "Desarrollo de aplicacionescon CockroachDB", cubre los fundamentos del diseño del esquema de CockroachDB. A continuación, los lectores trabajan en el diseño y la implementación de aplicaciones, así como en la integración con otras bases de datos y/o la migración desde ellas. Practicarás el trabajo con datos en CockroachDB, incluida la gestión de transacciones, la exploración de la captura de datos de cambios y el desarrollo de habilidades de ajuste SQL.

  • La Parte III, "Implementación y administración de CockroachDB", cubre la planificación y ejecución de implementaciones en una o varias regiones. Entre los temas esenciales se incluyen las copias de seguridad y la recuperación ante desastres; la seguridad; el monitoreo, la administración y la resolución de problemas; y la optimización del clúster.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://github.com/cockroachdb/definitive_guide_sample_code.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "CockroachDB: La Guía Definitiva de Guy Harrison, Jesse Seldess y Ben Darnell (O'Reilly). Copyright 2022 O'Reilly Media, Inc., 978-1-098-10025-4".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/cockroachDB-definitive-guide.

Envía un correo electrónico para comentar o hacer preguntas técnicas sobre este libro.

Para noticias e información sobre nuestros libros y cursos, visita http://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Síguenos en Twitter: http://twitter.com/oreillymedia.

Míranos en YouTube: http://youtube.com/oreillymedia.

Agradecimientos

Escribir este libro ha sido una verdadera empresa de colaboración, y los autores están agradecidos a las muchas personas que han ayudado a lo largo del camino, especialmente Andy Pavlo, Sean Chittenden y Matt Aslett, que han aportado sus conocedoras opiniones sobre SQL Distribuido y CockroachDB para compartirlas en (y sobre) este libro.

Los autores desean dar las gracias a la vital comunidad de código abierto que apoya y contribuye a CockroachDB, así como a los muchos Roachers que se unieron a Cockroach Labs para ayudarnos a ampliar y mejorar continuamente la base de datos. Nuestro agradecimiento especial a los revisores que aplicaron su experiencia en la materia -obtenida en la construcción de CockroachDB- a la cuidadosa revisión técnica de cada capítulo. A Andy Woods, Vy Ton, Piyush Singh, Liv Lobo, Abbey Russell, Keith McClellan y Chris Ireland, todos ellos de Cockroach Labs, les agradecemos sus atentas sugerencias y agudas correcciones que ayudaron a mejorar cada parte de este libro. Estamos igualmente agradecidos a los revisores externos Alan Beaulieu, consultor, y al ingeniero de software y especialista en aprendizaje automático Patrick Deziel, de Rotational Labs, LLC. También queremos dar las gracias a Jessica Edwards por guiar el proceso desde el primer día, y a Michelle Gienow por tomar el relevo y ayudarnos a cruzar la línea de meta.

Nos gustaría dar las gracias al equipo de O'Reilly, cuya diligencia y profesionalidad constantes nos mantuvieron en el buen camino y garantizaron que creáramos un libro útil y de alta calidad. Gracias especialmente a Angela Rufino, Andy Kwan y Sharon Cordesse: ha sido un verdadero placer trabajar con vosotros. Gracias también al equipo de producción: Christopher Faucher, nuestro editor de producción; Stephanie English, la correctora; Kim Cofer, la correctora de pruebas; Johnna VanHoose Dinse, nuestra indexadora; y Kate Dullea, la ilustradora de interiores.

Guy Harrison

Me gustaría dar las gracias a toda la gente de O'Reilly y CockroachDB que ha colaborado en el libro, y en particular a Ben y Jesse por darme la oportunidad de trabajar con ellos para escribir esta guía. Como "viejo" del equipo, llevo más de 20 años escribiendo libros sobre tecnología de bases de datos, y la oportunidad de trabajar en el perímetro de la tecnología moderna de bases de datos fue realmente emocionante. Por supuesto, me gustaría dar las gracias muy especialmente a mi maravillosa esposa, Jenny, que hace que cada día sea un buen día, y que toleró mi distracción y ausencia durante este proyecto.

Jesse Seldess

Me gustaría dar las gracias a todos los que han formado parte del equipo de Documentación de Cockroach Labs a lo largo de los años. Una buena documentación hace que los usuarios sean autosuficientes y estén contentos, y he tenido la suerte de trabajar con escritores dedicados y con talento que producen documentación de primera clase en la que los usuarios pueden confiar para su trabajo diario. Muchas, muchas gracias también a Guy Harrison; su amplia experiencia en bases de datos y desarrollo llevó este proyecto a nuevos niveles, y su productiva forma de escribir nos mantuvo en una discusión constructiva y en el buen camino. Por último, amor y agradecimiento a mi mujer, Leonie, y a mis hijos, Selma y Paz, por ayudarme a encontrar espacio y claridad para hacer mi parte en este libro, todo mi trabajo en Cockroach Labs, y mucho más.

Ben Darnell

Me gustaría dar las gracias a Spencer Kimball y Peter Mattis por ser colegas, cofundadores y verdaderos colaboradores en la creación de CockroachDB. Ha sido todo un viaje hasta ahora, y elaborar esta guía ha sido un recordatorio constante de lo lejos que hemos llegado desde que se nos ocurrió la loca idea de construir nuestra propia base de datos distribuida. Un enorme agradecimiento también a Guy Harrison, cuyo profundo conocimiento de las bases de datos existentes, unido a su diligencia en aprender Cockroach con la misma profundidad, contribuyó de forma inconmensurable al alcance y la minuciosidad del libro. También quiero dar las gracias a Brandi Evans por hacer posible que encontrara tiempo para ausentarme y trabajar en este proyecto. Sobre todo, quiero dar las gracias a mi mujer, Juliet Moser, por su apoyo y paciencia durante las noches y fines de semana que me llevó elaborar este libro, así como por las muchas otras razones por las que le estoy agradecido.

Get CockroachDB: La guía definitiva now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.