[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


To: Daniel Manley <dmanley@tucows.com>
Cc: "'ietf-provreg@cafax.se'" <ietf-provreg@cafax.se>
From: Dave Crocker <dcrocker@brandenburg.com>
Date: Thu, 23 Aug 2001 10:02:51 -0700
In-Reply-To: <3B852CBB.1060600@tucows.com>
Sender: owner-ietf-provreg@cafax.se
Subject: Re: Message Pushing and TCP Transport

At 09:18 AM 8/23/2001, Daniel Manley wrote:
>>And you are placing a load on the server that the registry operator 
>>should not appreciate very much.
>
>Ok, let's say push replaces poll.  The registrars will still have to ping 
>the registry to keep persistent connections alive.

You seemed to have missed my point, that such pinging is not a good 
thing.   If the server wants to be shutting down inactive connections, then 
the folks running the server are not going to appreciate your circumventing 
their management policies.  They will then add mechanisms for disabling the 
ping, in whatever form it is commonly achieved.

So, you want to believe that polling will happen no matter what.  I am 
trying to point out the negative side of such an activity.


>Thinking also of a possible server design:  a multi-threaded or -processed 
>server is working for many clients.

yup.  that's why the pinging creates an aggregate overhead that server 
operators will not appreciate.


>clientA issues a transfer for an object and places a message on an 
>internal queue for clientB.

Huh?  ClientA places a message on a queue for ClientB.  What ARE you 
talking about?


>any of the threads working for clientB has to read the the queue when it 
>has time (i.e. "poll" the queue) and then pushes the message to the 
>registrar.

You have a strang model of server and thread implementation.  The idea that 
it requires internal polling, no matter what, is simply wrong.


>... somewhere along the line, a process or thread will have to poll 
>something to see if there's anything to do.

wrong.


>>Actually, no.  Pushing has no wasted effort, unlike polling.  Hence the 
>>overhead of push is only incurred when there is something to push.
>
>Except for queuing when the message can't be delivered taken right away.

queuing is an entirely separate bit of mechanism and overhead, with equal 
overhead on top of push or pull.

the point that is being missed is polling permits only a subset of the 
behaviors and efficiencies that push permits.  Push demonstrates vastly 
better scaling properties.

Internet application protocols have intentionally chosen simplistic 
transaction models, in the past.  That has been fine for small scale 
activities.  As we try to permit serious, large-scale applications, we need 
to use the kinds of mechanisms that modern, large-scale transaction systems 
use.

And have used for a very long time.  (Which is a semi-polite way of 
suggesting that most of us need to realize that we are amateurs in the 
field of transaction processing. Amateurs usually find the work of 
professionals to be "more complicated" than we are used to...)

(For reference, please note the "we".  That is not just for politeness.  I 
very much include myself.  The difference, right now, is that I have been 
trying to appreciate the nature of this other area of expertise, rather 
than to automatically reject it because it makes protocol work a bit more 
complicated.)


>>So I have no idea how your are calculating a "multiplied" overhead.
>>Feel free to provide detail for your claim.
>
>I haven't invested any research time to back my claim.  I was just using 
>common sense.




>Let's say that 10 registrars are connected to the registry.  In a polling 
>system, the registry sits back and waits for requests from the 
>servers.  Much or most of the CPU time is dedicated to serving requests.

and pings and/or polling requests for non-existent data.  so, it is 
spending time for each client, doing unproductive overhead.


>In a pushing system, the registry has to be proactive and take up CPU 
>cycles from serving requests to push notifications to the registrars.

The server needs to get the data to the client, no matter what.  You seem 
to feel that sending it immediately, rather having to wait an arbitrary 
amount of time, somehow incurs onerous overhead.  It doesn't.

What it DOES do is a) impose delay, and b) force extra overhead from 
unproductive polling.


>That might not seem so bad at first, but, as I mentioned above in this 
>email, if the registrar is not connected or if an acknowledgment is not 
>returned, the registry has to take the time to queue this message 
>(dropping it then and there doesn't seem like a good idea) and try to 
>deliver it later.  Now the server  is performing housework for the client, 
>taking more time away from serving requests.
>
>This is where the "multiplied" part comes in:  the registry is now 
>performing delivery work for X registrars while the registrar clients 
>happily sit around waiting for something from the server while still 
>inundating the server with more requests.

Frankly I can't figure out the processing model that you are describing, 
since you seem to view queuing as intimately involved in the i/o model, 
although it does not need to be.


>What happens if there is a persistent queue for a particular registrar? If 
>there are a bunch of old (but not yet expired) transfer notifications 
>waiting around and a notification of low balance shows up, which do you 
>try to send the transfers first?  Do you implement a prioritized 
>queue?  If you do, should we include the message priorities in the 
>protocol spec?  Then registrars have to additionally deal with message 
>priorities.

None of this is relevant to the choice of mechanism that sends the "next" 
entry from the queue.

d/

----------
Dave Crocker  <mailto:dcrocker@brandenburg.com>
Brandenburg InternetWorking  <http://www.brandenburg.com>
tel +1.408.246.8253;  fax +1.408.273.6464


Home | Date list | Subject list