<!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.&nbsp; The proponents of UDP in that debate were those interested in supporting IMPP on WAP devices, but the conclusion completely applies to jabber.&nbsp; Long-lived TCP connections for client&lt;-&gt;server won.&nbsp; The two major arguments that won it were 1) congestion control and 2) the needed error correction is built in.&nbsp; It was best summed up by John Strake:</FONT></P>
<BR>

<P><FONT SIZE=2>&gt; Congestion control is not a per-protocol requirement, it's a per-Internet</FONT>
<BR><FONT SIZE=2>&gt; requirement.&nbsp; If any large amount of traffic is not using congestion control,</FONT>
<BR><FONT SIZE=2>&gt; the entire Internet suffers.&nbsp; Read RFC-896 for a description of what happens</FONT>
<BR><FONT SIZE=2>&gt; in a network with no congestion control.</FONT>
</P>

<P><FONT SIZE=2>[snip]</FONT>
</P>

<P><FONT SIZE=2>&gt; Any IP-based reliable protocol which behaves as well as TCP [for error correction] will necessarily</FONT>
<BR><FONT SIZE=2>&gt; be as complex as TCP.</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>

<P><FONT SIZE=2>&gt; -----Original Message-----</FONT>
<BR><FONT SIZE=2>&gt; From: Thomas Charron [<A HREF="mailto:tcharron@ductape.net">mailto:tcharron@ductape.net</A>]</FONT>
<BR><FONT SIZE=2>&gt; Sent: Friday, September 01, 2000 9:58 AM</FONT>
<BR><FONT SIZE=2>&gt; To: jdev@jabber.org; Thomas Muldowney</FONT>
<BR><FONT SIZE=2>&gt; Subject: Re: [JDEV] im unified</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; Quoting Thomas Muldowney &lt;temas@box5.net&gt;:</FONT>
<BR><FONT SIZE=2>&gt; &gt; This disbelief in TCP/IP just doesn't make sense.&nbsp; I'm very </FONT>
<BR><FONT SIZE=2>&gt; aware of the</FONT>
<BR><FONT SIZE=2>&gt; &gt; scaling issues surrounding TCP, but moving to UDP is almost </FONT>
<BR><FONT SIZE=2>&gt; a fundamental</FONT>
<BR><FONT SIZE=2>&gt; &gt; flaw</FONT>
<BR><FONT SIZE=2>&gt; &gt; for an IM system.&nbsp; IM needs the ability to gurantee </FONT>
<BR><FONT SIZE=2>&gt; delivery, and keep it</FONT>
<BR><FONT SIZE=2>&gt; &gt; real</FONT>
<BR><FONT SIZE=2>&gt; &gt; time.&nbsp; UDP can't intrinsically give this, and therefore, in </FONT>
<BR><FONT SIZE=2>&gt; my opinion, is</FONT>
<BR><FONT SIZE=2>&gt; &gt; flawed.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp; Technically, TCP doesn't provide this either.&nbsp; It *LOOKS* </FONT>
<BR><FONT SIZE=2>&gt; and *FEELS* like it </FONT>
<BR><FONT SIZE=2>&gt; is, but it doesn't.&nbsp; It merely serves as a buffer to put the </FONT>
<BR><FONT SIZE=2>&gt; data back in the </FONT>
<BR><FONT SIZE=2>&gt; right order, and rerequest packets when needed, and after a </FONT>
<BR><FONT SIZE=2>&gt; given timeout, </FONT>
<BR><FONT SIZE=2>&gt; closing the socket for one of several reasons.&nbsp; This is an IP </FONT>
<BR><FONT SIZE=2>&gt; limitation, *NOT* </FONT>
<BR><FONT SIZE=2>&gt; a TCP vs UDP limitation.&nbsp; ATM provides these capabilities.&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; TCP looks and </FONT>
<BR><FONT SIZE=2>&gt; feels, but isn't.&nbsp; That's the basic counter.&nbsp; Basically, if </FONT>
<BR><FONT SIZE=2>&gt; you implement code </FONT>
<BR><FONT SIZE=2>&gt; the keep track of packets and delivery, or the TCP stack does </FONT>
<BR><FONT SIZE=2>&gt; it, the end </FONT>
<BR><FONT SIZE=2>&gt; result is the same.&nbsp; The catch is, if you can manage to </FONT>
<BR><FONT SIZE=2>&gt; handle the UDP packets </FONT>
<BR><FONT SIZE=2>&gt; better (with faster speed, and less memory) then the TCP </FONT>
<BR><FONT SIZE=2>&gt; stack can.&nbsp; In some </FONT>
<BR><FONT SIZE=2>&gt; cases, yes, you can, in others, well, let's not talk about </FONT>
<BR><FONT SIZE=2>&gt; them, they're </FONT>
<BR><FONT SIZE=2>&gt; scary.&nbsp; ;-P&nbsp; Doing so in an efficient manner also pretty much </FONT>
<BR><FONT SIZE=2>&gt; requires that you </FONT>
<BR><FONT SIZE=2>&gt; also have the capabilities of an SMP based machine.&nbsp; No </FONT>
<BR><FONT SIZE=2>&gt; arguments that on a </FONT>
<BR><FONT SIZE=2>&gt; single processor machine, TCP is a better way to go, becouse </FONT>
<BR><FONT SIZE=2>&gt; you *WILL* run out </FONT>
<BR><FONT SIZE=2>&gt; of resources before TCP connections.&nbsp; But on a Sun Enterprise </FONT>
<BR><FONT SIZE=2>&gt; 6500, the inverse </FONT>
<BR><FONT SIZE=2>&gt; is true.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; &gt;&nbsp; Wehn you start writing this ability on to UDP your just creating</FONT>
<BR><FONT SIZE=2>&gt; &gt; a slower system, and then start to mess with that real time </FONT>
<BR><FONT SIZE=2>&gt; nature.&nbsp; The</FONT>
<BR><FONT SIZE=2>&gt; &gt; other</FONT>
<BR><FONT SIZE=2>&gt; &gt; major item of interest is that we're not even limited by </FONT>
<BR><FONT SIZE=2>&gt; the socket count,</FONT>
<BR><FONT SIZE=2>&gt; &gt; in general your going to find RAM and CPU issues before you </FONT>
<BR><FONT SIZE=2>&gt; find conn limits.</FONT>
<BR><FONT SIZE=2>&gt; &gt; I'd be happy to discuss scaling further, as I'm working on </FONT>
<BR><FONT SIZE=2>&gt; scaling the</FONT>
<BR><FONT SIZE=2>&gt; &gt; server to 10million users.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp; See above.&nbsp; To serve up 10 million users, you'd have to </FONT>
<BR><FONT SIZE=2>&gt; anticipate in the </FONT>
<BR><FONT SIZE=2>&gt; internet world that perhaps 5-10% of your users will be on </FONT>
<BR><FONT SIZE=2>&gt; concurrently.&nbsp; This </FONT>
<BR><FONT SIZE=2>&gt; brings you between 500,000 - 1,000,000 simo connections.&nbsp; On </FONT>
<BR><FONT SIZE=2>&gt; a TCP, non SMP </FONT>
<BR><FONT SIZE=2>&gt; based platform, this would require 42-84 farmed machines, </FONT>
<BR><FONT SIZE=2>&gt; without even taking </FONT>
<BR><FONT SIZE=2>&gt; into consideration reduncy, and having 12,000 users per machine.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp; Now, with a UDP based implementation, you could easily </FONT>
<BR><FONT SIZE=2>&gt; scale this to 3 </FONT>
<BR><FONT SIZE=2>&gt; Enterprise 6500's.&nbsp; Base cost wise, more money will be spent </FONT>
<BR><FONT SIZE=2>&gt; on the E 6500's, </FONT>
<BR><FONT SIZE=2>&gt; hands down.&nbsp; Based equiped, that's gonna run 300,000 - </FONT>
<BR><FONT SIZE=2>&gt; 400,000 $$, which could </FONT>
<BR><FONT SIZE=2>&gt; easily buy you 150 Intel Linux boxes.&nbsp; The issue then becouse </FONT>
<BR><FONT SIZE=2>&gt; support costs, </FONT>
<BR><FONT SIZE=2>&gt; administration, repair, cool, electrical consuption, etc.&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; Overall, the same </FONT>
<BR><FONT SIZE=2>&gt; cost is used for either solution.&nbsp; The only issue is, 150 </FONT>
<BR><FONT SIZE=2>&gt; machines takes up </FONT>
<BR><FONT SIZE=2>&gt; alot more space then 3 E6500's.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt;&nbsp;&nbsp; Basically, both sides are right.&nbsp; It just depends on the </FONT>
<BR><FONT SIZE=2>&gt; approach you take.&nbsp; </FONT>
<BR><FONT SIZE=2>&gt; Big boxes = UDP can handle more.&nbsp; Many small boxes = TCP.</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; --- </FONT>
<BR><FONT SIZE=2>&gt; Thomas Charron</FONT>
<BR><FONT SIZE=2>&gt; &lt;&lt; Wanted: One decent sig &gt;&gt;</FONT>
<BR><FONT SIZE=2>&gt; &lt;&lt; Preferably litle used&nbsp; &gt;&gt;</FONT>
<BR><FONT SIZE=2>&gt; &lt;&lt; and stored in garage.&nbsp; ?&gt;&gt;</FONT>
<BR><FONT SIZE=2>&gt; </FONT>
<BR><FONT SIZE=2>&gt; _______________________________________________</FONT>
<BR><FONT SIZE=2>&gt; jdev mailing list</FONT>
<BR><FONT SIZE=2>&gt; jdev@jabber.org</FONT>
<BR><FONT SIZE=2>&gt; <A HREF="http://mailman.jabber.org/listinfo/jdev" TARGET="_blank">http://mailman.jabber.org/listinfo/jdev</A></FONT>
<BR><FONT SIZE=2>&gt; </FONT>
</P>

</BODY>
</HTML>