client-server architecture | reuse because it is often possible to find suitable frameworks on which to build good distributed systems | an easy-to-understand form so that people can determine when and how to use it | divide and conquer since dividing the system into processes is a very strong way to divide the system up | - Have a single program on one computer that does everything
- Avoid having any communication and have each computer perform the work separately
- Have some mechanism other than client-server communication for exchanging information
| An architectural pattern in which the system is divided into clients and servers | - The computational work can be distributed among different machines
- The clients can access the server's functionality from a distance
- The client and server can be designed separately, so they can both be simpler than a program that does everything
- All the data can be kept centrally at the server, thus making it easier to assure its reliability
- Conversely, distributing data among many different geographically-distributed clients or servers can mean that if a disaster occurs in one place, the loss of data is minimized
- The server can be accessed simultaneously by many clients
- Competing clients can be written to communicate with the same server, and vice-versa
| one of the most widely used ways of structuring software systems | software architecture^3 | coupling since there is usually only one communication channel between distributed components although you have to watch out for control coupling | a solution that has been proven to effectively solve the problem in the indicated context | early in the design process, although it will continue to mature as iterative development proceeds | the overall efficiency, reusability and maintainability of the system | 9.5 - Architectural Patterns | software engineers | distributed architecture |