the article from IBM has very comprehensive introduction on the various Comet solutions, such as polling, long-polling and streaming.
http://www.ibm.com/developerworks/web/library/wa-cometjava/
AJAX polling problem
Refer to original for the detail: http://docs.codehaus.org/display/JETTY/Continuations
But there is a new problem. The advent of AJAX as a web application model is significantly changing the traffic profile seen on the server side. Because AJAX servers cannot deliver asynchronous events to the client, the AJAX client must poll for events on the server. To avoid a busy polling loop, AJAX servers will often hold onto a poll request until either there is an event or a timeout occurs. Thus an idle AJAX application will have an outstanding request waiting on the server which can be used to send a response to the client the instant an asynchronous event occurs. This is a great technique, but it breaks the thread-per-request model, because now every client will have a request outstanding in the server. Thus the server again needs to have one or more threads for every client and again there are problems scaling to thousands of simultaneous users.
Formula
|
Web 1.0
|
Web 2.0 +
Comet |
Web 2.0 +
Comet + Continuations | |
---|---|---|---|---|
Users
|
u
|
10000
|
10000
|
10000
|
Requests/Burst
|
b
|
5
|
2
|
2
|
Burst period (s)
|
p
|
20
|
5
|
5
|
Request Duration (s)
|
d
|
0.200
|
0.150
|
0.175
|
Poll Duration (s)
|
D
|
0
|
10
|
10
|
Request rate (req/s)
|
rr=u*b/20
|
2500
|
4000
|
4000
|
Poll rate (req/s)
|
pr=u/d
|
0
|
1000
|
1000
|
Total (req/s)
|
r=rr+pr
|
2500
|
5000
|
5000
|
Concurrent requests
|
c=rr*d+pr*D
|
500
|
10600
|
10700
|
Min Threads
|
T=c
T=r*d |
500
- |
10600
- |
-
875 |
Stack memory
|
S=64*1024*T
|
32MB
|
694MB
|
57MB
|
HTTP, WebSocket, SPDY, HTTP/2.0 Evolution of Web Protocols
A very comprehensive doc on the HTTP technical evolvement.
No comments:
Post a Comment