This GitHub repo has example exercises for the ITBA Distributed Systems course. Develop practical skills and learn key concepts to master distributed systems.
View the Project on GitHub GonzaloHirsch/Programacion-de-Objetos-Distribuidos
Hay muchos diferentes tipos de sistemas distribuidos.
Un RDBMS es un sistema/servicio que permite crear, actualizar y administrar bases de datos relacionales y la información contenida en las mismas.
Utilizan el Modelo Relacional, que significa que la información se guarda como un conjunto de relaciones representadas por tablas. La tabla tiene filas (registros) y columnas (atributos), cada fila tiene una primary key, y las relaciones se dan por las foreign key.
Un schema es la implementación física del modelo de datos y permite definir tipos de datos, que incluye constraints para los mismos, además de posibles optimizaciones de guardado, y también índices para optimizar la búsqueda.
También contiene Transacciones ACID, que son operaciones que cumplen:
Utiliza SQL (Structured Query Language), un lenguaje de dominio específico para manejar y consultar la información contenida. El SQL está basado en el álgebra relacional, y consiste de 3 sub-lenguajes, DDL (Data Definition Language, crear/alterar tablas), DML (Data Manipulation Language, insertar/modificar datos) y DCL (Data Control Language).
Los RDBMS tienen algunos problemas intrínsecos a la tecnología:
Conceptualmente se genera un “cubo” con la información dividida a partir de la granularidad de las operaciones que se quieren hacer.
Tienen diferentes acciones que se pueden hacer, como:
Hay que poder llevar los datos desde el RDBMS a la OLAP, para eso se usan operaciones de ETL, Obtención/Extracción (E), Transformación (T), y Carga (L). Estos procesos se hacen en forma batch periódicamente, toman mucho tiempo en procesar y las consultas son bastante rígidas.
Se define a partir de las 3 Vs:
La máquina por definición no puede procesar los datos de Big Data, y surgen problemas:
Los sistemas distribuidos conviene escalarlos horizontalmente antes que verticalmente, se busca mantener las transaparencias, es decir, trabajar con un sistema distribuido sin saber que está distribuido.
Busca resolver el guardado de información que no entra toda en 1 solo nodo.
Lo más conveniente es dividir la información entre los diferentes nodos. Si la partición es buena algunas ventajas son que, permite realizar escrituras más rápidas y eficientes, y acelerar las lecturas. Aunque sigue teniendo ciertas desventajas, como la coordinación del cluster y que los datos pueden quedar mal particionados si se utiliza una técnica incorrecta.
Tener 1 copia de cada partición en el sistema es peligroso, si se cae un nodo se puede perder/corromper la información. Deberían haber más de 1 copia de cada partición.
Al tener particionado y replicación, hay que tomar una decisión en torno a cuando considero al dato escrito y cuando se lo puede leer:
Hay 2 factores que indican la preferencia en consistencia:
Hay diferentes modelos de consistencia que nacen:
Capacidad del cluster de modificar la cantidad de nodos sin que el cluster quede offline.
Si algún nodo se cae, las particiones (principales y backup) se reasignan. Esto requiere coordinación, generalmente de un nodo master o nodo coordinador.