There are several sound reasons for applying DistributedComputing. Let us collect them: --''PeterSommerlad'' * '''ReachManyUsers''' -- the users of a system are not in one place. However, system functionality implies a means of cooperating on some task or data. * '''FaultTolerance''' -- you plan for (hardware) failures and provide a backup system to take over (more or less seamlessly) * '''LoadSharing''' -- you require so much computing power that it is uneconomically to place everything of a system on one machine * '''ReUseFunctionalityOrData''' -- there is useful functionality available in one place, that you require in another (e.g. a database) * '''CoordinatedControl''' -- you need to control a physically distributed system (e.g. a production plant) where connecting every sensor and actor to a central controller is prohibited by cable cost or FaultTolerance issues ----- * '''LicenseSharing''' -- you require an expensive third party application, so rather than distributing the application to many clients, you have many clients use the same middle tier application. This may be closely related to ReUseFunctionalityOrData. I see LicenseSharing indeed as a special case of ReUseFunctionalityOrData. I think it is thin ice, because of the legal issues addressed. Have you ever really read and understood any license contract? --''PeterSommerlad'' Licenses vary but many specify the maximum number of simultaneous users. Most also explicitly deal with middle tier use. This is a common approach for lightly used but widely useful applications. ------ * '''CommunicationsDelays or DataCaching''' -- you have slow communications links and may need to push data and programs out closer to the user. Essentially, you want to minimize the number of round trip hops. I think that is not a ReasonsForDistributedComputing but a result from DistributedComputing. You will only get this problem if you already have a distributed system. You might look at the ProxyPattern in PatternOrientedSoftwareArchitectureOne to get a complete discussion of it. --''PeterSommerlad'' I think this depends upon whether you consider terminal servers, 3270s, and web pages as computing or data entry. These primarily collect data and ship it back to a central source for computation. One of the forces for distributed computing was to push computations and even simple data validation back to the user. I think even 3270s, vt100s and web browsers to be some kind of computers. At my military service at the Deutsche Luftwaffe we did incredible things with escape codes and vt100s that interpreted the codes and did many things with the cursor and character you wouldn't have expected. I cannot claim that I proved equivalence to a turing machine in computing capabilities, but it comes close and is domain specific. Pushing validations etc to the user is useful if latency, bandwidth and central computation power is so bad that local computation at the user's site increases user happiness. (see above reasons) However, if the central system cannot absolutely trust the remote validation (which is true in all Web clients today), then the validation has to be done twice, on the user's site and on the central computer's site. So there is a threshold where it makes sense to distribute computation power to the client. For example, the current mySap.com implementation is almost a complete SAP client written in JavaScript. This is heavyweight stuff with a mechanism never intended for such big things. IMHO the border of reasonable things is crossed here. ''--PeterSommerlad'' ---- Please choose a definition DistributedComputing. Academically, distributed computing is the distribution of a single task over a set of interconnected computers with independent clocks and storage (ala http://distributed.net). In the industry, DistributedComputing is pretty much ''networking'', ala several workstations requesting data from a centralized database, which is hardly a distributed application. Things like DCOM, MobileAgent''''''s, etc. add more dimensions to this, however, but not quite the "single mind, many minds" idea of the academic version. Let's not force a distinction here, nor assume any simplicity about ''networking''. Using more than one machine to get some job done, or having more than one user at the same time, for any machine is always going to be difficult.