Repito que sería bueno que simules la situación, creo que IIS correctamente configurado tiene que funcionar ante este escenario.
On Dec 6, 2007 10:45 AM, Marcelo P <[EMAIL PROTECTED]> wrote: > 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 > > - 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] 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 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: [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 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 < [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 > estan preparados para atender muchas peticiones pero con la condicion de que > sean de ejecucion breve, muy breve. 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, 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, la escalabilidad es > limitada tambien (no por el limite de threads de 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: [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: [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 < [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 > > > > > > > > ________________________________ > > > 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 > > > > > > ________________________________ > > > 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 > > > > > > > > > ________________________________ > > 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 > > -- Leonardo Micheloni. http://leomicheloni.blogspot.com/
