Sunteți pe pagina 1din 66

PROGRAMACIÓN

DISTRIBUIDA

07/28/11 By : Ing. Elías Cassal Baldiviezo


Objetivos
—Entender los conceptos básicos de
sistemas distribuidos y sus
problemáticas.
—Conocer diferentes sistemas distribuidos
de mayor uso.
—Conocer los conceptos teóricos sobre
Programación Distribuida sus Ventajas y
Desventajas.
—El alumno debe alcanzar un conocimiento
teórico de las distintas Tecnologías de la
Programación en Red.
—
CAPITULO I: Programación
distribuida.

Introducción a Sistemas Distribuidos

Definiciones

Sistema Distribuido

La Programación Distribuida Como Paradigma

Ejemplos

Ventajas de distribuir sistemas

Desventajas de distribuir sistemas

Implicaciones y Desafíos de distribuir
sistemas

Compartir Recursos

Transparencia

Usabilidad (abierto)

Escalabilidad

Tecnologías para la programación
distribuida.

07/28/11 By : Ing. Elías Cassal Baldiviezo


Bibliografía
—A.Tanenbaum, M.Van Steen.
Distributed Systems, principles and
paradigms. Ed. Prentice Hall, 2002.
—
—G.Coulouris, J.Dillmore, T.Kindberg.
Distributed Systems - Concept and
Design. Addison-Wesley, Third Edition,
2001.
—
—
—
Webgrafia
—http://dmi.uib.es/~bbuades/sistdistr/sld001.
—http://dis.um.es/~jbermudez/dad/transparen
—http://www.infor.uva.es/~cllamas/sd/temasP
—

07/28/11 By : Ing. Elías Cassal Baldiviezo


Introducción
Evolución de los
sistemas
— Desarrollos de microprocesadores.

1945 a 1980’s. 1 instrucción/seg. US$ 10.000.000

1980’s hasta hoy. 1.000.000.000 instrucciones/seg.
Menos de US$1.000.

Ganancia precio/rendimiento º 1013.
— Desarrollo de redes.

LAN. 10-100 – 1000 Mbps.

WAN. 64 kpbs - 2 Mbps.

Facilidad de interconexión.

Internet e Intranet.
— Alto desarrollo del hardware ...
—
Definiciones
— “Un Sistema Distribuido es una colección de
computadores independientes que aparecen
ante los usuarios como un único sistema
coherente.” (Andrew S. Tanenbaum)
—
— “Un sistema en el cual tanto los componentes de
hardware y software de un computador
conectados en red se comunican y coordinan
mediante paso de mensajes.” (G.Coulouris,
J.Dollimore, T.Kindberg)
—
— “Aquel que le impide a uno continuar su trabajo
cuando falla un computador del cual uno
nunca ha oído hablar.” (L.Lamport)
—
Sistema distribuido
—Un “Sistema Distribuido” se define
como una Colección de
Computadores autónomos
conectados por una red, y con el
Software Distribuido adecuado para
que el sistema sea visto por los
usuarios como una única entidad
capaz de proporcionar facilidades
de computación.

07/28/11 By : Ing. Elías Cassal Baldiviezo


Programación
Distribuida
como Paradigma

Paradigma de programación

enfocado en desarrollar sistemas distribuidos,
abiertos, escalables, transparentes y
tolerantes a fallos.

Resultado natural del uso de las
computadoras y las redes.
— Casi cualquier lenguaje de programación
que tenga acceso al máximo al hardware
del sistema puede manejar la
programación distribuida,
— La programación distribuida típicamente cae
en alguna de las varias arquitecturas
básicas o arquitecturas: cliente-servidor,
3-tier, n-tier, objetos distribuidos, entre
otras.

07/28/11 By : Ing. Elías Cassal Baldiviezo
Ejemplos de sistemas
distribuidos
—Red de estaciones de trabajo en una
Universidad

Espacio cuenta es visible desde todos los
computadores

—Workflow de manejo automático de


órdenes

Usado por múltiples usuarios, el flujo de las
órdenes es transparente para ellos
Ejemplos de sistemas
distribuidos
—World Wide Web (WWW)

Aparece antes los usuarios como un repositorio
gigantesco de documentos

—Factura electrónica en Chile



Muchos contribuyentes y compradores

Un ente centralizado (SII)

Back-office distribuido
Ventajas de distribuir
sistemas
—Economía
—Aumento en capacidad de
procesamiento.
—Aplicaciones inherentemente distribuidas.
—Capacidad de crecimiento.
—Fiabilidad y disponibilidad.
—Compartir recursos y datos.
Desventajas de
distribuir sistemas
—Aumento de la complejidad

Costos de administración
—Fallas más frecuentes

Red, Latencia, pérdida de mensajes
—Interoperabilidad

Falta de estándares únicos
—Seguridad

IMPLICACIONES Y DESAFIOS

07/28/11 By : Ing. Elías Cassal Baldiviezo


Implicancias de distribuir
los sistemas
—Concurrencia.

Recursos compartidos. Acceso concurrente.

Sincronización.
—Sin tiempo global.

Cada computador tiene su propio reloj local.

Coordinación.
—Fallas independientes.

Posibilidad permanente de fallas en cada
componente.

Detección de fallas y tolerancia.
Desafíos de los Sistemas
Distribuidos
—Compartir Recursos
—
—Transparencia
—
—Usabilidad (abierto)
—
—Escalabilidad
Compartir recursos
—El objetivo básico de los sistemas
distribuidos.

Usuarios deben tener acceso fácil a recursos
compartidos y compartir sus propios recursos de
forma controlada.

Impresoras

Computadores

Espacio de almacenamiento

Archivos, datos, páginas Web, redes, etc.
—Porqué compartir recursos ?

Costos, capacidad, escalabilidad
Transparencia
—Esconder el hecho que los recursos y
procesos están físicamente distribuidos
en diferentes máquinas.
—
—Un sistema distribuido que se presenta
hacia el usuario como una sola máquina
se dice ser transparente.
—
—Sin embargo, transparencia se aplica a
varios aspectos de sistemas
distribuidos…
Transparencia
—Acceso

Esconde las diferencias entre las distintas
representaciones de datos y la formas en que
éstos son accedidos por los usuarios.

Ejemplo: representación de un entero en una
máquina SPARC (big endian) y una INTEL (little
endian)
—Ubicación

Esconde la ubicación física de donde está situado
un recurso.

En particular se suele usar nombres lógicos en vez
de direcciones reales. Ejemplo, la URL en el Web.
Transparencia
—Migración

Esconde el hecho que recursos puedan migrar de
una ubicación física a otra sin afectar el modo en
que se acceda.

Ejemplo: las tareas ;-)
—Re-ubicación

Un caso aún más fuerte de migración. Los
recursos son movidos de una ubicación a otra
mientras están en uso y sin que el usuario note
nada.

Un uso típico es para balancear carga.
Transparencia
— Replicación

Esconde el hecho que un recurso pueda estar replicado
varias veces para mejorar su rendimiento y/o
disponibilidad.

Obviamente exige transparencia de ubicación

Ejemplo: servidor Web de Google
— Concurrencia

Esconde el hecho de que distintos usuarios están
“compitiendo” en paralelo por acceder o usar
recursos, o que un recurso está siendo compartido
con otros usuarios

Exige que el sistema se mantenga en un estado
coherente.

Ejemplo: bases de datos
Transparencia
— Fallas

El usuario no nota (inclusive nunca supo) que un
recurso ha dejado de funcionar (o se ha recuperado).

Es uno de los aspectos más duros en sistemas
distribuidos por la dificultad de detectar que un recurso
ha muerto.

Ejemplo: arreglos de discos RAID, Google File System.
— Persistencia

Esconde si un recurso de software está en disco o en
memoria

Aplicable a distintos sistemas, no sólo distribuidos

Ejemplo: servidores cache, proxy; conexiones
persistentes a bases de datos.
Transparencia
—La transparencia tiene límites y grados.


No siempre es posible esconder todo

Ejemplo: desfase temporal de comunicación entre
puntos muy distantes (delay).


Siempre hay un trade-off entre transparencia y
rendimiento

Ejemplo: Bases de datos replicadas world-wide. Un
caso particular son los servidores DNS que
pueden tomar días en actualizarse, lo cual no se
oculta al usuario.

Usabilidad
— Losrecursos y servicios son ofrecidos de
acuerdo a reglas estándares describiendo la
semántica y sintaxis.
— Usualmente estas reglas son descritas vía
protocolos o interfaces.

HTTP

Interface Definition Languages (IDL)

Web services
— Dos aspectos muy relevantes

Completitud

Neutralidad
Escalabilidad
— Se refiere a la capacidad de crecer de un
sistema
— La escalabilidad se puede dimensionar desde
tres aspectos

Tamaño: la capacidad de agregar fácilmente más
recursos y usuarios al sistema.

Geográfica: la capacidad de que usuarios y recursos se
encuentren a distancias considerables

Administración: La capacidad de mantener una
administración fácil a pesar del crecimiento
— Desafortunadamente los sistemas son
escalables en alguna de las dimensiones
sacrificando rendimiento en las otras

Hardware
—En forma general todo sistema
distribuido consiste en múltiple CPUs.

Memoria compartida (multi-procesadores)

Todos los CPU comparten el mismo espacio de
direcciones de memoria

Memoria independiente (multi-computadores)

Cada CPU tiene su propio espacio de direcciones de
memoria

Comunicación vía BUS

Canal compartido

Comunicación vía Switch

Canal exclusivo
Hardware
M M M M M M M

P P P P
P P P P

Memoria compartida - BUS Memoria independiente - BUS

M M M M M M M

P P P P

P P P P

Memoria compartida - Switch Memoria independiente - Switch


Multi-Procesadores
—Todos los CPU tienen acceso a una
memoria compartida

Un ejemplo es Symetric Multiprocesing (SMP).
—Exige coherencia en el estado de la
memoria.

En la medida que aumentan los CPUs mantener la
coherencia afecta fuertemente el rendimiento
—Es poco escalable y la escalabilidad es
cara
Multi-computadores
—Se subdividen en dos categorías:

Homogéneos

La arquitectura y memoria es igual o similar en
todos los nodos

Generalmente conectados a través de una única,
usualmente de alto rendimiento, interfaz de red.

Ejemplo típico: clusters.

Heterogéneos

Múltiples arquitecturas

Diferentes comunicaciones

Diferentes formas de comunicación

Ejemplo típico: GRID
Software
—Se encuentran tres variantes de
plataformas de software para sistemas
distribuidos


Sistemas operativos distribuidos

Sistemas operativos de Red

Middle-ware
Sistemas Operativos
Distribuidos
—Sistemas Operativos Monoprocesador

Múltiples procesos compartiendo recursos sobre
una máquina, gracias a un microkernel que
implemente una máquina virtual.

Interfaz
Interfaz del No
Sistema
del
operativo No hay
hay intercambio
intercambio directo
directo entre
entre módulos
módulos
Sistema operativo
Aplicación Módulo de Módulo de Módulo de Modo
usuario
De usuario memoria proceso archivos

Modo
kernel
Micro-kernel
Llamada
Llamada de
de Hardware
sistema
sistema
Sistemas Operativos
Distribuidos
—Sistemas Operativos Multiprocesador

Múltiples procesadores compartiendo datos a
través de memoria compartida.

Datos deben ser protegidos para garantizar
consistencia.

Múltiples procesadores deben ser transparentes
para la aplicación.

Primitivas de sincronización: semáforos, locks,
monitores.
Sistemas Operativos
Distribuidos
—Sistemas Operativos Multicomputador

Múltiples computadores conectados por red.

Cada procesador tiene su propia memoria.

Comunicación únicamente a través de paso de
mensajes.

Sincronización basada en semánticas particulares de
paso de mensajes

Máquina A Máquina B Máquina C

Aplicaciones distribuidas

Sistema operativo distribuido

Kernel Kernel Kernel

Red
Sistemas Operativos
Distribuidos
—Sistemas de Memoria Compartida
Distribuida

Múltiples procesadores, cada uno con su memoria.

Memoria compartida virtual sobre multicomputadores.

Problema de false sharing (memoria de dos procesos
en la misma página).

Memoria virtual global


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

7 11 1 1
0 2 5 1 3 6 4 memoria
1 1 1 3 5
9 8 0 2 4
CPU 1 CPU 2 CPU 3 CPU 4
False Sharing
Sistemas Operativos
de Red
— Dos o más computadores conectados por red.
— Comparten los diferentes recursos y la
información del sistema mediante la red.
— Novell Netware, Personal Netware,Windows NT
Server, UNIX, etc.

Máquina A Máquina B Máquina C

Aplicaciones distribuidas
Servicios Servicios Servicios
de de de
Red del Red del Red del
S.O. S.O. S.O.
Kernel Kernel Kernel

Red
Ejemplo: Antiguos
terminales UNIX
Independencia de uso
de servicios
Middle-Ware
— Capa de software que ejecuta sobre el sistema operativo local
de cada computador ofreciendo uno servicios distribuidos.
— Abstrae la complejidad y heterogeneidad de los computadores
del sistema
— Proporciona una API para la programación y manejo de
aplicaciones distribuidas

Máquina A Máquina B Máquina C

Aplicaciones distribuidas

Servicios del Middle-Ware


Servicios Servicios Servicios
de de de
Red del Red del Red del
S.O. S.O. S.O.
Kernel Kernel Kernel

Red
Tabla Comparativa
Item S.O. Distribuido S.O. de Red Middle-Ware
Multi-proc. Multi-comp.
Grado de Muy Alto Alto Bajo Alto
Transparencia
Mismo S.O. Sí Sí No No
Copias del S.O. 1 N N N
Comunicación Memoria Mensajes Archivos Específico al
compartida modelo
Manejo de Global, Global, Por nodo Por nodo
recursos central distribuido
Escalabilidad No Moderado Si Variable
Usabilidad Cerrada Cerrada Abierta Abierta
Organizaciones
típicas
—Cliente-Servidor
—
—2 (o más) capas
—
—Arquitecturas Modernas
Cliente-Servidor
Multicapas
Arquitecturas
Modernas
Tecnologías de
Programación
Distribuida

07/28/11 By : Ing. Elías Cassal Baldiviezo


ARQUITECTURA
CLIENTE SERVIDOR
— Es una arquitectura basada en el principio
clásico de divide y vencerás, donde el
procesamiento se fracciona entre dos
entidades fundamentales denominadas
cliente y servidor.
CLIENTE SERVIDOR
X% Proceso Y% Proceso

X + Y = 100%
Generalmente Y>X
ARQUITECTURA
CLIENTE SERVIDOR
Servidor(es)
Y% Procesamiento

Clientes inteligentes
X% Procesamiento
X + Y = 100%
ARQUITECTURA
CLIENTE SERVIDOR
—Surge en la década de los 80 como
respuesta a la evolución del hardware
en términos de redes, planteando un
modelo versátil, modular basado en
mensajes que permite incrementar la
flexibilidad, la escalabilidad y la ínter-
operación de los sistemas.

ARQUITECTURA
CLIENTE SERVIDOR
—El cliente se define como el PROCESO
que requiere un servicio en particular
—El servidor se define como el PROCESO
que provee dicho servicio
—Debido a que clientes y servidores son
conceptos a nivel software y no
hardware, una misma máquina puede
actuar como cliente y servidor al mismo
tiempo.
—
ARQUITECTURA

CLIENTE
VENTAJAS
SERVIDOR
—Aprovecha mejor el ancho de banda
—Aprovecha en mayor medida el hardware
—Mayor seguridad y autonomía
—Mejor manejo de la concurrencia
—Permite que los clientes trabajen GUI
mientras el servidor se centra en los
procesos centrales
—
ARQUITECTURA
CLIENTE SERVIDOR
— Algunos ejemplos:
— Servidor Web (Apache, IIS)
— Cliente Web (IExplorer, Google CRHOME, Mozilla)

Cliente WEB
Servidor WEB

Protocolo
ARQUITECTURA
CLIENTE SERVIDOR
—Servidor FTP (SFTP)
—Cliente FTP (Cute FTP, WS FTP)

Cliente FTP
Servidor FTP

Protocolo
ARQUITECTURA
CLIENTE SERVIDOR
—Servidor IRC (IRC Server) Cliente
IRC (Mirc, Pirch)

Cliente IRC
Servidor IRC

Protocolo
ARQUITECTURA
CLIENTE SERVIDOR
— Servidor de Bases de datos (Interbase, Oracle,
SyBase, MySql, SQL Server, Postgress) Cliente de
Base de Datos (IBManager,IBConsole, propia
aplicación)

Cliente Interbase

Servidor InterBase

Protocolo
ARQUITECTURA
CLIENTE SERVIDOR

Interacción de clientes y servidores

Servidor de DB
(MySQL)

Servidor WEB (Apache)


BE Ws et neil C

Cliente Win32 Servidor de Aplicaciones


(SkyCell) (PHP)

Servidor DB
Cliente Interbase (IBmanager) (InterBase)
ARQUITECTURA
CLIENTE SERVIDOR
CLIENTE SERVIDOR MULTICAPA (Glosario)

— CAPA: Conjunto de componentes de un aplicativo


que se dedican a una labor en particular
— CAPA DE PRESENTACIÓN (FrontEnd) : Todo aquello
que se enfoca en la interacción con el usuario final.
— REGLAS DEL NEGOCIO (Bussines rules) : Validaciones,
restricciones, reglamentos, protocolos y
normativas relativas a un dominio en particular.
— CAPA LÓGICA (Middle Tier, Middleware) : Todo aquello que
gestiona y hace valer las reglas del negocio
— CAPA DE ALMACENAMIENTO (BackEnd): Todos los
elementos dedicados a la persistencia del sistema
—
ARQUITECTURA
CLIENTE SERVIDOR
Ingeniería del Software

— MVC: (Modelo vista controlador) Patrón de diseño que


insta a desacoplar los elementos de
presentación de los de lógica. Planteado
inicialmente en SmallTalk.
— PATRON OBSERVER: Patrón de diseño que
plantea el desacoplamiento de presentación y
lógica permitiendo múltiples vistas para una
lógica en particular junto a la implementación
de un método de notificación y actualización
de vistas múltiples.
—
ARQUITECTURA
CLIENTE SERVIDOR

CLIENTE SERVIDOR DE 2 CAPAS


— La primera capa encapsula la presentación y la


lógica
— La segunda gestiona el almacenamiento y puede
almacenar parte de la lógica (Procedimientos
almacenados, triggers)
—

Presentac Almacenamien
ión to

Lógica
Lógica
ARQUITECTURA
CLIENTE SERVIDOR

CLIENTE SERVIDOR DE 2 CAPAS


— Buen manejo de concurrencia hasta con 100 usuarios


simultáneos aprox.
— Protocolos propietarios pueden causar problemas de
flexibilidad, portabilidad y escalabilidad.
—

Presentac Almacenamien
ión to

Lógica
Lógica
ARQUITECTURA
CLIENTE SERVIDOR

CLIENTE SERVIDOR DE 3 CAPAS
(Multicapa)
— Agrega una capa intermedia (middle tier)que permite
priorización y gestión de peticiones, gestión de balance,
entre otros.
— Buen manejo de concurrencia con miles de usuarios
simultáneos
— Protocolos estandarizados permiten gran flexibilidad,
portabilidad y escalabilidad.
—
—
Almacenamien
to
Presentac Lógica
ión Lógica
ARQUITECTURA
CLIENTE SERVIDOR
ARQUITECTURA
CLIENTE SERVIDOR

CLIENTE SERVIDOR DE 3 CAPAS
(Multicapa)
— Ejemplo: Google Servidor de indexación
— Millones de clientes
— (5’000.000 por día,
57 por segundo
Servidor de documentos
aprox.)

Servidor de balance
TECNOLOGÍAS

Capitulo I- Arquitecturas de componentes. Server-Side./ Server-
side component architectures
— 2.1- Necesidad de arquitecturas de componentes server-side
— 2.2- Soluciones para arquitecturas de componentes server-side.
Herramientas
— 2.3- Java: un lenguaje ideal para las arquitecturas de
componentes
— 2.4- Arquitecturas multicapa
— 2.5- Soluciones para arquitecturas server-side
— 2.6- J2EE
—

Capítulo 3- Servicios Middleware en J2EE
— 3.1- RMI (Remote Method Invocation)
— 3.2- JNDI (Java Naming and Diretory Interface)
— 3.3- Enterprise Java Beans
— 3.3-1. Introducción /Tipos
— 3.3-2. Session Beans
— 3.3-3. Entity Beans
— 3.4- Seguridad en EJB(con JBOSS)

07/28/11 By : Ing. Elías Cassal Baldiviezo



TECNOLOGÍAS
Capítulo 4- Client-Server CORBA Style
— 4.1- Objectos distribuidos CORBA
— 4.2- OMG's OMA (Object Management Architecture)
— 4.3- Corba 2.0
— 4.4- CORBA services
— 4.5- CORBA facilities


Capítulo 5- CORBA and C++ : Advanced Corba Programming with
C++
— 5.1- IOR, references and proxies.
— 5.2- OMG IDL
— 5.3- Client Side (proxies, referencias, paso de parámetros, etc.)
— 5.4- Server Side (implementación de servants)
— 5.5- Corba Services
— 5.5-1. Naming
— 5.5-2. Event
— 5.5-3. Balancer
— 5.5-4. IMR
—

Capítulo 6- .NET
— 6.1- Introducción
— 6.2- Arquitectura
07/28/11 By : Ing. Elías Cassal Baldiviezo
Glosario
— Un paradigma de programación
representa un enfoque particular o filosofía
para la construcción del software. No es
mejor uno que otro, sino que cada uno
tiene sus ventajas y sus inconvenientes.
También hay situaciones donde un
paradigma resulta más apropiado que
otro.

Imperativo o por procedimientos:

Declarativo

Funcional

Lógico

Orientado a objetos
07/28/11
 By : Ing. Elías Cassal Baldiviezo

S-ar putea să vă placă și