Migración en caliente (era: Python vs Java C C++)

Marcos Sánchez Provencio rapto en arrakis.es
Lun Mar 22 12:49:51 CET 2004


Sólo quiero recordar la técnica que usa webware para permitir 
parar/rearrancar la aplicación para obtener las nuevas definiciones de 
manera prácticamente transparente, sin más que definir los métodos 
necesarios para que pickle/unpickle funcione.

En cualquier caso, me parece imprescindible tener un mecanismo parecido 
para poder migrar de servidor, parar/rearrancar por cualquier otro 
motivo, etc. en una aplicación así de seria.

Hernan Foffani wrote:

>Chema Cortes escribio:
>  
>
>>Hernan Foffani escribió:
>>
>>    
>>
>>>mis preguntas eran algo retoricas.  no me refería tanto
>>>al problema técnico en sí (que ya es bastante complejo) si no mas
>>>bien al hecho de mantener toda la aplicación en un estado estable.
>>>
>>>por ej, puede darse el caso que la nueva clase C cambie un
>>>determinado atributo "coleccion" de list a dict. todas las
>>>instancias de C deberían recrear el atributo "coleccion" como dict
>>>con el contenido de las list anteriores.
>>>o si la nueva clase Cuenta cambia el atributo "titular" de la
>>>clase Persona a la clase Cliente, todas las instancias de Persona
>>>que sean atributos de instancias de la clase Cuenta deben
>>>cambiar de clase a Cliente aún cuando tanto Cliente como Persona
>>>no se hayan modificado per se.
>>>      
>>>
>>Me parece que no tienes enfocado correctamente el problema. Los
>>atributos son referencias, sin importar el tipo de dato. Me da igual
>>que titular sea una instancia de Cliente ó una instancia de Persona,
>>puesto que ambas clases coinciden en estructura:
>>    
>>
>
>¡Pero por supuesto que los atributos son referencias!
>¿Por qué presupones que ambas clases (Cliente y Persona)
>coincidirían en su estructura? ¿Que sentido que el progrmador
>pase a utilizar una clase en vez de otra en el atributo
>titular de la clase Cuenta en ese caso?
>Si solo cambia la implementación de algun metodo no voy a
>renombrar la clase por eso. (aun en este ultimo caso habría
>problemas)
>
>Es razonable suponer que si el atributo titular de Cuenta
>cambia de Cliente a Persona o viceversa es porque en el resto
>de la aplicacion se harán invocaciones a metodos o atributos
>diferentes.
>
>  
>
>>....
>>   def SetTitular(self,titular):
>>     self.titular=titular
>>   def GetNombre(self):
>>     return self.titular.nombre
>>    
>>
>
>GetNombre estaria implementada en ambas clases. ese no es
>el problema al que me refiero. (e incluso ahi...)
>
>el problema surge si a partir de la actualizacion necesito
>GetNumCliente (está en Cliente pero no en Persona). Entonces,
> - o cambio de clase a todas las instancias que son atributos
> de Cuenta.
> - o uso try/except por NameError antes de acceder a
> GetNumCliente en TODA la aplicacion.
> - o cualquier otra tecnica parecida a esta ultima.
> ¿y que se supone que haría la aplicacion si no encuentra
> el metodo?
>
>Algun tiempo despues de la actualización de Cuenta, si se
>crearon nuevas instancias de esa clase, habrá algunas instancias
>(las viejas) que tendran como atributo titular objetos Persona
>y otras (las nuevas) atributo titular objetos Cliente.
>Listados, estadisticas, o lo que sea, que barra esas instancias
>darían inconsistencias (imaginemos un listado mal formateado.)
>¡El error no se podría reproducir!
>Reinicias el servidor y ¡ala! todo funciona (ahora todos
>los atributo titular son instancias de Cliente.)
>
>  
>
>>Incluso daría igual el cambiar una lista por un diccionario:
>>
>>   def __init__(self,coleccion):
>>     self.coleccion=coleccion
>>   def get(self,id_):
>>     return self.coleccion[id_]
>>    
>>
>
>pero el que usa el get debe saber que hay instancias a las
>que debe pasar un entero (las viejas, las que son listas)
>y otras (las nuevas, dict) a las que debe pasar un string
>o lo que el programador haya decidido usar como indice.
>
>No me parece razonable escribir codigo de mas que nunca
>se ejecutará luego del primer reinicio del sistema.
>
>  
>
>>Si está bien diseñado, bastaría con una actualización de los
>>atributos.
>>    
>>
>
>repito, mis objeciones no son sobre la programación en python.
>no creo que la forma de resolver el problema de las
>actualizaciones de versiones en caliente sea cambiando
>la clase de instancias en ejecucion.
>
>  
>
>>Más problemáticos son los cambios en las reglas de
>>negocio. Aún así se puede minimizar los problemas si se emplea un
>>buen diseño multicapa ("multi-tier"), de modo que los cambios en las
>>reglas de negocio no influyan tanto en el resto de la aplicación.
>>    
>>
>
>Esto ya es otra cosa.
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>  
>




Más información sobre la lista de distribución Python-es