Ver Mensaje Individual
  #5  
Antiguo 13-01-2006
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Deberia existir menos trafico conectando/desconectando, pero la razon es que se debe acompañar de un buen uso de estrategias de cacheo, por ejemplo, descargar la lista de ciudades en un ClientDataSet y dejarla alli en el cliente, y no reconsultarla cada vez.

Para programar en red haz de cuenta que se trabaja en batch: Ejecutas una funcion que manda en un solo paso todo lo que mas se pueda y que retorne en un solo paso lo mas que se pueda.

Por ejemplo, si tienes un codigo como:

Abrir Lista Clientes. Ir al primero. Leer campo Id. Leer campo Nombre. Leer Campo Fecha.

Si estas conectado directamente al servidor el trafico va a aumentar. La razon: http://www.solucionesvulcano.com/blo...-primeros.html

Lo que se debe hacer es:

Traigame todos los datos del cliente, filtrador por, en esta estructura de memoria. Punto.

Lo de "sin estado" quiere decir que el servidor esta hecho de forma "olvidadiza": Si te vi, no te conoci...

Una comunicacion con estado es como hablar por telefono. Marcas, te contestan y empiezas a hablar. En todo momento tu sabes con quien hablas y al otro lado saben que hablan contigo. En todo momento, las partes tienen que recordan que estan hablando de tal tema y que estan hablando con tal persona.

Ahora imaginate que 4 personas quieren hablar entre si. Y luego 10. Pum!!! un problema de escalabilidad.... es muy dificil recordar que estaba hablando con mi abuelita de ir al medico y con mi medico de ir a ver futbol. Luego le digo a mi abuelita que nos vemos a las 5 y al medico que vamos a las 10. A las 5 era el partido de futbol!

Sin estado es como enviar email. "Hola compadre, vamos a futbol" te responde "Claro, pero tengo que chequear aquello" "Mijo, cuando me lleva al medico?" "Listo cuate, nos vemos a las 5" "Ok abuelita, que tal a las 10?"

Es obvio que es mas facil responder MUCHOS correos que hablar con MUCHAS personas. Los correos no estan conectados de forma dirtecta, sino que contienen los datos que permiten recordar de que se estaba hablando (el famoso re: Conversacion inutil, de: medico@futbolista.com para:yo@casa.net)

La arquitectura de red esta hecha de forma similar a un sistema de correo, es por eso que un servidor web es escalable, una vez que termina una tarea, se olvida completamente de quien se la pidio y solo vuelve al tema si se le informa los campos de, para, y de que estaban hablando.

En terminos practicos quiere decir que:

Clientes.Active:=true;
Clientes.First;
Clientes.Insert;
Clientes.Post;
Clientes.Close;

Es una "llamada telefonica". No hay forma de hacer Clientes.First si no se tiene la direccion de memoria de clientes y se sabe que ANTES se hizo Clientes.Open.

En un "sistema de correo" se haria.

IdCliente := AgregarCliente(DatosCliente):Integer;

Ahora tenemos un campo "para". Con esto podemos:

ActualizarCliente(IdCliente,NuevoNombre);

Pero en el servidor no se sabe que antes le dimos agregar cliente. Lo unico que sabe es que le llega un correo pidiendo que haga algo, lo hace y responde.

Para hacer un sistema de correo escalble, se programa en batch. Se mandan con parametros las instrucciones de lo que hay que hacer. Se abren solo los recursos necesarios (como conexiones de BD), se ejecutan las tareas y se cierran los recursos. Se retornar el resultado de la conversacion (cuando sea necesario).
__________________
El malabarista.
Responder Con Cita