Marcelo,
 
Respecto de:
" ... no se si no se va a colgar el IIS ...."
 
Me da la impresion que se esta complicando una impleemntacion sencilla por
el hecho de no tenerle fe al IIS.
 
Y en realidad es un producto noble, funciona bien y soporta carga.
Y mejor aun, se lleva muy bien con Network Load Balancing, con esto te
quiero decir, que el dia en que realmente te encuentres con un problema de
performance a causa del IIS, y no puedas solucionarlo con el tunning y
mejorando el hardware ... podes poner otro servidor al lado, y configurarlos
para que ambos procesen los requests.
 
Por otro lado, he visto web services procesando mucha carga, y servicios
procesando mucha carga ... desde el punto de vista de infraestructura, en
los casos que conoci, siempre dio mejores resultado y estabilidad de
servicio el IIS.
 
Por esto te recomiendo que hagas la prueba de procesar los requests en el
IIS, antes de agregar elementos que complican el desarrollo, la
implementacion y como dice mi amigo Carlos ... KISS (en la acepcion Keep It
Simple and Stupid).
 
 
Saludos!

  _____  

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Marcelo P
Enviado el: Jueves, 06 de Diciembre de 2007 10:45 a.m.
Para: [email protected]
Asunto: [puntonet] Web service asincronico ?


Bueno muchacos, no se como agradecer tanta procupación en el tema!!
Voy a tratar de explicar el negocio a ver si así queda mas claro
Hay negocios que deben validar ciertos datos de los clientes antes de poder
realizar una operación, para eso su sistema en algún momento consume un WS
mio, esto quiere decir que en el mismo momento tengo a n personas conectadas
simultaneamente para pedir digamos "autorización".
El tema es que esto está resuelto en la actualidad yo poniendo un módulo mío
en cada cliente, que llama asincronicamente al ws ( por ende ya se como
consumir asincronicamente un ws desde el cliente), el WS deja al pedido en
el filesystem y vuelve al cliente con un número, y luego vuelve varias veces
a preguntar si está el resultado, hasta que se lo lleva.
El tema que eso lo resuelvo con mi módulo.
Ahora surgió la situación que hay clientes que no quieren módulos de
terceros en sus sistemas por ende, ellos quieren consumir directamente mi
WS, por ende , mandan un mensaje y esperan la respuesta, pero como pueden
ser muchos, no se si no se va a colgar el IIS, abriendo un thread por cada
pedido, ya que va a empezar a encolar y por ende todo puede morir por TO.
Es por eso que pensé que la solucion podía ser asincronismo, pero en el WS
no en el cliente.
La verdad no se como se resuelve esto en otros lados.
Espero que con esto quede mas claro.
Saludos a todos


Oscar Zárate <[EMAIL PROTECTED]> escribió: 

Marcelo ... estoy un poco perdido. Voy a citar tus mails anteriores:
 
1.- Subject del mensaje: Web service asincronico
2.- De este ultimo mail: no se como hacer que el web service se comporte de
forma asincrónica
3.- De un mail anterior: El tema es que la gente que lo va a consumir no
pude seguir con su operación hasta la respuesta de mi WS, asi que por eso no
lo harían asincronico.
 
Que es lo que queres hacer? No estaras usando en forma erronea la palabra
"asincronico"? Podes explicar un poco mejor el negocio (aunque sea cambiando
los objetos reales por algo que se le parezca asi no tenes que revelar
ningun secreto)? 
 
Yo me perdi.
 
SaludOZ,

 
On 12/6/07, Marcelo P <[EMAIL PROTECTED]> wrote: 

Pero justamente ese es el problema, no se como hacer que el web service se
comporte de forma asincrónica.
Saludos

"Pablo A. Allois" <[EMAIL PROTECTED]> escribió: 

Probalo, personalmente opino que el IIS tiene que responderte bien.
 
Hacete una aplicacion que tire 400 requests al webservice funcionando en
forma asincrona.
En el performance counter medile:
    Al server
        - Memoria
        - Cpu 
        - Paging File
    Al proceso w3wp.exe

        - Memoria
        - Cpu 
        - Threads
    
    Objeto ASP.NET <http://asp.net/> 
        - Requests current
        - Requests queued - asegurate que este contador se mantenga en cero
 
Hay mucho mas para moniteorear el server, pero este es un buen principio.
 
Y podes tener otros cuellos de botella, como el SQL Server y proceso que se
encarga de parsear el mensaje.
 
 
Saludos!
 
 
 

  _____  

De: [email protected] [mailto: [email protected]
<mailto:[email protected]> ] En nombre de Marcelo P
Enviado el: Miércoles, 05 de Diciembre de 2007 12:19 p.m.
Para: [email protected]
Asunto: [puntonet] Web service asincronico ?

 
Buenas
Repondo sobre esta respuesta , ya que es la que termino de entender mejor
La idea es mi ws atiende un pedido, ese pedido a su vez llama a un proceso
que se encarga de parsera el mensaje , ponerlo en un cola y empezar a buscar
la respuesta , que puede demorar a lo sumo 3 segundo, por último insertar un
registro en un BD y luego parsear la respuesta para que sea enviada al que
requirio. 
Todo esto no tarda mas de 5 a 7 segundos en la actualidad , pero ahora voy a
tener muchos requirimientos en determinados horarios ( no se si mas de 100
concurrentes pero por ahí ).
El tema es que la gente que lo va a consumir no pude seguir con su operación
hasta la respuesta de mi WS, asi que por eso no lo harían asincronico. 
Al final yo lo que quiero es que no se cuelge el IIS, pero por lo que dicen
el que debería relover el tema de hilos es el IIS y el ws se comportaría
como uno WS simple y sincrónico.
Desde yá, muchas gracias a todos. 
Saludos

"Pablo A. Allois" <[EMAIL PROTECTED]> escribió: 

Hola Marcelo,
 
    Tenes un estimado de cuanto va a demorar en promedio la ejecucion de
cada request ?
 
    El IIS puede soportar 100 pedidos concurrentes, si no fuera asi, yo
estaria escribiendo en una lista de Apache y www.microsoft.com
<http://www.microsoft.com/>  estaria sobre tomcat.
 
    Pero te recomendaria que te asesores sobre el tunning del IIS, puede ser
un poco mas complejo que aumentar los hilos en un .config ... tambien
deberias hacerle un monitoreo para asegurarte que no encole requests. 
    
    En cuanto a asincrono o no ... me parece que lo mas simple es el
webservice sincronico y que los clientes lo ejecuten como mas les guste.
Para hacer un webservice que ejecute en forma asincrona, deberias tener
alguna razon que te lo justifique ... y mejor razon que 100 requests
concurrentes. 
 
    
Saludos!
    

  _____  

De: [email protected] [mailto:  <mailto:[email protected]>
[EMAIL PROTECTED] En nombre de Marcelo P
Enviado el: Martes, 04 de Diciembre de 2007 04:49 p.m.
Para: [email protected]
Asunto: [puntonet] Web service asincronico ?

 
Bueno,ante todo gracias por las respuestas.
Les comento un poco mas
Las respuestas que debe dar el WS no pueden demorar mas de 5 o 7 segundo.
El tema de querer asincronismo en esto es que, a mi me pueden llegar 100
pedidos concurrentes y no creo que el IIS corriendo asp.net
<http://asp.net/>  pueda trabajar con tantos hilos a la vez asi como si
nada, por eso es que yo quiro un asincronismo, ya que pienso que eso es la
solución, per la verdad no lo se. 
Como les dije antes, la duda mia con el asincronismo, es que si yo llamo a
un proceso A de un web service, que ejecute algoi asincronicamente, cuanlo
lo llame, me va a devolver el control al flujo del WS, por ende va a
terminar y se va a ir de nuevo al cliente, sin que todavía este la
respuesta, por ende nunca se que hay una respuesta. 
Espero haber sido claro, sino avisen y lo trato de expolicar mejor.
Saludos a todos

Carlos Peix <  <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]>
escribió: 

Hola Diego,
 
La diferencia entre un WS que quede procesando y el cliente maneje el pedido
asincronico y lo que propone Oscar es "Escalabilidad". IIS y ASP.NET
<http://asp.net/>  estan preparados para atender muchas peticiones pero con
la condicion de que sean de ejecucion breve, muy breve. ASP.NET
<http://asp.net/>  muere tempranamente si te demoras en responder la
solicitud, incluso es sorprendente que con unos pocos clientes puedas
tirarlo por el piso. Esto no es un error de diseño en ASP.NET
<http://asp.net/> , mas bien es porque los diseñadores asumen algunos puntos
de partida, uno de ellos es que el request debe ser resuelto lo mas rapido
posible.
 
El tema que plantea Marcelo tiene dos salidas, si el tiene requests que
impliquen no tiene mas de 10 o 15 requests concurrentes (por ejemplo, si el
request tarda 1 segundo y tiene 100 clientes que se comunican cada 10
segundos, tiene un promedio de 10 clientes concurrentes), entonces puede
intentar ver si funciona con la solucion simple (sincronico o blocking del
lado del server y asincronico del lado del cliente). Si, en cambio, necesita
mas capacidad, probablemente necesite algo como lo que propone Oscar. 
 
La solucion que vos mencionas se acerca a la que propuso nuestro amigo
rapado (Oscar) pero adolece de algunos riesgos para mi gusto: no me gusta
mucho hostear worker threads en el proceso de ASP.NET <http://asp.net/> , la
escalabilidad es limitada tambien (no por el limite de threads de ASP.NET
<http://asp.net/>  sino por la capacidad de proceso del server). Siembre es
bueno que un web server tenga mucho procesador disponible.
 
La solucion basada en MQ para el request y uno o mas procesadores en
paralelo es buena. Queda resolver la vuelta de la respuesta. Algunos
utilizar MQ tambien para la vuelta pero a mi no me gusta, prefiero volver
por una base de datos SQLServer para tomar el mensaje por ID en lugar de
escanear toda la cola de vuelta para buscar el mensaje (hasta donde se, MQ
no tiene una operacion eficiente para tomar un mensaje por ID). Igual, esto
seria importante solo en casos de muy alto caudal. 
 
Abrazo
 
Carlos Peix

 

  _____  

From: [email protected] [mailto:  <mailto:[email protected]>
[EMAIL PROTECTED] On Behalf Of Diego Jancic
Sent: Lunes, 03 de Diciembre de 2007 08:16 p.m.
To: [email protected]
Subject: [puntonet] Web service asincronico ?

 
Hola Oscar,
Pero entre enseñarle al programador a manejar ese WS con todos esos métodos
y enseñarle a hacer la llamada asincrónica (si es que no la sabe), no es mas
fácil la 2da? 
Yo justo ahora estoy haciendo algo como lo que decis, envio pedidos (via
MSMQ) y hay N threads (prefijados por configuración) que procesan todas las
tareas… pero eso es por motivos muy particulares y (si esta todo dentro de
IIS) la carga no cambia en nada… Si usas un WS, o una pagina web IIS ya te
da la funcionalidad de tener multiples threads, una cola de mensajes en
espera, etc… 

No es que quiera parecer muy negativo, pero me no lo veo eh.. J

Salu2!


From: [email protected] [mailto: [EMAIL PROTECTED] On Behalf Of Oscar
Zárate
Sent: Lunes, 03 de Diciembre de 2007 07:28 p.m .
To: [email protected]
Subject: [puntonet] Web service asincronico ?
Agrego algo mas. 
El metodo IniciarTarea podría estar escribiendo los parametros de la
consulta en una Queue y del otro lado de la Queue podría haber N servidores
leyendo la Queue y tomando el requerimiento de la consulta (haciendo la
consulta y escribiendo en la table de resultados). 
Me gusta la idea ... me parece que me fui de mambo, pero me gusta.
SaludOZ,
PS: No creo ser muy original con esto, ya debe estar implementado mil veces
y seguro seguro seguro ... hay un patron con nombre para resolver esto.

 
On 12/4/07, Oscar Zárate <[EMAIL PROTECTED]> wrote: 
Yo creo que la idea sería escribir algo que responda "inmediatamente" o
responda ... "preguntame luego con este ticket.
No se cual es el negocio, pero me imagino algo que tenga mucho tiempo de
procesamiento ... entonces el web service tiene un metodo iniciar tarea (no
el proxy, el web service) este metodo inmediatamente retorna un ticket y
dispara un proceso y cuando finaliza el proceso guarda el resultado completo
en una tabla con ID igual al numero de ticket. Luego, otro metodo que recibe
el ticket y devuelve "resultado" o "preguntame luego". Este segundo metodo,
busca en la tabla si existe algun resultado para ese ticket, si existe
retorna el resultado, sino retorna "preguntame luego". 
Incluso la respuesta del proceso deberia ser formateada para que el metodo
que devuelve sea lo mas rapido posible (solo lee y retorna, no pierde tiempo
en ningun formateo).
De este modo, haces un "servicio" (sea web o no) que es "asincronico".
Incluso en el caso de una consulta MUY RAPIDA, la consulta completa consta
igual de una llamada a dos metodos.
Espero haber sido claro, creo que de ese modo solucionas el problema.
 
SaludOZ,
 
On 12/4/07, Diego Jancic <[EMAIL PROTECTED]> wrote: 
Hola,
Lo que no vas a poder hacer es que sea asincrónico desde el punto de vista
del cliente. El cliente (desarrollado por cualquier otra persona) se 
conecta, recibe una respuesta y ya esta, no podes hacer nada mas. 
Lo que podrías hacer es trabajar dentro del web service para que no funcione
dentro de un thread de IIS, y asi sobrecargas menos al IIS.

Cuando decis "o que se comporte de alguna manera de atender muchas 
peticiones", no se bien a que te referis. Los WS están preparados para
recibir muchas peticiones, y si al usuario final le molesta que tarde tanto
(imaginemos que realiza un proceso largo, pero no se está sobre cargando el 
servidor del WS), es trabajo del que arma el cliente hacer que le aparezca
un hermoso "loading..."

Posiblemente la solución sea escribir un help para enseñarle a los otros
desarrolladores a hacer las cosas asincrónicas :) 

Saludos!


-----Original Message-----
From: [email protected] [mailto:  <mailto:[email protected]>
[EMAIL PROTECTED] On Behalf Of Leonardo
Micheloni 
Sent: Lunes, 03 de Diciembre de 2007 05:55 p.m.
To: [email protected]
Subject: [puntonet] Web service asincronico ?

Entonces no te puedo ayudar, no tengo idea

On Dec 3, 2007 3:15 PM, Marcelo P <  <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]> wrote:
> Gracias por la respuesta
> El tema es que yo tengo que desarrollar un web service para que sea 
> consumido por cualquiera, yo no programo ni armo el proxy. Lo que tengo 
que
> hacer es que el web service sea asyncronico o que se comporte de alguna
> manera de atender muchas peticiones.
> Saludos 
>

 


__________ Información de NOD32, revisión 2699 (20071203) __________

Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com <http://www.nod32.com/> 




  _____  


Compartí video en la ventana de tus mensajes y también tus fotos de Flickr.
Usá el Nuevo Yahoo! Messenger versión Beta. 
Visitá http://ar.beta.messenger.yahoo.com/



  _____  


Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva Tarjeta de
crédito. De tu PC directo a tu casa. 
Visitá www.tuprimeratarjeta.com.ar <http://www.tuprimeratarjeta.com.ar/> 



  _____  


Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva Tarjeta de
crédito. De tu PC directo a tu casa. 
Visitá www.tuprimeratarjeta.com.ar <http://www.tuprimeratarjeta.com.ar/>  




  _____  


Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva Tarjeta de
crédito. De tu PC directo a tu casa. 
Visitá www.tuprimeratarjeta.com.ar

Responder a