A multi-tier architecture is a software architecture in which various software components are arranged into tiers (layers) to offer specific functionality. A multi-tier architecture is conceptually the consequence of the client/server paradigm being applied repeatedly. In other words, it is a collection of separate servers or web nodes, each performing a different role within the system. Multi-tier architectures can be further divided into "distributed" and "non-distributed" systems. In a distributed system, all the processing for a given task is performed by one or more servers. Users make requests of the server(s), which responds by returning data back to the user. Some examples of distributed computing technologies include Web services, Java Servlets, and Microsoft Windows Services. On the other hand, non-distributed systems consist of a single monolithic program that performs all the tasks associated with a given role within the system. Examples of these programs include word processors, email clients, and media players. Multi-tier networks are those in which there are multiple layers of security. Each layer has its own purpose and controls who can access what. For example, an organization might have a multi-layer network where the first layer of security is based on username and password, the next layer uses role-based access control (RBAC), and then finally the top level of security is provided by physical security measures such as secure rooms and locked doors.