<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: A report on Push versus Pull</title>
	<atom:link href="http://ajaxian.com/archives/a-report-on-push-versus-pull/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com/archives/a-report-on-push-versus-pull</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 09 Feb 2012 06:55:33 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
	<item>
		<title>By: Paul Caplin</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-254914</link>
		<dc:creator>Paul Caplin</dc:creator>
		<pubDate>Tue, 04 Sep 2007 12:40:20 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-254914</guid>
		<description>Totally agree with the last comment by Steven Roussey -- it&#039;s as if they&#039;ve done an academic study about the feasibility of crossing the Atlantic and concluded that it&#039;s problematic because their pedalo sank. If you want to do efficient server push on the Web, you need an efficient push server. For example, the one that we sell (www.caplin.com) comfortably supports over 10,000 concurrent users on an average midrange server, and can send out over 4,000,000 messages per second. And that&#039;s BEFORE clustering. You just have to design it right.</description>
		<content:encoded><![CDATA[<p>Totally agree with the last comment by Steven Roussey &#8212; it&#8217;s as if they&#8217;ve done an academic study about the feasibility of crossing the Atlantic and concluded that it&#8217;s problematic because their pedalo sank. If you want to do efficient server push on the Web, you need an efficient push server. For example, the one that we sell (www.caplin.com) comfortably supports over 10,000 concurrent users on an average midrange server, and can send out over 4,000,000 messages per second. And that&#8217;s BEFORE clustering. You just have to design it right.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Engin Bozdag</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252208</link>
		<dc:creator>Engin Bozdag</dc:creator>
		<pubDate>Mon, 02 Jul 2007 09:15:37 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252208</guid>
		<description>Thank you Alex and Greg for your feedback, it is very useful for the extension of our paper.

We would like to respond to some of your comments:

*&quot;The report also could be read as implying that the bayeux protocol is only long polling. While long polling is the default, it can also support polling or streaming&quot;*

We only considered what was actually implemented in Jetty, not what was in the draft. Maybe we should have made this more clear.

*&quot;The pull implementation they test has a 15 second period, which means that events will have an average 7.5 second latency for a perfect implementation.   While there are many many applications that can live such latency (or longer), they are not the target applications for Ajax Comet techniques.  A  15 second latency is simply too much for chat, for collaborative editing,&quot;*

This is true, we only considered one interval for pull merely to constrain the number of test variations. Using smaller pull intervals will surely have an effect on CPU usage. This is something that we for sure will consider in the extension of our paper. However, our goal in this version was to compare how pull compares with push if the publish interval was higher/lower than the pull interval. Using a single pull interval was enough in order to see the results.
Theoretically, we expect a 15 s pull interval with 15 s publish interval to be comparable with as the push version with 15 s publish interval.

*&quot;More over, I think the 7 times figure is at least partially due to an early implementation of Bayeux and a buggy release of jetty&quot;*

In our paper we tested Jetty 6.1.2 RC5.  We will try 6.1.4 in our next tests.

Finally, we are planning to make the test source-code public so that others could conduct similar experiments on Ajax/Comet applications.</description>
		<content:encoded><![CDATA[<p>Thank you Alex and Greg for your feedback, it is very useful for the extension of our paper.</p>
<p>We would like to respond to some of your comments:</p>
<p>*&#8221;The report also could be read as implying that the bayeux protocol is only long polling. While long polling is the default, it can also support polling or streaming&#8221;*</p>
<p>We only considered what was actually implemented in Jetty, not what was in the draft. Maybe we should have made this more clear.</p>
<p>*&#8221;The pull implementation they test has a 15 second period, which means that events will have an average 7.5 second latency for a perfect implementation.   While there are many many applications that can live such latency (or longer), they are not the target applications for Ajax Comet techniques.  A  15 second latency is simply too much for chat, for collaborative editing,&#8221;*</p>
<p>This is true, we only considered one interval for pull merely to constrain the number of test variations. Using smaller pull intervals will surely have an effect on CPU usage. This is something that we for sure will consider in the extension of our paper. However, our goal in this version was to compare how pull compares with push if the publish interval was higher/lower than the pull interval. Using a single pull interval was enough in order to see the results.<br />
Theoretically, we expect a 15 s pull interval with 15 s publish interval to be comparable with as the push version with 15 s publish interval.</p>
<p>*&#8221;More over, I think the 7 times figure is at least partially due to an early implementation of Bayeux and a buggy release of jetty&#8221;*</p>
<p>In our paper we tested Jetty 6.1.2 RC5.  We will try 6.1.4 in our next tests.</p>
<p>Finally, we are planning to make the test source-code public so that others could conduct similar experiments on Ajax/Comet applications.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Wilkins</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252199</link>
		<dc:creator>Greg Wilkins</dc:creator>
		<pubDate>Mon, 02 Jul 2007 00:13:39 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252199</guid>
		<description>I&#039;ve blogged a more complete response at http://blogs.webtide.com/gregw/2007/07/01/1183286820000.html</description>
		<content:encoded><![CDATA[<p>I&#8217;ve blogged a more complete response at <a href="http://blogs.webtide.com/gregw/2007/07/01/1183286820000.html" rel="nofollow">http://blogs.webtide.com/gregw/2007/07/01/1183286820000.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Wilkins</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252190</link>
		<dc:creator>Greg Wilkins</dc:creator>
		<pubDate>Sun, 01 Jul 2007 09:31:13 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252190</guid>
		<description>Another thing I don&#039;t understand with the paper, is how can a pull applications with a poll time of 15s ever have a mean message trip time of less than 7.5 seconds?   The report has a minimum mean time of 2.5 s which is just impossible unless the server side events always happen to coincide with the poll from the client?</description>
		<content:encoded><![CDATA[<p>Another thing I don&#8217;t understand with the paper, is how can a pull applications with a poll time of 15s ever have a mean message trip time of less than 7.5 seconds?   The report has a minimum mean time of 2.5 s which is just impossible unless the server side events always happen to coincide with the poll from the client?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Wilkins</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252189</link>
		<dc:creator>Greg Wilkins</dc:creator>
		<pubDate>Sun, 01 Jul 2007 09:22:01 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252189</guid>
		<description>Firstly, this report is a good contribution and I hope we see many more such studies into push vs pull.    However I think the study is a  little flawed as the 15s pull interval used is heavily biased against push technologies.     

If your application can have a 15s latency in event delivery, then perhaps traditional polling is sufficient.  But if your application needs a lower latency (say 5 seconds for an auction bidding site or  1.5 seconds for chat or other user interaction), then polling frequencies for pull applications will be significantly higher.   If you need to make 10 times more requests with pull, then push can use 7 times more CPU and still be more efficient.  (Note I believe that 7 times CPU figure is probably due to the early implementation used and I&#039;d like to see the results from the 6.1.4 release of Jetty).

So I would love to see this report reproduced with results produced on 3 axis:   period between events: 0.1, 1, 5, 10, 25, 50 seconds ; 
minimal acceptable latency: 0.5, 1, 2, 5, 10, 25, 50 seconds ; number of  clients 1, 10, 100, 1000, 5000.

I would expect within that space there will be load profiles best suited for polling and others best suited for long polling.  Note that bayeux does not need to be long polling and can handling polling or a combination between the two.

There will also be differences if events need to be delivered to all clients or just a subset of clients.

So good start! but the results are only applicable to a limited range of possible Ajax applications.</description>
		<content:encoded><![CDATA[<p>Firstly, this report is a good contribution and I hope we see many more such studies into push vs pull.    However I think the study is a  little flawed as the 15s pull interval used is heavily biased against push technologies.     </p>
<p>If your application can have a 15s latency in event delivery, then perhaps traditional polling is sufficient.  But if your application needs a lower latency (say 5 seconds for an auction bidding site or  1.5 seconds for chat or other user interaction), then polling frequencies for pull applications will be significantly higher.   If you need to make 10 times more requests with pull, then push can use 7 times more CPU and still be more efficient.  (Note I believe that 7 times CPU figure is probably due to the early implementation used and I&#8217;d like to see the results from the 6.1.4 release of Jetty).</p>
<p>So I would love to see this report reproduced with results produced on 3 axis:   period between events: 0.1, 1, 5, 10, 25, 50 seconds ;<br />
minimal acceptable latency: 0.5, 1, 2, 5, 10, 25, 50 seconds ; number of  clients 1, 10, 100, 1000, 5000.</p>
<p>I would expect within that space there will be load profiles best suited for polling and others best suited for long polling.  Note that bayeux does not need to be long polling and can handling polling or a combination between the two.</p>
<p>There will also be differences if events need to be delivered to all clients or just a subset of clients.</p>
<p>So good start! but the results are only applicable to a limited range of possible Ajax applications.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Russell</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252185</link>
		<dc:creator>Alex Russell</dc:creator>
		<pubDate>Sat, 30 Jun 2007 22:00:47 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252185</guid>
		<description>Having given the paper a look, I&#039;d suspect that the CPU utilization they&#039;re seeing here is related to how Jetty handles the concurrency internally. Would be good to see Greg Wilkins comment here and it&#039;d be neat of the Delft researchers shared their test harness code. It&#039;d certainly help improve the performance of all Bayeux implementations quickly.

Tal: we&#039;ve discussed your (potentially?) litigious and indefensible assertions in the past. They deserve no further mention.</description>
		<content:encoded><![CDATA[<p>Having given the paper a look, I&#8217;d suspect that the CPU utilization they&#8217;re seeing here is related to how Jetty handles the concurrency internally. Would be good to see Greg Wilkins comment here and it&#8217;d be neat of the Delft researchers shared their test harness code. It&#8217;d certainly help improve the performance of all Bayeux implementations quickly.</p>
<p>Tal: we&#8217;ve discussed your (potentially?) litigious and indefensible assertions in the past. They deserve no further mention.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brad Neuberg</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252167</link>
		<dc:creator>Brad Neuberg</dc:creator>
		<pubDate>Sat, 30 Jun 2007 00:54:32 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252167</guid>
		<description>Tal, good luck on getting that patent to stand. Comet style push has been used in many forms for many years, and your patent sounds like an obvious application rather than a new invention. You may get the patent, but good luck enforcing it.</description>
		<content:encoded><![CDATA[<p>Tal, good luck on getting that patent to stand. Comet style push has been used in many forms for many years, and your patent sounds like an obvious application rather than a new invention. You may get the patent, but good luck enforcing it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steven</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252162</link>
		<dc:creator>Steven</dc:creator>
		<pubDate>Fri, 29 Jun 2007 20:55:48 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252162</guid>
		<description>I send (push) all events for a user via a single connection at presence.domain.com and pull from the domain of the request (likely www.domain.com). With a push/pull, you want two different domains since the browser will only allow two connections per domain, and both the push and pull connections stay open. On the main side (the pull), the data/html/whatever comes back, and that might cause something like an image download or something which take up the second connection for that main domain (www).

The reason to use two connections is because they scale quite differently, so it can be incredible cheaper. :) Some of us are bathed with cash, so we find ways around it. ;)

See, the main connection is the original connection -- the one that requested the page, which was kept around via keep-alive. That server already is setup to be queried for big things like page views, etc. On the webserver side I&#039;m using apache, and all the connections are handled by one thread. There isn&#039;t really a way to do COMET that way efficiently.

However, on the second connection, which does not go through a webserver, but rather a custom single thread socket server dealing with some simple HTTP, and simple messaging. This server that is doing the push actually scales far better than the web and application servers (since it doesn&#039;t need much code).

So push becomes very cheap, and the load is actually &lt;b&gt;lower&lt;/b&gt; than using timed pulls.</description>
		<content:encoded><![CDATA[<p>I send (push) all events for a user via a single connection at presence.domain.com and pull from the domain of the request (likely <a href="http://www.domain.com" rel="nofollow">http://www.domain.com</a>). With a push/pull, you want two different domains since the browser will only allow two connections per domain, and both the push and pull connections stay open. On the main side (the pull), the data/html/whatever comes back, and that might cause something like an image download or something which take up the second connection for that main domain (www).</p>
<p>The reason to use two connections is because they scale quite differently, so it can be incredible cheaper. :) Some of us are bathed with cash, so we find ways around it. ;)</p>
<p>See, the main connection is the original connection &#8212; the one that requested the page, which was kept around via keep-alive. That server already is setup to be queried for big things like page views, etc. On the webserver side I&#8217;m using apache, and all the connections are handled by one thread. There isn&#8217;t really a way to do COMET that way efficiently.</p>
<p>However, on the second connection, which does not go through a webserver, but rather a custom single thread socket server dealing with some simple HTTP, and simple messaging. This server that is doing the push actually scales far better than the web and application servers (since it doesn&#8217;t need much code).</p>
<p>So push becomes very cheap, and the load is actually <b>lower</b> than using timed pulls.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tal Broda</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252149</link>
		<dc:creator>Tal Broda</dc:creator>
		<pubDate>Fri, 29 Jun 2007 16:13:16 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252149</guid>
		<description>In Oracle BAM we use 1 persistent connection on which we multiplex all of the events to all of the windows that have active components (patent pending), so there is no need for separate subdimains or anything like that. Using push to send the event notifications and then pulling using another request does not make sense to me, since you can push the event with the data at almost the same cost, and you save the latency and server load associated with the pull.</description>
		<content:encoded><![CDATA[<p>In Oracle BAM we use 1 persistent connection on which we multiplex all of the events to all of the windows that have active components (patent pending), so there is no need for separate subdimains or anything like that. Using push to send the event notifications and then pulling using another request does not make sense to me, since you can push the event with the data at almost the same cost, and you save the latency and server load associated with the pull.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steven Roussey</title>
		<link>http://ajaxian.com/archives/a-report-on-push-versus-pull/comment-page-1#comment-252147</link>
		<dc:creator>Steven Roussey</dc:creator>
		<pubDate>Fri, 29 Jun 2007 14:51:02 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2530#comment-252147</guid>
		<description>Did I not read it right, or are they using a normal webserver for the long connections? It certainly won&#039;t scale that way. You will need your own socket server to handle some HTTP traffic separate from your web pages. I really doubt meebo or anyone would do things their way. 

And while we are at it, I&#039;ll coin a phrase right now: COMET-PULL. That is, using a long running &quot;COMET&quot; connection to receive *events*, and based on those events, then pulling the data from the webserver (using Keep-Alive on that connection). And yes, they should be on separate subdomains to avoid browser connection limits. That way your socket server does not need to handle anything related to how to generate content (leave that to the webserver) -- it just sends events.</description>
		<content:encoded><![CDATA[<p>Did I not read it right, or are they using a normal webserver for the long connections? It certainly won&#8217;t scale that way. You will need your own socket server to handle some HTTP traffic separate from your web pages. I really doubt meebo or anyone would do things their way. </p>
<p>And while we are at it, I&#8217;ll coin a phrase right now: COMET-PULL. That is, using a long running &#8220;COMET&#8221; connection to receive *events*, and based on those events, then pulling the data from the webserver (using Keep-Alive on that connection). And yes, they should be on separate subdomains to avoid browser connection limits. That way your socket server does not need to handle anything related to how to generate content (leave that to the webserver) &#8212; it just sends events.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

