Quando acessamos recursos baseados no modelo cliente/servidor, existe a separação dos papéis dos agentes envolvidos: o cliente solicita recursos a um servidor, e o servidor disponibiliza estes recursos ao cliente. Para que isso ocorra, é possível utilizar duas ou mais camadas no processo, como, um cliente requisita dados de um servidor de aplicação, que, por sua vez, requisita dados a um servidor de banco de dados antes de retornar a solicitação ao cliente.