In the past decade there has been a remarkable change from mainframe-based centralized computing to a distributed client/server approach. In the coming decade this trend is likely to continue with further shifts towards network centric collaborative computing. At the state of the art, the key technology in collaborative computing is the computational grid paradigm. Like an electrical power grid, the computational Grid will aim to provide a steady, reliable source of computing power. More precisely, the term grid is now adopted to designate a common computational and/or data processing infrastructure built on distributed resources, highly heterogeneous (in their role, computing power and architecture), interconnected by heterogeneous communication networks and communicating through some basic services realized by a middleware stratum that offers a reliable, simple, uniform and often transparent interface to its resources such that an unaware user can submit jobs to the Grid just as if he/she was facing a large virtual supercomputer, so that large computing endeavors, consisting of one or more related jobs or tasks, are then transparently distributed over the network on the available computing resources. Such a workload distribution strategy, that is, to balance the tasks on different idle computers on the underlying networks, is the most important functionality in computational Grids, usually provided at the service level of the grid software infrastructure.