David,
The design of a highly scalable application is impacted by a lot of different things. It would be difficult to elaborate on that without getting into a serious discussion of technical tradeoffs and considerations. Let me try and explain what I believe is a the heart of your question. If I fail to address your question, please let me know and I will try again.
Would regular IP be enough for a thin client? This is a good starting point in the discussion.
In the strictest sense, IP is enough. IP is a very low-level protocol and needs to have other protocols layered on top to truely be useful. Citrix's ICA protocol sits on top of IP. Similarly, the defacto standard for thin-client (i.e. browser-based) communication is HTTP, which also sits on top of IP.
In terms of scalibility, the HTTP protocol has advantages because it is a stateless protocol. The browser does not know what machine it is talking to and HTTP requests can be sent to any server. In constrast, it is my understanding that ICA is a stateful protocol. Once the ICA session is started, it must continue to talk with the same machine.
We can use some real-world analogies for clarification. When you go to a bank, you sit in a queue and wait for the next teller. HTTP allows you to do the same thing. ICA is more like a visit to the doctor. You can go to any doctor you wish for treatment. However, there is an overhead in starting up (initial physical exam). Once a treatment is started, it is difficult to switch to another doctor. Thus, if your doctor is busy, you would need to wait until he is available.
Note, the issue of state-less vs. stateful designs is at the heart of most scaliablity problems. A Citrix solution poses scalibility limitations right from the beginning. This is not to say one cannot architect around these limitations. However, I do feel that a Citrix solution does not yet scale as much as an HTTP-based one.
To put things in proper perspective, scalibility is not the only factor in deploying an application. In fact, Citrix is scalable enough for many types of applications. Therefore, it is not an issue for most deployments. It also allows one to make a nice trade-offs between scalablity and rapid development while minimizing deployment issues. This makes it a very good solution for many types of apps.
I hope this helped.
Heeren |