A process group is a set of processes that can be treated as a single entity for some purposes. In some distributed applications there is only one process group, which implicitly contains all processes; in others, programmers can assign processes to groups statically when configuring their program, or dynamically by having processes create, join and leave groups during execution. Accurate and timely resource state data is critical to the development of these applications.
The application distribution across resources need not be symmetrical. The case may be that during the course of operation one process bears more of the communication or computation burden than another process. The development of a distributed application by envisioning the application as composed of a process group or as a process executing within a process group is very useful. Two process group communication models are frequently used. These are the publisher-subscriber and client-server models.
Communication within a group may need to be reliable. Cases where reliable delivery is not a concern are real-time video and audio transmission. Reliable communication in these cases is not of much use unless strict real -time guarantees can also be put on the messages so that the quality and latency desired by the application can be achieved. Many applications, however, desire that their messages be reliably sent. Especially when transactions and global state information is concerned, reliability is very important.
In the case of a failure, resiliency may be desired. Resiliency of the application attempts to impose that under certain failure conditions the function will be performed. This concept goes hand in hand with fault tolerance. Fault tolerance attempts to assure that under certain failure conditions the system will be able to recover transparently to the application and proceed. Together these concepts attempt to provide a system model that is robust in the face of failures and has the ability to recover from failures.