Prefacio

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

Este libro gira en torno a la tesis de que la capacidad de los sistemas de software para funcionar a escala es cada vez más un factor clave que define el éxito. A medida que nuestro mundo esté más interconectado, esta característica será cada vez más frecuente. De ahí que el objetivo de este libro sea proporcionar al lector los conocimientos básicos de los sistemas distribuidos y concurrentes. También presenta una colección de enfoques de arquitectura de software y tecnologías distribuidas que pueden utilizarse para construir sistemas escalables.

¿Por qué escalabilidad?

El ritmo del cambio en nuestro mundo es sobrecogedor. Las innovaciones aparecen a diario, creando nuevas capacidades para que todos podamos interactuar, hacer negocios, entretenernos... incluso acabar con las pandemias. El combustible de gran parte de esta innovación es el software, escrito por auténticos ejércitos de desarrolladores en grandes empresas de Internet, pequeños equipos de crack en startups, y equipos de todas las formas y tamaños intermedios.

Ofrecer sistemas de software que respondan a las necesidades de los usuarios ya es bastante difícil, pero resulta un orden de magnitud más difícil hacerlo para sistemas a escala. Todos conocemos sistemas que fallan repentinamente cuando se exponen a cargas elevadas inesperadas; estas situaciones son (en el mejor de los casos) mala publicidad para las organizaciones y, en el peor, pueden provocar la pérdida de puestos de trabajo o la destrucción de empresas.

El software se diferencia de los sistemas físicos en que es amorfo: su forma física (1s y 0s) no se parece en nada a sus capacidades reales. Nunca esperaríamos transformar un pequeño pueblo de 500 habitantes en una ciudad de 10 millones de la noche a la mañana. Pero a veces esperamos que nuestros sistemas de software gestionen de repente un número de solicitudes mil veces mayor para el que fueron diseñados. Como es lógico, los resultados no suelen ser agradables.

A quién va dirigido este libro

Los principales destinatarios de este libro son los ingenieros de software y los arquitectos que tienen una experiencia nula o limitada con los sistemas concurrentes distribuidos. Necesitan profundizar en sus conocimientos teóricos y prácticos de diseño para afrontar los retos de crear aplicaciones a gran escala, normalmente orientadas a Internet.

Lo que aprenderás

Este libro abarca el panorama de los sistemas concurrentes y distribuidos a través de la lente de la escalabilidad. Aunque es imposible divorciar totalmente la escalabilidad de otras cualidades arquitectónicas, la escalabilidad es el principal foco de discusión. Por supuesto, también entran en juego otras cualidades, como el rendimiento, la disponibilidad y la coherencia.

Construir sistemas distribuidos requiere una cierta comprensión fundamental de la distribución y la concurrencia: este conocimiento es un tema recurrente a lo largo de este libro. Es necesario debido a los dos problemas esenciales de los sistemas distribuidos que los hacen complejos, como describo a continuación.

En primer lugar, aunque los sistemas en su conjunto funcionan correctamente casi todo el tiempo, una parte individual del sistema puede fallar en cualquier momento. Cuando falla un componente (ya sea por un fallo del hardware, una interrupción de la red, un error en un servidor, etc.), tenemos que emplear técnicas que permitan al sistema en su conjunto continuar funcionando y recuperarse de los fallos. Todo sistema distribuido experimentará fallos de componentes, a menudo de formas extrañas, misteriosas e imprevistas.

En segundo lugar, crear un sistema distribuido escalable requiere la coordinación de múltiples partes móviles. Cada componente del sistema tiene que cumplir su parte del trato y procesar las peticiones lo más rápidamente posible. Si un solo componente provoca retrasos en las solicitudes, todo el sistema puede funcionar mal e incluso llegar a bloquearse.

Existe una rica literatura disponible para ayudarte a afrontar estos problemas. Por suerte para nosotros, los ingenieros, también existe una amplia colección de tecnologías diseñadas para ayudarnos a construir sistemas distribuidos tolerantes a fallos y escalables. Estas tecnologías incorporan enfoques teóricos y algoritmos complejos que son increíblemente difíciles de construir correctamente. Utilizando estas tecnologías a nivel de plataforma, ampliamente aplicables, nuestras aplicaciones pueden subirse a hombros de gigantes, permitiéndonos construir sofisticadas soluciones empresariales.

En concreto, los lectores de este libro aprenderán:

  • Las características fundamentales de los sistemas distribuidos, incluyendo la gestión de estados, la coordinación temporal, la concurrencia, las comunicaciones y la coordinación

  • Enfoques arquitectónicos y tecnologías de apoyo para construir servicios escalables y robustos

  • Cómo funcionan las bases de datos distribuidas y cómo pueden utilizarse para construir sistemas distribuidos escalables

  • Arquitecturas y tecnologías como Apache Kafka y Flink para construir sistemas de streaming basados en eventos

Nota para educadores

Gran parte del contenido de este libro se ha desarrollado en el contexto de un curso avanzado de licenciatura/grado de la Universidad Northeastern. Ha demostrado ser un enfoque muy popular y eficaz para dotar a los estudiantes de los conocimientos y habilidades necesarios para lanzar sus carreras en las principales empresas de Internet. En el sitio web del libro hay materiales adicionales disponibles para apoyar a los educadores que deseen utilizar el libro en su curso.

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.

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://oreil.ly/fss-git-repo.

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 "Fundamentos de las Soluciones Escalables por Ian Gorton (O'Reilly). Copyright 2022 Ian Gorton, 978-1-098-10606-5".

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 https://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/scal-sys.

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 https://oreilly.com.

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

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

Míranos en YouTube: https://www.youtube.com/oreillymedia

Agradecimientos

Nada de este trabajo habría sido posible sin la inspiración que me proporcionó mi asesor de posgrado, el profesor Jon Kerridge. Su entusiasmo sin límites me ha impulsado en este trabajo durante tres décadas.

Matt Bass y John Klein, de la Universidad Carnegie Mellon, fueron unos recursos inestimables en las primeras fases de este proyecto. Les doy las gracias por las magníficas discusiones sobre todo el espectro de las arquitecturas de software escalables.

Mis revisores han sido excelentes -diligentes y perspicaces- y me han mantenido en el buen camino. Mi eterna gratitud a Mark Richards, Matt Stine, Thiyagu Palanisamy, Jess Males, Orkhan Huseynli, Adnan Rashid y Nirav Aga. Y muchas gracias a Virginia Wilson por arreglar mis palabras torcidas.

También me gustaría dar las gracias a todos mis alumnos, y especialmente a Ruijie Xiao, del curso CS6650 Building Scalable Distributed Systems de la Universidad Northeastern de Seattle. Me habéis proporcionado información inestimable sobre la mejor manera de comunicar los numerosos y complejos conceptos que se tratan en este libro. ¡Sois los mejores conejillos de indias!

Get Fundamentos de los sistemas escalables 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.