Dom Feb 05, 2006 2:19 pm
|
 |
asteriscos
Perlero Nuevo

|
Registrado: 15 Ene 2006
Mensajes: 4
|
|
| Ejecutar varias subrutinas simultáneamente. |
|
|
Hola,
Esto de aprender a programar se hace duro... y más cuando no tienes a nadie cerca para preguntarle cosas básicas ... ¡así que a ver si alguien puede ayudarme!
He diseñado una aplicación que está lanzando pings continuamente a una serie de máquinas remotas cada 100 segundos.
Esto funciona todo correctamente. Mi problema es que necesito tener controladas muchas máquinas. Tal y como he diseñado el programa, cuando tenga controladas, 150 o 200 equipos, tardará más de 100 segundos en lanzar un ping a cada una de ellas y en recoger e interpretar el resultado así q de alguna forma, tengo que poder ejecutar varias subrutinas simultáneamente, para así lanzar varios pings de forma simultánea y conseguir supervisar más equipos por segundo.
Estoy convencido de que esto se tiene que poder hacer pero la verdad....... he estado investigando en Internet y no he encontrado ningún sitio que me oriente como hacerlo.
¿Alguien puede arrojar un poco de luz a mi gran ignorancia ?
Gracias de antemano,
Joseba S. |
|
|
|

Dom Feb 05, 2006 2:47 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
|
|
|
1.- Para controlar muchas máquinas lo ideal es usar el protocolo SMNP, que para eso está.
2.- Hay utilidades de gestión de máquinas ya hechas, como el Nagios (Instalación, Configuración).
3.- Si la aplicación ya la tienes diseñada, pues entonces la aprovecharemos
El problema con el monitorización con pings es justo el que comentas: tienes que esperar a que las máquinas vayan respondiendo para saber si están arriba o no.
Una opción es lanzar un proceso por cada máquina (o red de máquinas) y que se encargue de monitorizarlas. Luego tienes un programa principal que va mirando los resultados. El lugar común donde dejar los resultados puede/debe ser una base de datos.
Es una opción. A ver si hay más propuestas... |
|

Lun Feb 06, 2006 8:55 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
En el siguiente artículo:
http://www.stonehenge.com/merlyn/UnixReview/col41.html
Randal L. Schwartz crea un código de ejemplo que te podría funcionar, pues hace un script que va creando procesos hijos para que se ejecuten paralelamente y manden pings justamente para ver si una maquina está viva o no.
Seguramente podrás implementarlo a tu propio próposito.
SALUDOS |
|

Lun Feb 06, 2006 12:10 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
La idea de usar forks es buena, aunque recordemos que el overhead y el request resources de Perl para realizar un fork es un poco costoso, en el caso de Win32 no se puede hacer mucho, fork está basado en ithreads ( en la misma idea ) ya que Windows no cuenta con un fork(1) similar al de un sistema operativo que cumpla con POSIX. Y si tienes ithreads habilidados en Win32, yo te recomiendaría utilizarlos, es menos costoso copiar solo la sección de datos y compartir memoria entre un thread, que copiar toda una imagen de proceso con fork(1).
Ahora bien si estás en un sistema POSIX ( cualquier UNIX ), fork si es menos costoso de alguna manera que ithreads, puesto que el model de Threads de Perl aun está muy verde, y es menos eficiente que fork(1) directamente...
Así que de alguna manera te recomiendo leer el manual del módulo de ithreads o perlthrtut. Comenzar a pensar en threading es muy bueno.
Ahora, independientemente de las soluciones anteriores, la que sigue mas eficiente, si quieres ejecutar pings simultáneos es utilizando POE, dirán: "Ah como le hace propaganda", no no es propaganda, aunque conozco de muy cerca ( tiempo ) al autor... el framework es una técnica estudiada de hace mucho tiempo, publicada por Donald E. Knuth en sus libros "The Art of Computer Programming" publicados por los 70's.
Bien, no explicaré de nuevo que hace POE, pero basta decir que su naturaleza nata es ser multitareas, por lo tanto ejecutar operaciones "simultáneas" ( en un X quantum de tiempo ) es su especialidad.
Te dejo un ejemplo de como hacer lo del ping simultáneo desde POE:
http://poe.perl.org/?POE_Cookbook/Pinging_Multiple_Hosts
Saludos, |
|

Mie Feb 08, 2006 6:51 am
|
 |
asteriscos
Perlero Nuevo

|
Registrado: 15 Ene 2006
Mensajes: 4
|
|
|
|
|
Hola,
Lo primero gracias a todos los que habeís respondido !!!!
De todas las respuestas recibidas, la que más me ha gustado es la que propone "Una opción es lanzar un proceso por cada máquina (o red de máquinas) y que se encargue de monitorizarlas. Luego tienes un programa principal que va mirando los resultados"
Desde luego esta opción me parece la más sencilla y como no tengo problemas de rendimiento, pues es la opción más interesante......
¿ Pero....... como lo pongo en prácita ? - ¿ alguien me puede poner un ejemplo muy sencillo ?
Gracias por iluminar mi ignorancia !!!!!
Joseba S. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|