<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2448.0">
<TITLE>RE: [JDEV] im unified</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=2>The TCP / UDP debate raged on for quite a while on the IMPP mailing list. The proponents of UDP in that debate were those interested in supporting IMPP on WAP devices, but the conclusion completely applies to jabber. Long-lived TCP connections for client<->server won. The two major arguments that won it were 1) congestion control and 2) the needed error correction is built in. It was best summed up by John Strake:</FONT></P>
<BR>
<P><FONT SIZE=2>> Congestion control is not a per-protocol requirement, it's a per-Internet</FONT>
<BR><FONT SIZE=2>> requirement. If any large amount of traffic is not using congestion control,</FONT>
<BR><FONT SIZE=2>> the entire Internet suffers. Read RFC-896 for a description of what happens</FONT>
<BR><FONT SIZE=2>> in a network with no congestion control.</FONT>
</P>
<P><FONT SIZE=2>[snip]</FONT>
</P>
<P><FONT SIZE=2>> Any IP-based reliable protocol which behaves as well as TCP [for error correction] will necessarily</FONT>
<BR><FONT SIZE=2>> be as complex as TCP.</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<P><FONT SIZE=2>> -----Original Message-----</FONT>
<BR><FONT SIZE=2>> From: Thomas Charron [<A HREF="mailto:tcharron@ductape.net">mailto:tcharron@ductape.net</A>]</FONT>
<BR><FONT SIZE=2>> Sent: Friday, September 01, 2000 9:58 AM</FONT>
<BR><FONT SIZE=2>> To: jdev@jabber.org; Thomas Muldowney</FONT>
<BR><FONT SIZE=2>> Subject: Re: [JDEV] im unified</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Quoting Thomas Muldowney <temas@box5.net>:</FONT>
<BR><FONT SIZE=2>> > This disbelief in TCP/IP just doesn't make sense. I'm very </FONT>
<BR><FONT SIZE=2>> aware of the</FONT>
<BR><FONT SIZE=2>> > scaling issues surrounding TCP, but moving to UDP is almost </FONT>
<BR><FONT SIZE=2>> a fundamental</FONT>
<BR><FONT SIZE=2>> > flaw</FONT>
<BR><FONT SIZE=2>> > for an IM system. IM needs the ability to gurantee </FONT>
<BR><FONT SIZE=2>> delivery, and keep it</FONT>
<BR><FONT SIZE=2>> > real</FONT>
<BR><FONT SIZE=2>> > time. UDP can't intrinsically give this, and therefore, in </FONT>
<BR><FONT SIZE=2>> my opinion, is</FONT>
<BR><FONT SIZE=2>> > flawed.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Technically, TCP doesn't provide this either. It *LOOKS* </FONT>
<BR><FONT SIZE=2>> and *FEELS* like it </FONT>
<BR><FONT SIZE=2>> is, but it doesn't. It merely serves as a buffer to put the </FONT>
<BR><FONT SIZE=2>> data back in the </FONT>
<BR><FONT SIZE=2>> right order, and rerequest packets when needed, and after a </FONT>
<BR><FONT SIZE=2>> given timeout, </FONT>
<BR><FONT SIZE=2>> closing the socket for one of several reasons. This is an IP </FONT>
<BR><FONT SIZE=2>> limitation, *NOT* </FONT>
<BR><FONT SIZE=2>> a TCP vs UDP limitation. ATM provides these capabilities. </FONT>
<BR><FONT SIZE=2>> TCP looks and </FONT>
<BR><FONT SIZE=2>> feels, but isn't. That's the basic counter. Basically, if </FONT>
<BR><FONT SIZE=2>> you implement code </FONT>
<BR><FONT SIZE=2>> the keep track of packets and delivery, or the TCP stack does </FONT>
<BR><FONT SIZE=2>> it, the end </FONT>
<BR><FONT SIZE=2>> result is the same. The catch is, if you can manage to </FONT>
<BR><FONT SIZE=2>> handle the UDP packets </FONT>
<BR><FONT SIZE=2>> better (with faster speed, and less memory) then the TCP </FONT>
<BR><FONT SIZE=2>> stack can. In some </FONT>
<BR><FONT SIZE=2>> cases, yes, you can, in others, well, let's not talk about </FONT>
<BR><FONT SIZE=2>> them, they're </FONT>
<BR><FONT SIZE=2>> scary. ;-P Doing so in an efficient manner also pretty much </FONT>
<BR><FONT SIZE=2>> requires that you </FONT>
<BR><FONT SIZE=2>> also have the capabilities of an SMP based machine. No </FONT>
<BR><FONT SIZE=2>> arguments that on a </FONT>
<BR><FONT SIZE=2>> single processor machine, TCP is a better way to go, becouse </FONT>
<BR><FONT SIZE=2>> you *WILL* run out </FONT>
<BR><FONT SIZE=2>> of resources before TCP connections. But on a Sun Enterprise </FONT>
<BR><FONT SIZE=2>> 6500, the inverse </FONT>
<BR><FONT SIZE=2>> is true.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > Wehn you start writing this ability on to UDP your just creating</FONT>
<BR><FONT SIZE=2>> > a slower system, and then start to mess with that real time </FONT>
<BR><FONT SIZE=2>> nature. The</FONT>
<BR><FONT SIZE=2>> > other</FONT>
<BR><FONT SIZE=2>> > major item of interest is that we're not even limited by </FONT>
<BR><FONT SIZE=2>> the socket count,</FONT>
<BR><FONT SIZE=2>> > in general your going to find RAM and CPU issues before you </FONT>
<BR><FONT SIZE=2>> find conn limits.</FONT>
<BR><FONT SIZE=2>> > I'd be happy to discuss scaling further, as I'm working on </FONT>
<BR><FONT SIZE=2>> scaling the</FONT>
<BR><FONT SIZE=2>> > server to 10million users.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> See above. To serve up 10 million users, you'd have to </FONT>
<BR><FONT SIZE=2>> anticipate in the </FONT>
<BR><FONT SIZE=2>> internet world that perhaps 5-10% of your users will be on </FONT>
<BR><FONT SIZE=2>> concurrently. This </FONT>
<BR><FONT SIZE=2>> brings you between 500,000 - 1,000,000 simo connections. On </FONT>
<BR><FONT SIZE=2>> a TCP, non SMP </FONT>
<BR><FONT SIZE=2>> based platform, this would require 42-84 farmed machines, </FONT>
<BR><FONT SIZE=2>> without even taking </FONT>
<BR><FONT SIZE=2>> into consideration reduncy, and having 12,000 users per machine.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Now, with a UDP based implementation, you could easily </FONT>
<BR><FONT SIZE=2>> scale this to 3 </FONT>
<BR><FONT SIZE=2>> Enterprise 6500's. Base cost wise, more money will be spent </FONT>
<BR><FONT SIZE=2>> on the E 6500's, </FONT>
<BR><FONT SIZE=2>> hands down. Based equiped, that's gonna run 300,000 - </FONT>
<BR><FONT SIZE=2>> 400,000 $$, which could </FONT>
<BR><FONT SIZE=2>> easily buy you 150 Intel Linux boxes. The issue then becouse </FONT>
<BR><FONT SIZE=2>> support costs, </FONT>
<BR><FONT SIZE=2>> administration, repair, cool, electrical consuption, etc. </FONT>
<BR><FONT SIZE=2>> Overall, the same </FONT>
<BR><FONT SIZE=2>> cost is used for either solution. The only issue is, 150 </FONT>
<BR><FONT SIZE=2>> machines takes up </FONT>
<BR><FONT SIZE=2>> alot more space then 3 E6500's.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Basically, both sides are right. It just depends on the </FONT>
<BR><FONT SIZE=2>> approach you take. </FONT>
<BR><FONT SIZE=2>> Big boxes = UDP can handle more. Many small boxes = TCP.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> --- </FONT>
<BR><FONT SIZE=2>> Thomas Charron</FONT>
<BR><FONT SIZE=2>> << Wanted: One decent sig >></FONT>
<BR><FONT SIZE=2>> << Preferably litle used >></FONT>
<BR><FONT SIZE=2>> << and stored in garage. ?>></FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> _______________________________________________</FONT>
<BR><FONT SIZE=2>> jdev mailing list</FONT>
<BR><FONT SIZE=2>> jdev@jabber.org</FONT>
<BR><FONT SIZE=2>> <A HREF="http://mailman.jabber.org/listinfo/jdev" TARGET="_blank">http://mailman.jabber.org/listinfo/jdev</A></FONT>
<BR><FONT SIZE=2>> </FONT>
</P>
</BODY>
</HTML>