A system consisting of multiple processing nodes (which, depending on the scale being considered, can be different processes running on a single CPU, individual CPUs in a MultiProcessor? system; individual computers on a network, a cluster/server farm, or even an entire "site" on a WideAreaNetwork?), which work together to solve some problem or benefit some enterprise, and for which communication between nodes is either expensive (in terms of bandwidth or latency, not $$$), unreliable, or both. In many cases, the configuration of the network may dynamically change, often without warning or any centralized control.
Writing software for DistributedSystems is a long-standing problem in ComputerScience.
Just some problems that occur in DistributedSystems: