Ricardo Mun~oz A. escribió:
> Alvaro Herrera wrote:

>>> "Slony-I is a system intended for data centers and backup sites, where 
>>> the normal mode of operation is that all nodes are available all the 
>>> time, and where all nodes can be secured. If you have nodes that are 
>>> likely to regularly drop onto and off of the network, or have nodes that 
>>> cannot be kept secure, Slony-I is probably not the ideal replication 
>>> solution for you."
>>
>> Esto no es lo mismo que tener conexiones de baja velocidad.  Por lo
>> demas, qué tan problematico sea depende del volumen de transacciones que
>> tengas.
>
> cierto. en el peor de los casos (si se corta el enlace entre la of.central 
> y las sucursales) hay algo que se puede hacer a nivel de RDBMS?

Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
maestro, que se va vaciando a medida que los esclavos las reciben y
aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
conexion vuelve.

En realidad ese es el modelo de operacion normal de Slony-I: todas las
operaciones pasan siempre por una cola.  Lo que pasa en condiciones
normales es que la cola se transmite en forma "instantanea".

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"Pido que me den el Nobel por razones humanitarias" (Nicanor Parra)
From [EMAIL PROTECTED]  Mon Sep 24 12:35:45 2007
From: [EMAIL PROTECTED] (Ricardo Mun~oz A.)
Date: Mon Sep 24 12:41:47 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Alvaro Herrera wrote:
> Ricardo Mun~oz A. escribió:
>   
>> Alvaro Herrera wrote:
>>     
>
>   
>>>> "Slony-I is a system intended for data centers and backup sites, where 
>>>> the normal mode of operation is that all nodes are available all the 
>>>> time, and where all nodes can be secured. If you have nodes that are 
>>>> likely to regularly drop onto and off of the network, or have nodes that 
>>>> cannot be kept secure, Slony-I is probably not the ideal replication 
>>>> solution for you."
>>>>         
>>> Esto no es lo mismo que tener conexiones de baja velocidad.  Por lo
>>> demas, qué tan problematico sea depende del volumen de transacciones que
>>> tengas.
>>>       
>> cierto. en el peor de los casos (si se corta el enlace entre la of.central 
>> y las sucursales) hay algo que se puede hacer a nivel de RDBMS?
>>     
>
> Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
> maestro, que se va vaciando a medida que los esclavos las reciben y
> aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
> conexion vuelve.
>
> En realidad ese es el modelo de operacion normal de Slony-I: todas las
> operaciones pasan siempre por una cola.  Lo que pasa en condiciones
> normales es que la cola se transmite en forma "instantanea".
>   

claro, por lo mismo si hay operaciones encoladas que modifican datos en 
la BD de una sucursal sin enlace, y esos mismos datos fueron modificados 
en la BD "central" podria quedar la c*!#$...

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)
From [EMAIL PROTECTED]  Mon Sep 24 12:52:41 2007
From: [EMAIL PROTECTED] (Alvaro Herrera)
Date: Mon Sep 24 12:55:08 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Ricardo Mun~oz A. escribió:
> Alvaro Herrera wrote:

>> Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
>> maestro, que se va vaciando a medida que los esclavos las reciben y
>> aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
>> conexion vuelve.
>>
>> En realidad ese es el modelo de operacion normal de Slony-I: todas las
>> operaciones pasan siempre por una cola.  Lo que pasa en condiciones
>> normales es que la cola se transmite en forma "instantanea".
>
> claro, por lo mismo si hay operaciones encoladas que modifican datos en la 
> BD de una sucursal sin enlace, y esos mismos datos fueron modificados en la 
> BD "central" podria quedar la c*!#$...

No, porque el central no puede modificar tablas para las que la sucursal
es maestra, y viceversa.

Es por ese motivo que Slony-I es maestro-esclavo y no multimaestro: no
hay manejo de conflictos.

Hay soluciones multimaestro como Postgres-R: http://postgres-r.org/ pero
es un problema muchisimo mas complejo de lo que parece; por ej. MySQL
Cluster tiene limitaciones y problemas que cuando las miras te das
cuenta de lo absurdas que son y de lo limitado de los casos en que se
pueden aplicar.  Las soluciones comerciales como Oracle RAC tambien
tienen limitaciones super raras que obviamente no te cuentan en los
folletos de marketing.

La unica diferencia entre las soluciones de replicacion de Postgres
versus otros gestores de BDs es que Postgres es honesto respecto de las
limitaciones.  Los desarrolladores de Postgres no estan interesados en
soluciones parciales que funcionan la mitad del tiempo; si quieres cosas
asi, puedes hacerlas perfectamente tu mismo.

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"Ciencias políticas es la ciencia de entender por qué
 los políticos actúan como lo hacen"  (netfunny.com)
From [EMAIL PROTECTED]  Mon Sep 24 13:18:34 2007
From: [EMAIL PROTECTED] (Ricardo Mun~oz A.)
Date: Mon Sep 24 13:21:38 2007
Subject: Evitar sql injection y xss
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Raul Perez wrote:
> Salud a todos
>
> Tengo mysql 5 y phpp 5 en un servidor con centos
> La pregunta es que codigo han implementado ustedes para
> asegurar sus aplicaciones en php para evitar injection de sql y xss

migrar a CakePHP y usar las herramientas que provee, mas info en [1]... ;)

en todo caso, en el mismo Cake la validacion de "SQL injection" viene 
"de fabrica"... por ejemplo en el metodo findAll(), y en todos los otros 
metodos que sirven para que el framework traiga datos desde la BD, se 
puede hacer esto:

...
$condiciones = array('nombres' => "LIKE %$nombres%", 'otro_campo' => "<> 
$valor", etc.);
$this->set('clientes', $this->Cliente->findAll($condiciones));
...

entonces, en findAll() el framework va armar el correspondiente SELECT y 
validara automaticamente todas las condiciones en el arreglo 
$condiciones evitando SQL injection, independientemente del motor de BD 
que uses con el framework.

[1] http://www.scribd.com/doc/5546/CakePHP-tutorial-no-3-from-IBM

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)
From [EMAIL PROTECTED]  Mon Sep 24 13:55:28 2007
From: [EMAIL PROTECTED] (Ricardo Mun~oz A.)
Date: Mon Sep 24 13:58:31 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]><[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Alvaro Herrera wrote:
> Ricardo Mun~oz A. escribió:
>   
>> Alvaro Herrera wrote:
>>     
>
>   
>>> Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
>>> maestro, que se va vaciando a medida que los esclavos las reciben y
>>> aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
>>> conexion vuelve.
>>>
>>> En realidad ese es el modelo de operacion normal de Slony-I: todas las
>>> operaciones pasan siempre por una cola.  Lo que pasa en condiciones
>>> normales es que la cola se transmite en forma "instantanea".
>>>       
>> claro, por lo mismo si hay operaciones encoladas que modifican datos en la 
>> BD de una sucursal sin enlace, y esos mismos datos fueron modificados en la 
>> BD "central" podria quedar la c*!#$...
>>     
>
> No, porque el central no puede modificar tablas para las que la sucursal
> es maestra, y viceversa.
>   

cierto. pero depende del modelo y la aplicacion si es que en algun 
momento se puede producir un conflicto... por algo los mismos 
desarrolladores de Slony-I indican que sirve cuando todos los nodos 
estan disponibles todo el tiempo...

> Es por ese motivo que Slony-I es maestro-esclavo y no multimaestro: no
> hay manejo de conflictos.
>
> Hay soluciones multimaestro como Postgres-R: http://postgres-r.org/ pero
> es un problema muchisimo mas complejo de lo que parece; por ej. MySQL
> Cluster tiene limitaciones y problemas que cuando las miras te das
> cuenta de lo absurdas que son y de lo limitado de los casos en que se
> pueden aplicar.  Las soluciones comerciales como Oracle RAC tambien
> tienen limitaciones super raras que obviamente no te cuentan en los
> folletos de marketing.
>
> La unica diferencia entre las soluciones de replicacion de Postgres
> versus otros gestores de BDs es que Postgres es honesto respecto de las
> limitaciones.  Los desarrolladores de Postgres no estan interesados en
> soluciones parciales que funcionan la mitad del tiempo; si quieres cosas
> asi, puedes hacerlas perfectamente tu mismo.
>   

volviendo al mail original, le recomendarias a Graciela el uso de 
Postgres + Slony-I?

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)
From [EMAIL PROTECTED]  Mon Sep 24 14:08:56 2007
From: [EMAIL PROTECTED] (Alvaro Herrera)
Date: Mon Sep 24 14:11:30 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Ricardo Mun~oz A. escribió:
> Alvaro Herrera wrote:
>> Ricardo Mun~oz A. escribió:
>>   
>>> Alvaro Herrera wrote:
>>>     
>>
>>   
>>>> Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
>>>> maestro, que se va vaciando a medida que los esclavos las reciben y
>>>> aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
>>>> conexion vuelve.
>>>>
>>>> En realidad ese es el modelo de operacion normal de Slony-I: todas las
>>>> operaciones pasan siempre por una cola.  Lo que pasa en condiciones
>>>> normales es que la cola se transmite en forma "instantanea".
>>>>       
>>> claro, por lo mismo si hay operaciones encoladas que modifican datos en 
>>> la BD de una sucursal sin enlace, y esos mismos datos fueron modificados 
>>> en la BD "central" podria quedar la c*!#$...
>>>     
>>
>> No, porque el central no puede modificar tablas para las que la sucursal
>> es maestra, y viceversa.
>
> cierto. pero depende del modelo y la aplicacion si es que en algun momento 
> se puede producir un conflicto... por algo los mismos desarrolladores de 
> Slony-I indican que sirve cuando todos los nodos estan disponibles todo el 
> tiempo...

Estas confundiendo una limitacion de arquitectura con una recomendación.
Slony-I funciona sin problemas cuando hay fallas de red, aunque la cola
de eventos va a ocupar espacio en disco.  Pero eso es totalmente
independiente de una hipotetica resolucion de conflictos, que no existe
porque es innecesaria.  Es innecesaria debido a que Slony-I es una
solucion maestro-esclavo, por lo tanto es imposible que existan
conflictos debido a que un servidor esclavo no puede escribir en la
tabla para la cual es esclavo.


> volviendo al mail original, le recomendarias a Graciela el uso de Postgres 
> + Slony-I?

Depende mucho de la naturaleza de la aplicacion.  Lo que yo intentaria
hacer seria tener copias esclavas de la base de dato en cada una de las
sucursales, de solo lectura (con Slony-I); y que las escrituras vayan a
la base de datos central.  De este modo no se notaria la lentitud del
enlace en las consultas de solo lectura (puesto que son locales a la
sucursal), y se requeriria contactar al central solamente para las
escrituras.

De esa forma, te ahorras todo el problema de la resolucion de conflictos
y de replicacion multimaestro.  El inconveniente es que cuando se caiga
la conexion sucursal-servidor, no podrias escribir (pero ojo, que eso
sucede en casi todos los sistemas multimaestro, incluso los
comerciales).

-- 
Alvaro Herrera                        http://www.advogato.org/person/alvherre
"On the other flipper, one wrong move and we're Fatal Exceptions"
(T.U.X.: Term Unit X  - http://www.thelinuxreview.com/TUX/)
From [EMAIL PROTECTED]  Mon Sep 24 15:45:49 2007
From: [EMAIL PROTECTED] (Rodrigo Fuentealba)
Date: Mon Sep 24 15:48:14 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

El 24/09/07, Alvaro Herrera <[EMAIL PROTECTED]> escribió:
> Ricardo Mun~oz A. escribió:
> > cierto. pero depende del modelo y la aplicacion si es que en algun momento
> > se puede producir un conflicto... por algo los mismos desarrolladores de
> > Slony-I indican que sirve cuando todos los nodos estan disponibles todo el
> > tiempo...
>

Estás poniendo a Slony-I para que se adapte a tu modelo, cuando en
realidad es al revés, debes adaptar tu modelo para que funcione con
esta solución. Por eso es que Álvaro hablaba de tablas heredadas; por
lo que entiendo, y como se me ocurre usarla, es hacer una tabla
maestra en cada zona que "extienda" a la tabla de datos total,
utilizando la característica de orientación a objetos de PostgreSQL, y
a esa tabla que extiende la pones como maestra en la aplicación. ¿Es
así, Álvaro?

> > volviendo al mail original, le recomendarias a Graciela el uso de Postgres
> > + Slony-I?
>
> Depende mucho de la naturaleza de la aplicacion.

También lo creo así.

> Lo que yo intentaria
> hacer seria tener copias esclavas de la base de dato en cada una de las
> sucursales, de solo lectura (con Slony-I); y que las escrituras vayan a
> la base de datos central.  De este modo no se notaria la lentitud del
> enlace en las consultas de solo lectura (puesto que son locales a la
> sucursal), y se requeriria contactar al central solamente para las
> escrituras.

Mira, este plugin lo estamos arreglando y usando para un sitio Web en
el cual tenemos ese inconveniente a nivel nacional, y no ha tenido
mayor problema hasta ahora (aunque es alfa!):

http://trac.symfony-project.com/trac/wiki/sfPropelLoadbalancerPlugin

El problema podría ser si la aplicación escribe constantemente en la
base de datos y volúmenes grandes de información va a ser un problema
grande; hay que dimensionar en este aspecto.

Por poner un ejemplo descabellado (pero posible!!!), si se les ocurre
la brillante idea de meter en la base de datos algunos archivos de una
cierta cantidad de Mb. para que éstos se compartan entre todas las
sucursales van a tener un problema así. Para eso es mejor utilizar un
repositorio local o alguna otra solución independiente de la base de
datos. Por alguno de estos parajes utilizaban un manejador de
documentos (no relacionado con PostgreSQL) con una conexión de 2 Mb.
fijos, y era un problema cuando alguien intentaba acceder a un
documento grande desde otra sucursal.

> De esa forma, te ahorras todo el problema de la resolucion de conflictos
> y de replicacion multimaestro.  El inconveniente es que cuando se caiga
> la conexion sucursal-servidor, no podrias escribir (pero ojo, que eso
> sucede en casi todos los sistemas multimaestro, incluso los
> comerciales).

Inclusive aquí debes apelar a las leyes de la física y no aceptar a
personas que se crean Criss Angel, para que aparezcan al mismo tiempo
en dos sucursales distintas solicitando la misma información. Entrete
caso, :-s

-- 
Rodrigo Fuentealba

Responder a