Utilización de programación funcional distribuida y
Transcription
Utilización de programación funcional distribuida y
Utilización de programación funcional distribuida y clusters Linux en el desarrollo de servidores de vı́deo bajo demanda∗ M. Barreiro, V. M. Gulı́as, J. Mosquera, J. J. Sánchez Universidade da Coruña Departamento de Computación Campus de Elviña – 15071 A Coruña (SPAIN) e-mail: {enano,gulias,mosky,juanjo}@lfcia.org Resumen El vı́deo bajo demanda (VoD) es un servicio que permite al usuario solicitar cualquier contenido multimedia en cualquier momento, sin estar sujeto a programaciones preestablecidas. La mayorı́a de las soluciones actuales de este tipo poseen un coste elevado, además de poca flexibilidad y escalabilidad. El servidor que se describe en este artı́culo, diseñado con una arquitectura jerárquica, implementado mediante un lenguaje de programación funcional (Erlang) y construido sobre una arquitectura de clusters Linux de bajo coste (Beowulf), presenta caracterı́sticas que permiten satisfacer la mayorı́a de los requisitos tradicionales que se le plantean a un servicio de este tipo. El sistema resultante se puede adaptar con flexibilidad a la topologı́a de red subyacente y puede escalarse para soportar un número creciente de usuarios concurrentes, todo ello con una solución de bajo coste, utilizando ordenadores de consumo. Después un diseño inicial del sistema, donde la estructura jerárquica era estática y de tres capas especializadas (streaming, caché y almacenamiento masivo), y tras las primeras implementaciones y pruebas de rendimiento y adaptación, se ha ido evolucionando la arquitectura hacia un número variable de capas, compuestas por módulos con una interfaz conocida, dotando a la solución de una mayor capacidad de adaptación y versatilidad. Keywords: Programación Funcional, Programación Distribuida, Cluster, Linux, Erlang, Vı́deo bajo Demanda. 1 Introducción Un servidor de Vı́deo Bajo Demanda (Video On Demand, VoD) es un sistema que proporciona servicios de vı́deo, en los cuales un usuario puede solicitar un VO (Video Object) en cualquier momento, sin restricciones temporales preestablecidas. ∗ Parcialmente financiado por FEDER TIC-1FD97-1759, Xunta de Galicia PGIDT99COM10502 y UDC 2000-5050252026 Los servicios de pelı́culas bajo demanda, herramientas de aprendizaje a distancia, o servicios informativos que permitan al usuario visualizar únicamente las noticias que le interesan, son algunos de los muchos ejemplos de aplicaciones multimedia que pueden hacer uso de este tipo de servidores. Los sistemas de vı́deo bajo demanda deben satisfacer una serie de requisitos derivados de su funcionalidad, entre los cuales destacan: • Gran capacidad de almacenamiento: en la mayorı́a de sus aplicaciones, el sistema deberá ser capaz de ofertar al usuario un amplio abanico de objetos multimedia, que serán almacenados de algún modo en la arquitectura del servidor. • Gran ancho de banda: el hecho de que los contenidos multimedia se caracterizan por hacer uso de un elevado ancho de banda, unido a la necesidad de dar servicio a un número elevado de usuarios, hace necesario que el servidor sea capaz de aprovechar un gran ancho de banda. • Tiempo de respuesta predecible: cuando un usuario solicite un objeto de vı́deo, el sistema debe ser capaz de realizar, mediante estimaciones estadı́sticas que hagan uso del estado del sistema en ese momento, una aproximación del tiempo de espera. Además, el servidor debe tratar en todo momento de que el tiempo de espera sea el mı́nimo posible para todos los usuarios. • Soportar a gran número de usuarios concurrentes: el sistema debe ser capaz de gestionar un número elevado de peticiones, que pueden realizarse al mismo tiempo. • Tolerancia a fallos: un servidor de estas caracterı́sticas, con un funcionamiento de 24 horas al dı́a, necesita poseer mecanismos, tanto hardware como software, de reacción ante posibles fallos, cambio de código en caliente, etc. Además de los requisitos tradicionales en este tipo de servidores, a la solución presentada en este artı́culo se le han añadido otros tres, muy importantes, que condicionan las decisiones de diseño: • Escalabilidad: el sistema debe ser capaz de dar servicio a un número reducido de usuarios en un contexto simple (escalabilidad hacia abajo), y de crecer mediante un incremento de los recursos utilizados en él, para dar soporte a un número cada vez mayor de usuarios concurrentes (escalabilidad hacia arriba). • Adaptabilidad: se ha intentado diseñar un sistema que sea adaptable a la topologı́a de red subyacente, haciendo un uso optimizado de las capacidades de dicha red. • Bajo coste: se plantea el reto de satisfacer todos los requisitos anteriores con una arquitectura que permita reducir el coste de implementación y puesta en explotación de un sistema de estas caracterı́sticas. En el presente artı́culo se plantea el diseño de un servidor de vı́deo, su implementación, y las decisiones posteriores de rediseño y mejora, que permiten satisfacer de un modo óptimo todos los requisitos planteados con anterioridad. Para ello, se ha utilizado una arquitectura jerárquica y el paradigma funcional de programación, combinado con la programación paralela (Erlang). El artı́culo está estructurado del siguiente modo: en la sección 2 se hace un resumen del estado del arte relacionado con la implementación de servidores de VoD, en la sección 3 se hace una introducción al servidor de video propuesto, describiendo además el cluster Beowulf utilizado para su implementación y las tecnologı́as clave usadas durante el desarrollo. Finalmente, en la sección 4, se exponen una serie de refinamientos a la idea original, encaminados a que el servidor cubra las necesidades en producción del sistema. 2 Estado del arte En los últimos años las empresas más importantes que comercializan productos multimedia han desarrollado sistemas relacionados con el vı́deo bajo demanda. Algunas de las soluciones están más adaptadas a redes de bajo ancho de banda, como es el caso del RealVideo Server, de Real Networks, que hace uso de tecnologı́as de caché de los streams para optimizar el uso de una red con las caracterı́sticas de Internet, o Microsoft Windows Media Server, que utiliza protocolos propietarios y puede ser utilizado en entornos de un mayor ancho de banda con un rendimiento menor. Otras soluciones se enfocan más a entornos LAN o MAN, con mayor disponibilidad de ancho de banda. Las más representativas son el Darwing Streaming Server [1], de Apple, que es la versión de código abierto del Quicktime Streaming Server, y sólo es un servidor de streaming RTP, sin incluir la gestión del almacenamiento distribuida como la que forma parte de la solución que se presenta; DB2 Digital Library Video Charger [19], de IBM; Oracle Video Server [13, 14], quizá el más utilizado de todos, con arquitectura cliente/servidor, pero con limitaciones de escalabilidad; Kassenna MediaBase, una evolución del WebForce MediaBase, de SGI, con caracterı́sticas comunes al diseño presentado en este trabajo (modular, separación de funciones de adquisición, distribución y streaming, basado en sistemas UNIX), pero una menor flexibilidad y capacidad de adaptación; Philips WebCine Server [15], servidor de streaming MPEG4 basado en Linux; Cisco IP/TV [7], solución cerrada con herramientas orientadas al mercado de formación; y el sistema de SUN: StorEdge Media Central [17]. También existen soluciones de caja negra, que consisten en la combinación de un hardware especializado con alguno de los productos anteriores. En general, el análisis en detalle de estos productos, conduce a la conclusión de que la mayorı́a representan soluciones caras, cerradas, no escalables y no adaptables. En el contexto académico la mayorı́a de los proyectos poseen un carácter altamente experimental. En [4] se analiza una solución jerárquica para la construcción de servidores multimedia que ha sido tomada como fuente de inspiración para algunas de las ideas del servidor presentado en este proyecto. El Stony Brook Video Server Project [5, 6, 18] intenta crear un servidor distribuido que proporcione al usuario caracterı́sticas de indexación, búsqueda y streaming de vı́deos, y está desarrollada con una interesante arquitectura cliente servidor, adaptada para redes locales. En [8] se presenta una alternativa totalmente distinta a la expuesta en este artı́culo, utilizando una arquitectura de memoria compartida. Un estudio más detallado de algunas de estas soluciones se puede encontrar en [16]. 3 VoDKA: un servidor VoD funcional distribuido Para satisfacer todas las necesidades expuestas anteriormente, se propone una arquitectura innovadora, basada en un sistema de almacenamiento distribuido y jerárquico, construida sobre clusters Linux formados por componentes de consumo [3]: VoDKA (Video on Demand Kernel Architecture). La arquitectura jerárquica permite dividir la funcionalidad del sistema entre los distintos niveles, dando lugar a una especialización mayor, que hace viable la satisfación de requisitos incompatibles a priori. Por ejemplo: la difı́cil convivencia entre un almacenamiento de alta capacidad y bajo coste y una elevada velocidad de respuesta tiene solución en la división en varias capas, que se describirá en detalle en la sección 3.1. Las conclusiones obtenidas tras la implementación del sistema con este primer planteamiento han permitido refinar el diseño de la arquitectura, dando lugar a una solución todavı́a más óptima, cuyas caracterı́sticas se detallan en la sección 4. En las fases de análisis y diseño del sistema se han usado patrones de diseño [10], con sus correspondientes adaptaciones en el lenguaje de programación utilizado, y behaviours [9] (que representan la equivalencia a los patrones de diseño a más bajo nivel). El lenguaje de programación en el que se ha basado el desarrollo del sistema es Erlang/OTP [2], que presenta unas caracterı́sticas ideales para la implementación de los subsistemas de monitorización, control y planificación. En algunos de los módulos de entrada salida, cuyo rendimiento es crı́tico para el funcionamiento óptimo del sistema, se ha utilizado C, tras una fase inicial de prototipado en Erlang/OTP. En todo momento se ha hecho énfasis en la reutilización, mediante el uso de herramientas de código abierto (Linux, Erlang/OTP), la adaptación de módulos de soluciones existentes para realizar adaptación de protocolos o formatos de fichero en nuestro servidor (Darwin), y la independización de subsistemas (OpenMonet [11], Inets mod xsl [12]). 3.1 Propuesta de diseño inicial La jerarquı́a de la arquitectura propuesta inicialmente (figura 1) se componı́a de tres niveles especializados, presentados ascendentemente en los párrafos siguientes: • Nivel terciario (capa de almacenamiento masivo): el nivel del almacenamiento masivo no tiene los mismos requisitos en términos de tiempo de respuesta que los que se encuentran en los niveles superiores. Su objetivo es almacenar todos los objetos de vı́deo disponibles en el servidor VoD por medio de cargadores de cintas, arrays de discos o cualquier otro medio de almacenamiento masivo. La vista abstracta de este nivel se reduce a un brazo mecánico con la tarea de cargar las cintas en una de las unidades lectoras, teniendo en cuenta que el número de estas unidades es limitado y no puede haber una unidad siempre disponible para cada cinta solicitada. El rendimiento del servidor depende a este nivel de factores de comportamiento tales como el tiempo de carga, latencia, cadencia (throughput), etc. Si bien es deseable optimizar estos parámetros cuantitativos, el nivel superior puede aliviar el peso que puedan tener en las medidas de rendimiento global, puesto que actúa como caché para los objetos de vı́deo del nivel terciario. • Nivel secundario (capa de caché): está compuesto por un conjunto de nodos, cada uno de ellos con capacidad de almacenamiento suficiente para albergar al menos un objeto de vı́deo completo. El objeto, leı́do del nivel terciario, es almacenado temporalmente en un nodo antes de ser “rebanado” (proceso de striping) en el nivel primario. Una polı́tica de planificación apropiada se encargará de decidir cuáles son los vı́deos que deben ser mantenidos en caché, y durante cuánto tiempo, para atender las peticiones futuras y limitar en lo posible los accesos al nivel de almacenamiento masivo. • Nivel primario (capa de streaming): está compuesto por un conjunto de nodos encargados de hacer la adaptación de protocolos y de enviar al cliente final el Tape loaders, jukeboxes... Tertiary level (massive storage) Cluster nodes with local storage Secondary level (large scale cache) Cluster heads Primary level (buffering and protocol adaptation) Output streams Figura 1: Estructura jerárquica inicial stream de vı́deo en el formato adecuado. El interés de colocar un número sufiente de nodos en este nivel radica en la capacidad de cubrir el posible fallo de uno de los nodos asignando dinámicamente las tareas afectadas a otro nodo, limitando ası́ la pérdida de calidad del servicio. Este nivel tiene requisitos importantes tanto en ancho de banda como en tiempo de respuesta. 3.1.1 Borg, el cluster Beowulf del LFCIA El cluster Borg (figura 2), utilizado para la implementación del sistema, está compuesto por 23 nodos más un nodo destacado como frontal. Cada uno de los nodos consta de un procesador AMD K6 300, 96MB de memoria, disco IDE de 4.2GB y 2 tarjetas de red Fast Ethernet. Por otro lado, el frontal es un Pentium II dual, 384MB de memoria, con tres tarjetas Fast Ethernet, una de ellas dedicada a la conexión con el exterior, siendo labor del frontal actuar como pasarela con las estaciones externas al cluster. Adicionalmente, el frontal actúa de servidor NFS para los nodos (dos discos SCSI de 4GB cada uno con RAID 0). La comunicación entre procesadores en el Beowulf se lleva a cabo mediante el uso de los protocolos de red estándar UNIX, en nuestro ejemplo particular sobre adaptadores Fast Ethernet. Por tanto, el rendimiento (throughput) y la latencia de la comunicación quedan establecidos por el adaptador Fast Ethernet ası́ como por la sobrecarga introducida por el protocolo de comunicación. Sin embargo, Beowulf es capaz de mejorar el ancho de banda de la comunicación mediante el encaminado de paquetes a través de múltiples redes Ethernet (channel bonding). En Borg, la interconexión de los nodos se realiza mediante 4 switches de 24 puertos (3Com SuperStack II 3300) unidos en grupos de dos mediante un enlace de 1Gbit/s, definiendo de este modo dos redes independientes. De esta forma se puede emplear la técnica de channel bonding para aumentar el ancho de banda de la red, o bien se puede dedicar una red a labores administrativas como NFS utilizando TCP/IP, mientras que la otra utiliza un protocolo más ligero para la comunicación de procesos que colaboran 7 6 6 5 4 CPU CPU ... CPU CPU CPU ... CPU 5 4 3 frontend 2 1 1 FORERUNNER 3810 (External world) 2 10 Mb Ethernet link 3 Dual Pentium II 350Mhz 384MB RAM 8GB HD SCSI 4 AMD K6 300Mhz 96MB RAM 4GB HD IDE (23, up to 47) 5 100 Mb Fast Ethernet link (2 per node) 6 3COM SuperStack II Switch 3300 (4, 24 ports per switch) 7 1 Gb link (2 independent networks) Figura 2: Borg, el cluster Beowulf del LFCIA en un cálculo. La reconfiguración de la arquitectura genérica del Borg para adaptarse a la estructura jerárquica de tres niveles, se puede observar en la figura 3. Como nivel terciario se utiliza un nodo especializado con acceso a un robot de cintas; en el secundario, funcionando como caché de objetos de vı́deo, se han colocado los 23 nodos del cluster; y como primario se ha colocado otro nodo especializado con mayores requisitos de memoria, como se puede ver en la figura. Las conexiones entre capas se realizan a través de los switches, y el frontend del cluster actúa de nodo de administración. 3.2 Tecnologı́as clave Además de la arquitectura innovadora presentada, dos de las más importantes caracterı́sticas diferenciadoras de la solución propuesta son la utilización de un lenguaje funcional y la adaptación a una arquitectura basada en clusters Linux. 3.2.1 Erlang/OTP El lenguaje utilizado, Erlang, ha sido diseñado y utilizado en el laboratorio de computación (CSLab) de Ericsson para la programación de sus sistemas de control distribuidos. La combinación del paradigma funcional y la computación paralela dan lugar a un lenguaje declarativo, sin efectos colaterales, y con un alto nivel de expresividad, abstracción y facilidad para el prototipado. Erlang es especialmente adecuado para sistemas de tiempo real “blandos” (soft real time) distribuidos y tolerantes a fallos. Se trata de un lenguaje basado en paso de mensajes ası́ncrono, transporte transparente de valores y comunicaciones de orden superior, que posee capacidad para dar soporte a un número elevado de procesos concurrentes. El lenguaje es adecuado para el desarrollo de sistemas distribuidos y permite la ubicación transparente de procesos en distintos nodos. Incluye además primitivas para el soporte de tolerancia a fallos y proporciona facilidades para el reemplazamiento “en caliente” de código, sin necesidad de detener el sistema para ello. A mayores del lenguaje, la solución propuesta utiliza ampliamente las bibliotecas y los patrones de diseño distribuido de la Open Telecom Platform (OTP), que incluye K7 500 128MB Bus 32 bits Alpha Server DS20 Buses 64 bits borg24 (192.168.155.24) 3COM Superstack II 3300 Borg0 borg0−1 (192.168.155.254) borg1−1 ... borg23−1 (192.168.155.1...23) borg0−0 (192.168.154.254) borg1−0 ... borg23−0 (192.168.154.1...23) AutoPAK VXA Tape Charger (~8.000) 3 SCSI: 2 cabezas, 1 brazo mecánico 15 slots para cintas de 33GB * ~100 películas de dos horas a 300Kb/s * ~15 películas de dos horas a 2Mb/s Cada cabeza: 5 Mb/s Figura 3: Adaptación del Borg a la estructura jerárquica del servidor servidores genéricos, mecanismos de supervisión, una base de datos distribuida (Mnesia) con transparencia de ubicación, fragmentación, replicación, e integración con el lenguaje, y numerosas bibliotecas de integración: SNMP, ASN.1, Interfaz C, Corba, Java, HTTP. Todas las caracterı́sticas citadas hacen de Erlang un lenguaje muy adecuado para el desarrollo del sistema propuesto. 3.2.2 Cluster Linux La utilización en la solución que se plantea en este trabajo de clusters Beowulf (arquitectura distribuida de bajo coste basada en Linux) ha sido otra de las claves que hacen del servidor propuesto una arquitectura innovadora, además de diferenciarlo de la mayorı́a de las soluciones comerciales existentes. La arquitectura de memoria distribuida se complementa a la perfección con la filosofı́a de paso de mensajes del lenguaje utilizado. Algunas de las ventajas derivadas de la utilización de esta tecnologı́a se detallan a continuación: • La existencia de una amplia experiencia en la comunidad OpenSource en el trabajo con redes de alta velocidad, sistemas distribuidos y clustering sobre linux es un factor importante a la hora de escoger esta arquitectura. • La disponibilidad de código fuente: posibilidad de modificar cualquier parte del software para adaptarlo, corregirlo, localizar problemas o instrumentarlo. • Licencia homogénea (GPL): simplicidad de tratamiento legal (vs. por ejemplo situación actual MPEG4, donde cada componente tiene una licencia distinta y su interacción a veces es incómoda y hasta contradictoria). VODKA Monitor Monitor VODKA_slave Stream Group VODKA_slave Streaming Sched Cache Sched VODKA_slave n cache levels Storage Sched Monitor Storage Group RTP H.263 HTTP Frontend Cache Group Storage Driver (File) HTTP Streamer HTTP Frontend Cache Driver (File) Storage Driver (TAPE) Cache Driver (File) Storage Group Storage Driver (HTTP) Figura 4: Servidor VoDKA con n niveles de caché • Compatibilidad: código desarrollado en Linux se portará sin problemas a Solaris, AIX, Tru64, IRIX, etc. Respeto de estándares (POSIX 1003.*, SVID, 4.xBSD). • Buen rendimiento. • Amplia disponibilidad de herramientas de desarrollo. • Extensivo soporte de diferentes plataformas hardware (x86, Alpha, SPARC, ARM, S/390 (zSeries), IA64, SH3, MIPS...). 4 Refinamiento del diseño Las ideas del diseño original deben ser ligeramente modificadas para cubrir las necesidades en producción del sistema. En particular, resulta necesaria una flexibilización del diseño, toda vez que la arquitectura jerárquica en tres niveles (streaming, caché y almacenamiento) puede ser excesivamente sofisticada en instalaciones pequeñas y demasiado rı́gida en redes con una topologı́a compleja como una red de interconexión de redes metropolitanas. Esta redefinición de la arquitectura jerárquica da lugar a una arquitectura en múltiples niveles especializados, compartiendo cada uno de los niveles una misma interfaz (figura 4). De esta forma, por ejemplo, puede suprimirse el nivel de caché, implementar una jerarquı́a de múltiples niveles de caché adaptando la propia topologı́a de la red subyacente (figura 5) o disponer de múltiples niveles de almacenamiento distribuidos fı́sicamente. Incluso cabe la posibilidad de que un servidor utilice como soporte de almacenamiento otro servidor VoD dando lugar a un metaservidor VoD. Además de la flexibilidad en cuanto a la distribución fı́sica del sistema, resulta necesario que el sistema sea capaz, dentro de cada nivel y entre cada par de niveles, interaccionar utilizando protocolos de almacenamiento y transferencia heterogéneos. Esta flexibilización pasa por identificar los patrones de comunicación entre los distintos niveles factorizándolos como abstracciones funcionales (pipe, para las transferencias dentro de un nodo, y transfer, para transferencias entre nodos) parametrizadas por cierres funcionales que encapsulan las particularidades de los protocolos utilizados y que son establecidos Grupo de Almacenamiento Caché en nodo de red secundario Almacenamiento (réplica) Caché en nodo de red primario RED TRONCAL PRIMARIA Caché en nodo de red primario Usuarios finales Streamer en nodo final Caché en nodo de red secundario Almacenamiento (principal) Almacenamiento Streamer en nodo final Streamer en nodo final Caché N2 Caché N1 Usuarios finales Streaming Figura 5: Despliegue del servidor VoD sobre una topologı́a compleja por los planificadores que colaboran en la realización de un determinado servicio. Esta generalidad de los controladores de cada nivel obliga a la utilización de mecanismos genéricos de monitorización y de programación reflexiva para descubrir las caracterı́sticas de cada nivel. Merece la pena comentar la importancia de mantener el sistema independiente respecto a formatos de distribución de contenidos multimedia digitales, actualmente en constante cambio, hasta la parte final de distribución de los contenidos (streamer ) en el cual se efectúa laa adaptación de protocolos requerida: frontal de http progresivo, frontal RTP, etc. La primera separación lógica en el servicio de vı́deo bajo demanda es la que diferencia el servidor de vı́deo, núcleo implementado fundamentalmente con tecnologı́a funcional distribuida y desplegada sobre clusters tipo Beowulf, y los distintos servidores de aplicaciones que, utilizando la distribución de vı́deo ofertada por el servidor VoD, definen servicios de usuario final (figura 6). Las aplicaciones, desarrolladas utilizando tecnologı́a convencional, interaccionan con el servidor de vı́deo redirigiendo a éste peticiones de objetos multimedia determinados; además, las aplicaciones se nutren de la información recolectada por los elementos de monitorización de VoD. Las aplicaciones tı́picas comprenden cine y televisión a la carta, teleformación, comercio electrónico, noticiario, etc. La figura 7 muestra un ejemplo de cómo se produce la transferencia de información desde los niveles de almacenamiento hasta el streaming del objeto en un sistema simplificado en el que se eliminan los niveles de caché. En este caso, la solicitud del cliente es recogida por un frontal HTTP (HTTP frontend ) que define la adaptación de protocolo requerida para una distribución progressive download sobre HTTP de un objeto multimedia MO. Este interacciona con su planificador (Streaming Sched ) a través del agrupador de adaptadores en el que está integrado (Sched Group) decidiendo la forma en que se distribuirá finalmente el stream de vı́deo (DD1, en este caso instanciado a una adaptación HTTP en un puerto negociado con el cliente). El planificador del nivel de streaming propaga la solicitud de MO a su sucesor en la cadena de responsabilidad [10] incorporando el protocolo que debe utilizar el almacenamiento para su transferencia (DD2, en este caso una Video On Demand Kernel Architecture Smirnoff HTTP SERVER VODKA Relevant Data Observer Consults Request1 Request2(MO) SERVLETS HTTP Consults Agent XSLT Response1 Management Data (MO) Management Subsystem Figura 6: Separación entre servidor VoD y una aplicación Web comunicación TCP/IP). El sucesor, el planificador de almacenamiento (Storage Sched ), propaga la petición hacia un multiplexor de almacenamientos (Storage Group), al que a su vez se conectan distintos dispositivos de almacenamiento: un sistema de ficheros montado (File Storage Driver ), un robot de cintas (Tape Storage Driver ) e incluso un servidor web (HTTP Storage Driver ). La labor del planificador es decidir la fuente que utilizará para obtener el objeto MO (en el ejemplo el File Storage Driver ), construyendo un proceso pipe que conecta dicha fuente de datos con el protocolo de transferencia sugerido por el planificador de streaming, el cual crea una nueva pipe para recoger la transferencia de almacenamiento y enviarla a través del destino sugerido por el adaptador HTTP. Como muestra de la flexibilidad en la configuración del servidor VoDKA, la figura 8 presenta un esquema de cómo se distribuyen las responsabilidades entre los distintos nodos del cluster Borg. • En el nodo borg25 reside el almacenamiento masivo, alojando un planificador de almacenamiento asociado con dos controladores de almacenamiento (unidad de CD y robot de cinta con 0.5 TB de capacidad). • El planificador de almacenamiento es el sucesor en la cadena de responsabilidad de un planificador de caché que reside en el nodo borg24 y que utiliza como caché el ancho de banda agregado de controladores de caché locales en los nodos borg1...borg23. • El propio nodo borg24 hospeda un planificador de streaming cuyo sucesor es el planificador de caché, soportando un adaptador de progressive download utilizando HTTP que sirve al laboratorio utilizando la red departamental conmutada a 10Mbps. • El servidor covas aloja un planificador de caché, cuyo sucesor es el planificador de caché de borg24 (dos niveles de caché), y un controlador de caché local. Además, el servidor contiene un planificador de streaming alimentado por el planificador de caché y soportando un adaptador de progressive download utilizando HTTP, utilizando el adaptador ATM conectado directamente a la red troncal de la Universidad. • borg0, el frontal del cluster Borg, se utiliza para monitorización del sistema. VODKA Monitor Stream Group RTP VODKA_slave MO DD2 lookup lookupAns(A) HTTP Frontend H.263 MO DD2 Streaming Sched MO DD1 lookup lookupAns(A) VODKA_slave lookup lookupAns(A) Monitor Storage Sched lookup lookupAns(A) f(State,MO)={DS1,DD2} f(State,MO)=DS2 lookup lookupAns(B) Storage Driver (File) transfer HTTP Streamer Storage Group lookup lookupAns(A,B,C) Storage Driver (TAPE) HTTP Frontend MO lookup lookupAns(C) Storage Group Storage Driver (HTTP) Video Stream HTTP PIPE DD1 TCP PIPE TCP FILE DD2 DS1 DS2 STREAM I/O STORAGE I/O Figura 7: Ejemplo de transferencia en un sistema sin caché borg24 borg25 VODKA_slave Streaming Sched 10Mb/s HTTP Frontend VODKA_slave Cache Sched HTTP Streamer Storage Sched 100Mb/s Cache Group Storage Group 10Mb/s Storage Driver (File) VODKA_slave Storage Driver (TAPE) 100Mb/s ATM Streaming Sched Cache Sched HTTP Streamer Cache Driver HTTP Frontend covas 100Mb/s 100Mb/s Cache Driver (File) Cache Driver (File) VODKA_slave VODKA_slave borg1 borg22 Cache Driver (File) VODKA_slave borg23 Figura 8: Configuración de Borg en el campus universitario 5 Conclusiones Se ha desarrollado un servidor de vı́deo bajo demanda que cumple con los requisitos básicos que han de tener este tipo de sistemas: gran capacidad de almacenamiento, gran ancho de banda, tiempo de respuesta predecible, gran número de usuarios concurrentes y tolerancia a fallos. A partir de un servidor de estas caracterı́sticas, se ha evolucionado para que cumpla satisfactoriamente otras no menos importantes: escalabilidad tanto hacia arriba como hacia abajo, adaptabilidad a distintas topologı́as de red de distribución y bajo coste. Esto ha sido posible en gran medida gracias al uso de tecnologı́as clave como el lenguaje Erlang, aplicando sobre el conocidos patrones de diseño, y los clusters Beowulf. En la actualidad el sistema está pendiente de refinamiento de las fases de planificación y de añadir nuevos módulos para el soporte de diferentes formatos y protocolos de distribución de los objetos multimedia. Ası́ mismo, es necesario implementar una completa serie de aplicaciones externas, que interactuen entre los usuarios y el servidor, antes de que se ponga finalmente en explotación a través de un operador de cable y llegue a los hogares del público. Referencias [1] Apple Computer Inc. About Darwin Streaming Server en http://www.publicsource.apple.com/projects/streaming/ [2] J. Armstrong, R. Virding, C. Wikström, M. Williams. Concurrent Programming in Erlang. Second Edition, Prentice-Hall. 1996. [3] M. Barreiro, V. M. Gulı́as, Cluster setup and its administration. In Rajkumar Buyya, editor, High Performance Cluster Computing, Vol. I. Prentice Hall, 1999. [4] S. G. Chan and F. Tobagi Hierarchical storage systems for interactive Video-ondemand Technical Report, Stanford University, Computer Systems Laboratory, Number CSL-TR-97-723, p. 84. 1997 [5] T. Chiueh, C. Venkatramani, M. Vernick, Design and Implementation of the Stony Brook Video Server. Software – Practice and Experience. 1997. [6] T. Chiueh, M. Vernick, C. Venkatramani, Performance Evaluation of Stony Brook Video Server. ECSL-TR-24. 1997. [7] Cisco Systems, Inc. A Distributed Video Server Architecture for Flexible EnterpriseWide Video Delivery en http://www.cisco.com/warp/public/cc/pd/mxsv/iptv3400/tech/dvsa wp.htm, White Paper, 2000. [8] D. Du, J. Hsieh, J. Liu, Building Video-on-Demand servers Using Shared-Memory Multiprocessors. Distributed Multimedia Research Center and Computer Science Department, University of Minnesota, and Ronald J. Vetter, Computer Science Department, North Dakota State University. 1996. [9] U. Ekström, Design Patterns for simulation en ERLANG/OTP. Master Thesis, Universidad de Upsala, Suecia, 2000 [10] E. Gamma, R. Helm, R. Johnson, and J.Vlissides. Design Patterns: Elements of Reusable Object-oriented Software. Addison Wesley, Reading, 1996. [11] LFCIA, OpenMonet Project. en http://sourceforge.net/projects/openmonet [12] LFCIA, Erlatron Project. http://sourceforge.net/projects/modxsl [13] Oracle, Oracle Video Server Administrators Guide and Command Reference” Release 3.0 for UNIX, 1998. [14] Oracle, Oracle Video Server System Technical Overview Release 3.0 for UNIX. Oracle White Paper, 1998. [15] Philips, WebCine Server en http://www.mpeg-4player.com/products/server/index.asp [16] J.J. Sánchez, V.M. Gulı́as, A. Valderruten, J. Mosquera. State of the Art and Design of VOD Systems. Proceedings of the International Conference on Information Systems Analysis, SCI’00-ISAS’00. ISBN 980-07-6694-4, Orlando, USA, July 2000. [17] Sun Microsystems Inc. Sun StorEdge Media Central Streaming Server en http://www.sun.com/storage/media-central/ [18] M. Vernick, C. Venkatramani, T. Chiueh, Adventures in Building The Stony Brook Video Server. Proceedings of ACM Multimedia ’96, Boston, MA. 1996 [19] P. Wilkinson, M. DeSisto, H. Rother, Y. Wong. IBM VideoCharger 101. IBM Redbook. International Technical Support Organization. 1999.