¿Qué es y qué no es un sistema distribuido?

Anuncio
¿Qué es y qué no es un
sistema distribuido?
M.C. Juan Carlos Olivares Rojas
Distribuir
• Según el diccionario: “dividir una cosa entre
varios designando lo que a cada uno
corresponde”
• Problemática: muchas tecnologías aparentan
ser distribuidas como cómputo paralelo,
concurrencia, grid computing, P2P, sistemas
con múltiples procesadores o núcleos, etc.,
pero ¿realmente lo son?
¿Qué es un Sistema Distribuido
(SD)?
• “Es una colección de computadoras
independientes que aparecen ante los
usuarios del sistema como una única
computadora” [1] (Principio de transparencia)
• El objetivo de los SDs es descentralizar el
cómputo basándose en el paradigma de
“divide y vencerás”; logrando mayor eficacia,
mayor tolerancia a fallos, seguridad, mayor
velocidad, entre otros.*
¿Qué es un Sistema Distribuido
(SD)?
• Para lograr la distribución del cómputo se
necesitan de diversas entidades que puedan
atender una determinada cantidad de
procesos en un momento determinado.
• Según [2] la mayor problemática de los SDs
es la gran heterogeneidad tanto en software y
en especial en hardware, ya que se necesita
de mucho esfuerzo para lograr la
transparencia.
Arquitecturas de cómputo
• Taxonomía de Flynn:
– SISD (Single Instruction Single Data) Procesador
único.
– SIMD (Single Instruction Multiple Data).
Procesadores vectoriales (multimedia)
– MISD (Multipe Instruction Single Data). No
implementada
– MIMD Multiple Instruction Multiple Data. Cómputo
distribuido
Cómputo Distribuido
• La distribución del cómputo puede realizarse
de diversas formas de acuerdo a su grado de
acoplamiento en:
– Fuertemente
acopladas:
Multiprocesadores
(memoria compartida). UMA (Uniform Memory
Acces)
– Débilmente
acopladas:
Multicomputadoras
(memoria privada). NUMA (Non Uniform Memory
Access)
Sistemas multiprocesadores
• Son sistemas que tienen dos o más
procesadores (CPU), comparten las misma
memoria (espacio de direcciones).
• Los sistemas multinúcleos es la nueva
tendencia en el desarrollo de sistemas
multiprocesadores. En un solo chip se tienen
varios procesadores (no es nada nuevo bajo
el sol).
Sistemas multiprocesadores
CPU 1
CPU 2
…
CPU n
N1
Memoria
Tarjeta madre
…
Nn
CPU
Memoria
Tarjeta madre
Modelo de n procesadores
Modelo de n núcleos
Sistemas multicomputadoras
• Son sistemas donde cada unidad de proceso
es autónoma e independiente de las demás
pero trabajan de manera conjunta.
• La interconexión de unidades de proceso se
hace a través de redes de computadora de
preferencia de altas velocidades.
• Este es el concepto más estandarizado de un
SD.
Sistemas Distribuidos
• Generalmente
están
asociado
al
modelo
cliente/servidor (c/s). Muchos servicios de Internet
siguen este modelo: Web, e-mail, etc.
• En el modelo c/s, el proceso cliente realiza
peticiones de procesamiento al proceso servidor,
realizando éste último el trabajo pesado.
• Existen otros modelos como P2P (par a par), cluster
y grid computing.
Sistemas Distribuidos
Cliente 1
Solicitud
Cliente
.
Servidor
Respuesta
Cliente n
Modelo Cliente/Servidor Tradicional
Cliente
.
Servidor
Proxy en
el lado
cliente
Modelo Cliente/Servidor Concurrente
Proxy en
el lado
servidor
Modelo Cliente/Servidor de n capas
Cliente
Sistemas Distribuidos
C0
Coordinador
C2
C1
…
C1
Cn
C2
P2P
Cn
Cluster
Simétrico
Grid computing
Asimétrico
Planificador
Planificador
CPU
Memoria
Disco
C1
CPU
Memoria
DISCO
C2
Planificador
.
.
.
CPU
MEMORIA
Disco
Cn
Tecnologías de Sistemas Distribuidos
•
•
•
•
Sockets (API Berkeley, WinSocks) C, Java, etc.
RPC (Remote Procedure Call) C
RMI (Remote Method Invocation) Java
DCOM (Distributed Component Object Model)
Propietario de Microsoft
• CORBA (Common Object Request Broker
Architecture) C, C++, Java, etc
• .NET Remoting C#, C++, J#, etc.
• Servicios Web (SOA), XML (SOAP, WSDL, UDDI)
Sistemas Distribuidos
• P2P (Peer to Peer) los procesos son totalmente
descentralizados, funcionan como clientes y
servidores a la vez, existen diversas arquitecturas
[3].
• Cluster es una agrupación de computadoras
intercomunicadas entre sí a través de un nodo
central y cuyo objetivo es realizar una tarea
específica.
• Grid computing es muy parecido a P2P y al cluster.
Sistemas Distribuidos
• Grid computing se parece al cluster en que
consisten
en
una
asociación
de
computadoras con la única diferencia de que
no existe un nodo centralizador. Está
característica lo asemeja a P2P [4].
• La idea del grid es que el poder de cómputo
siempre esté presente a semejanza de la red
eléctrica.
¿Es el cómputo paralelo un sistema
distribuido?
• Sí y No. Depende de la implementación.
• Los objetivos de la programación en paralelo
de acuerdo con [5] son:
– Reducir el tiempo de procesamiento utilizado por
un algoritmo convencional
– Reducir la complejidad del algoritmo
Paralelismo
A
B
C
D
A
P1
B
P2
C
P3
D
P4
A
B
A
B
C
D
P1
P2
C
D
Homoparalelismo
P3
P4
Hetereoparalelismo
Paralelismo
• El problema del paralelismo radica en que
muchos algoritmos no pueden paralelizarse
(son serializable o secuenciales) [6].
• Existen dos
paralelismo:
tecnologías
para
realizar
– PVM (Parallel Virtual Machine) [7]
– MPI (Message Parking Interface) [8][9][10]
Algoritmo paralelos
for(int i = 0; i < 4; i++)
{
aleatorio(i);
}
aleatorio(1) micro1
aleatorio(2) micro2
aleatorio(3) micro3
aleatorio(4) en espera
• Compilador
optimizados
optimizado.
Sistemas
Operativos
Algoritmos paralelos
• Instrucciones como while son más difíciles de
paralelizar por que depende de la condición.
• No siempre los compiladores pueden
paralelizar de manera automática un
algoritmo.
• En algunas ocasiones se invierte más tiempo
tratando de paralelizar un algoritmo que
ejecutándolo de manera secuencial.
Algoritmos paralelos
//Procesador uno
for( i=0; i<N/2; i++)
{
a[i]= c+i;
}
//Procesador uno
for( i=0; i<N/2; i++)
{
a[i]= c+i;
}
//Procesador dos
for( ; i<N; i++)
{
a[i]= c+i;
}
//Procesador dos
for( i = N/2; i<N; i++)
{
a[i]= c+i;
}
Algoritmos paralelos
A[0] = C;
//Procesador uno
for( i=1; i<N/2; i++)
{
a[i]= a[i-1]+1;
}
//Procesador 2
for( i=N/2; i<N; i++)
{
a[i]= a[i-1]+1;
}
• ¿Por qué no se puede
paralelizar?
• Por
que
el
segundo
proceso
depende
del
resultado del primero.
• Si se puede si se encuentra
un algoritmo que permita
encontrar el valor de a[N/2]
directo.
N /2
∑i
i =C
Caso práctico MPI
• LAM/MPI, MPICH, MPICH2
• mpd –ncpus=procesadores &
• mpdtrace -1
• mpicc holamundo.c –o holamundo
• mpirun –np 10 ./holamnudo
Holamundo.c en MPI
#include <stdio.h>
#include “mpi.h”
int main(int argc, char **argv)
{
int procesos, rango, tam;
char nombre[MPI_MAX_PROCESSOR_NAME];
MPI_Iinit (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &procesos);
MPI_Comm_rank(MPI_COMM_WORLD, &rango;
MPI_Get_processor_name(nombre, &tam);
MPI_barrier(MPI_COMM_WORLD);
printf(“Hola, mudo!, soy %d de %d y me ejecuto en:%s\n”, rango,
procesos, nombre);
MPI_Finalize();
return 0;
}
Esquema de un programa en MPI
Esquema de un programa en MPI
/*Cabecera de MPI*/
#include <mpi.h>
int main(int argc, char **argv)
{
int quiensoy, tamano;
MPI_Status estado;
/*Inicializamos MPI*/
MPI_Init(&argc, &argv);
/*Preguntamos quienes somos*/
MPI_Comm_rank(MPI_COMM_WORLD, &quiensoy);
/*Nos esperamos hasta quetodos hayan inicializado MPI*/
MPI_Barrier(MPI_COMM_WORLD);
/*Preguntamos cuanto somos*/
MPI_Comm_size(MPI_COMM_WORLD, &tamano);
/*PROGRAMA*/
Esquema de un programa en MPI
if(quiensoy == root)
{
/*Inicialización estrructuras repartidor
Reparte tareas
Espera resultados
Visualiza resultados*/
}
else
{
/*recibe la tarea
realiza cálculos
manda resultados*/
}
/*Finaliza el programa*/
MPI_Finalize();
exit(0);
}
¿Existe un rendimiento extra al
utilizar multiprocesadores?
• Las aplicaciones deben estar optimizadas para
poder ejecutarse en diferentes procesadores.
• Algunos sistemas operativos permiten ejecutar hilos
o procesos hijos en diversos procesadores
• El rendimiento no es del todo proporcional a la
cantidad de procesadores (un sistema con 4
procesadores no es 4 veces mejor que un sistema
de un solo procesador).
¿No existe cómputo distribuido en un
único procesador?
• Formalmente no, se tiene el concepto de
concurrencia y multitarea.
• En el pasado las computadoras sólo podían
realizar una tarea a la vez. Existía mucho
tiempo muerto al acceder recursos
• Se reparte el tiempo de CPU aparentando
que varios procesos se ejecutan al mismo
tiempo.
¿No existe cómputo distribuido en un
único procesador?
• Se debe tomar en cuenta la comunicación
interprocesos (IPC) el cual consiste de
mecanismo para controlar los procesos que
se ejecutan (sockets, semáforos, colas, etc.)
• Es posible ejecutar n procesos distribuidos en
una sola computadora, ya que cada proceso
tiene su propio espacio de direcciones y
cuentan con una interfaz de red local.
Conclusiones
• SD es aquel cuyas entidades de
procesamiento
son
autónomas,
independientes, no comparten memoria y
están interconectadas por una red de
computadoras (pudiendo estar distribuidas
geográficamente alrededor del mundo)
• Algunas tecnologías no son propiamente
distribuidas. El uso de sistemas distribuidos y
tecnologías afines va en amplio aumento.
¿Preguntas?
Referencias
• [1]
A.
Tanenbaum,
“Sistemas
Operativos
Distribuidos”, Prentice Hall, México, 1996, pp. 617,
ISBN: 0-13-219908-4
• [2] G. Colouris, et al., “Sistemas Distribuídos.
Conceptos y Diseño”, tercera edición, Pearson
Addison Wesley, Espana, 2005, pp. 726, ISBN: 847829-049-4
• [3] R. Millán, “Domine las redes P2P”, Alfaomega,
México, 2006, ISBN: 970-15-1206-5, pp. 330.
Referencias
• [4] C. Pérez, “Oracel 10g. Administración y
Análisis de Bases de Datos”, Alfaomega RaMa, México, 2005, ISBN: 970-15-1102-6, pp.
671
• [5] G. Salazar y V. Ayala Ramírez,
“Programación en paralelo en sistemas
multiproceso”, VI CIECE, Morelia, Michoacán,
México, 1996, pp. 279-285.
Referencias
• [6] R. Sedgewick, “Algoritmos en C++”,
Pearson Educación, México, 2000, ISBN:
968-444-401-X, pp. 726.
• [7] M. Farías, P. Rayon y M. Lazo,
“Programación paralela de un algoritmo para
el cálculo de testores con PVM”, Temas
selectos (selected works ) de investigaciñon
C.I.C. 1997, pp. 118-125, ISBN: 970-183427-5
Referencias
• [8] S. Gómez, “Programación paralela(I)”,
revista sólo programadores, año 12, segunda
época, no. 135, España, pp. 54-60.
• [9] D. Santo, “Message Passing Interface(II)
Configurando y compilando MPI”, revista
Mundo Linux, año VIII, no. 90, pp. 42-47
• [10] D. Santo, “Message Passing Interface(III)
Programando para MPI”, revista Mundo
Linux, año VIII, no. 91, pp. 28-33.
Contacto
• E-mail: [email protected]
• MSN: [email protected]
• Skype: juancarlosolivares
• Instituto Tecnológico de Morelia
• Departamento de Sistemas y Computación
• Av. Tecnológico 1500 Col. Lomás de
Santiaguito
• Morelia, Michoacán, México
Curriculum Vitae
• M.C. en Ciencias de la Computación, CENIDET
2006
• Ing. Sistemas Computacionales, I.T. Morelia
• Profesor tiempo parcial I.T. Morelia
• Profesor tiempo parcial UNID Morelia
• Áreas de investigación: Sistemas Distribuidos,
Cómputo Móvil, Redes Inalámbricas, Base de Datos
y Sistemas Empotrados.
Descargar