Desarrollo de un sistema de cómputo distribuido en Erlang: caso de

Anuncio
Desarrollo de un sistema de cómputo distribuido en Erlang:
caso de enseñanza/aprendizaje
Manuel Hernández Gutiérrez
Instituto de Electrónica y Computación
(953) 53 2 03 99 Ext. 200
manuelhg@mixteco.utm.mx
Resumen
Cualquier producto de calidad requiere una cuidadosa planeación y una meticulosa
realización: desde un edificio hasta un automóvil. Los productos de software no deberían
ser la excepción.
En esta plática describo la construcción de un sistema distribuido aplicado a las tareas de
soporte de enseñanza-aprendizaje por medio de una red de computadoras. El sistema está
construido en Erlang, un lenguaje de programación funcional con capacidades industriales
y orientado a cómputo distribuido.
La especificación e implementación de tal sistema forma parte de nuestra contribución
como Cuerpo Académico en Redes y Sistemas Distribuidos, con planteamientos arbitrados
internacionalmente y para presentarse en The Eighth ACM SIGPLAN, Erlang Workshop.
Palabras clave
Cómputo distribuido, programación concurrente, Erlang.
1. Introducción
La tecnología actual está en un punto que materialmente está bien desarrollada pero
conceptualmente es necesaria una etapa de asimilación y control: el caso más patente es el
de la computación, en donde las computadoras tienen capacidades que no han sido ni son
completamente aprovechables por el software actual.
Considerando que ya de por sí la programación secuencial (tradicional) de computadoras es
ya de por sí altamente difícil, la programación concurrente está por ahora en un estado de
inabordable complejidad, manejable sólo si se crean y utilizan herramientas apropiadas para
el manejo de esta complejidad.
La primera dificultad en la programación concurrente viene de considerar que el todo del
sistema debe estar apoyado en la coordinación y en su caso, sincronización, de las partes.
Esto conlleva a decidir si el sistema resultante debería ser diseñado con o sin tolerancia a
fallas. La segunda dificultad radica en considerar si los recursos tanto físicos como
computacionales debieran compartirse o no. Cuando los recursos se comparten debiera
tenerse especial cuidado paro no bloquear completamente el sistema o corromper la fuente
de los recursos. La última dificultad radica en obtener una herramienta adecuada que
automáticamente se encargue de controlar el sistema mientras que los programadores se
encargan de seguir lo más fielmente posible una especificación al materializarla en una
implementación.
Muchas aplicaciones donde las computadoras son una herrramienta fundamental son
inherentemente distribuidas. Tal es el caso del proceso de enseñanza/aprendizaje, donde la
comunicación debe armonizarse entre al menos un par de integrantes del sistema: el
profesor y el estudiante. Un sistema distribuido debiera satisfacer las necesidades laborales
de los profesores, facilitando las tareas de compartir experiencias pedagógicas entre ellas y
automatizando labores repetitivas y desgastantes como es el diseño y evaluación de tareas
y la calificación de exámenes. Por otro lado, el sistema debería satisfacer las necesidades
académicas de los estudiantes, al aprovechar lo más posible las tareas de presentación de
material, la utilización de tecnologías multimedia, y la comunicación entre profesores y
estudiantes.
En esta plática presento las decisiones de diseño, las posibilidades, las restricciones y las
herramientas utilizadas en la implementación de un sistema de cómputo distribuido
orientado a la enseñanza/aprendizaje vía un lenguaje de programación de vanguardia
orientado a la implementación de aplicaciones distribuidas.
2. Diseño del sistema
El diseño del sistema está basado en la identificación de “actores”, siguiendo una
terminología propia de un lenguaje de especificación llamado UML (\emph{Unified
Modelling Language}). Esta identificación la llevo a cabo mi colega Hugo Cortés. Además,
los eventos que se asocian a los actores tienen que seguir un estricto orden, y su modelación
matemática, no trivial, fue llevada a cabo por mi colega Jorge Hernández. En la parte
correspondiente a la Pedagogía, la labor de nuestra colega Esperanza Pérez fue sumamente
importante, ya que contribuyó en forma decisiva al carácter interdisciplinario de la
aplicación. Finalmente, el análisis de temas de seguridad fue llevado a cabo por la
profesora-investigadora Mónica García, en tanto que un análisis preliminar de recursos
compartidos fue realizada por nuestro líder de Cuerpo Académico Erik Ramos, y yo. La
programación del sistema, en su parte central, ha sido llevada a cabo por mí.
La programación del sistema ha seguido un lineamiento básico de primero programar
secuencialmente tareas que así se realizan tradicionalmente, y después incorporar los
resultados obtenidos dentro de un sistema que requiera concurrencia. La secuencialidad no
es estricta, sino que siempre va acompañada de la idea de recibir y enviar mensajes: se
recibe un mensaje como petición y se procesa su respectiva encomienda, en tanto que los
mensajes para enviar son resultados que tanto el programa como el usuario han preparado
para que otros procesos consuman la respectiva salida.
3. Implementación del sistema
Como una parte esencial en el desarrollo de nuestro sistema hemos utilizado un método de
de desarrollo ágil de software llamado Programación Extrema. Este método de
programación está basado en la idea de que el código de los programas debería estar muy
cercano a la especificación, y que debería haber un fuerte entendimiento entre el
especificador y el programador, sin agentes intermedios. El método plantea resultados
inmediatos, aunque en programación imperativa estos resultados pueden ser provisionales y
desechables. En Erlang, por su característica de ser un lenguaje funcional, estos resultados
intermedios (llamados prototipos), pueden utilizarse como un punto de inicio para refinarse
por transformación para finalmente obtener un programa eficiente y correcto por
construcción.
El sistema está enteramente diseñado en Erlang. Erlang es un lenguaje de programación
funcional orientado a facilitar la escritura de programas concurrentes. En Erlang esta tarea
de escritura se facilita al eliminar o reducir al mínimo la utilización de recursos
compartidos. Otra facilidad provista por Erlang está en su manejo automático de procesos.
Un proceso es una entidad que está computacionalmente activa y en cierta forma es como
una célula de trabajo que envia y recibe información. Estos procesos tienen una vida en el
tiempo y utilizan mensajes para comunicarse entre sí. Muchas de las tareas relacionadas a
procesos, que en otros lenguajes deben llevarse a cabo manualmente, están en Erlang
automatizadas: en Erlang, cada proceso tiene su propio “espacio de trabajo” y acepta y
despacha mensajes en forma asíncrona vía un mailbox.
En Erlang, una computadora ejecuta nodos, y cada nodo ejecuta procesos. Los nodos
pueden a su vez ser accesibles por medio de peticiones externas vía lenguajes
convencionales para la ejecución de tareas. Esta idea incorpora la posibilidad de utilizar
computadoras portátiles, que en la actualidad son relativamente baratas, en las tareas
básicas de enseñanza/aprendizaje.
En cuanto a la interacción humano-computadora, esta interacción puede realizarse en dos
niveles: en un nivel completo tenemos una computadora de escritorio como el dispositivo
de acceso, y en otro nivel, tenemos dispositivos móviles con mecanismos básico de entrada
y salida, pero suficientes para lograr la interacción con otros dispositivos más poderosos o
más ergonómicos.
4. Aprendizaje y enseñanza
Aprender y enseñar son tareas altamente complejas que requieren de herramientas para
llevarse a cabo. La primera necesidad de quien aprende es tener quien le enseñe. Quien
aprende también espera de quien le enseña, en un mundo ideal, las siguientes
características:
1. El profesor debe ser claro.
2. El profesor debe ser incansable.
3. El profesor debe ser imparcial.
Estas características raramente se encuentran en un profesor real, a pesar de la preparación
y del buena voluntad de tal profesor. Una aproximación a este ideal podría lograrse si un
profesor real se apoya en la utilización de una red de computadoras:
1. El profesor real puede apoyarse en un conjunto de herramientas computarizadas
para lograr una mejor claridad en su exposición; entre estas herramientas, destaca la
creación de acervos comunes de información auto-regulada por un conjunto de
profesores que se auto-monitorean constantemente en su planteamiento de material
de curso, tareas, y exámenes.
2. Una computadora no se cansa. Mientras que un profesor conoce por experiencia que
fácilmente se alcanzan sus propios límites en una sesión, la computadora ofrece un
campo ideal en cuanto a disponibilidad e incansabilidad, de tal forma que el
estudiante puede recurrir a este soporte computarizado tantan veces como desee y
con sesiones tan largas como su propio cansancio lo limite.
3. Sesgos naturales de empatía, así como un contexto social que facilita prejuicios e
irreflexión, hace que un profesor real pueda equivocarse en la evaluación de sus
estudiantes. En el caso de una computadora, la evaluación que otorga carece de un
sesgo antropomórfico en lo fundamental, haciendo que los estudiantes sean
evaluados imparcialmente con la ventaja de tener el reporte de su calificación
inmediatamente.
5. Conclusiones
La factibilidad de nuestro sistema ya ha sido comprobada en forma experimental en cuanto
a su funcionalidad dentro de una máquina. También se han hecho experimentos con varias
máquina. Nuestro siguiente paso es llevar a la práctica con profesores y estudiantes el
sistema tal como ahora existe.
Muchas tareas están aún pendientes y forman parte de un trabajo a corto plazo. El principal
tema a tratar es precisamente el adaptar el sistema a las necesidades que los especificadores
(en este caso, tanto estudiantes como profesores) indiquen.
En la programación del sistema también existen varias tareas a resolver, y algunas de estas
tareas ya están siendo resueltas en lo fundamental:
1. La incorporación de celulares o agendas electrónicas.
2. Un modelo de cómputo ubicuo para aprendizaje/enseñanza.
3. Temas experimentales en las instalaciones de la Universidad Tecnológica de la
Mixteca.
4. Divulgación de nuestra propuesta con el objetivo de captar la atención de
estudiantes de posgrado para la realización de tesis o de proyectos de investigación.
3. Bibliografía
[1]
H. Cortés, M. García, J. Hernández, M. Hernández, E. Pérez-Córdoba, E. Ramos.
Development of a Distributed System Applied to Teaching and Learning. Proceedings of
The Eight International Erlang Workshop, Edinburgo, Escocia, 2009.
[2]
Armstrong, Joe. Programming Erlang: Software for a Concurrent World. The
Pragmatic Bookshelf, 2007
Descargar