PowerWeb uses a Master-Slave architecture. PowerWeb Master controls which tasks are performed, as well as task parameters such as granularity, mapping, and compilation of results. PowerWeb Slave is the application that runs on each machine on the network. PowerWeb Slave runs quietly and unobtrusively in the background, using unused CPU cycles when it needs to perform part of a PowerWeb task.
PowerWeb's goal is to use the unused CPU power of a Macintosh network. This perspective seems to have gone unnoticed in traditional distributed system design, but one that we feel is important.
Each local user can set the maximum CPU time PowerWeb Slave may use; the local user may also set it up so when the computer hasn't been used for awhile, PowerWeb Slave uses as much CPU time as possible.
A powerful objective in designing PowerWeb was to make it as easy as possible for third parties to use and develop for PowerWeb. This ease-of-development focus appears in many widespread locations in the PowerWeb system.
A plug-in is the specific task written to be used on the PowerWeb foundation. A plug-in is composed of three parts:
The Master Plug-in Fragment, or MPiF, is the code executed by PowerWeb Master. It provides a user interface and assists in farming out distributed tasks and interpreting the results.
The Slave Plug-in Fragment, or SPiF, is the code executed by PowerWeb Slave. It is delivered to PowerWeb Slave whenever PowerWeb Slave requests it.
Everything Else is the other stuff that may be used by the MPiF. This might include window definitions or menu items.
The Master/Slave/MPiF/SPiF relationship is shown in the figure below:
As can be seen, PowerWeb provides the foundation for communication between the MPiF and the SPiF.
During operation of PowerWeb, the MPiF indicates to PowerWeb Master that it's ready for some data to be processed by the SPiF (running on PowerWeb Slave). The actual data transmitted to PowerWeb Slave include the chunk of data to be operated upon and a unique identifier to identify the code that is to operate upon that chunk of data; if PowerWeb Slave has previously obtained that code, it simply calls that code and it operates upon that data. However, if PowerWeb Slave has not previously obtained that code, it requests PowerWeb Master to transmit the code. When PowerWeb Master transmits the necessary code, PowerWeb Slave is then free to call it and it will operate upon the data as usual.