Due to security restrictions, Java applets can only communicate with the web server from which they were downloaded. This forces browser-based volunteer computing networks into star topologies which have high congestion and limited scalability. To address this problem, we have developed a simple volunteer server system that volunteers with HTTP servers on their own machines can download and run as a Java application. This application creates a generic VSProblem object which, like other problem objects, contains data pools and managers for serving worker and watcher clients. Unlike other problem objects, however, VSProblem's createWork() method does not create new work on its own, but instead gets groups of work data from the main server. Correspondingly, its signalDone() method sends the results back to the main server, and its createNextWork() method requests more work.
Figure 7 shows how volunteer servers can help improve a system's performance and scalability. Consider the scenario shown in Fig. 7(a), where some volunteers are slowed down by delays due to congestion or some other constraint of the server link (e.g., the server may be in a different country). In such a situation, we can improve overall running time by having the workers connect indirectly through volunteer servers with faster links (e.g., uncongested servers, or servers in their own countries), as shown in Fig. 7(b).
In general, volunteer servers enable us to overcome congestion and long latencies by exploiting locality and parallelism in communications. Other potential applications of volunteer servers include forming server pools for handling large numbers of clients, and building networks with non-star topologies.