O que é a arquitetura N-Tier?

193

Vi várias postagens de trabalho de desenvolvedor recentemente que incluem uma frase mais ou menos assim: "Deve ter experiência com a arquitetura N-Tier" ou "Deve ser capaz de desenvolver aplicativos N-Tier".

Isso me leva a perguntar: o que é arquitetura N-Tier? Como alguém ganha experiência com isso?

Joshua Carmody
fonte
2
Interessante que este outro post também esteja perguntando o que é a arquitetura N-Tier, mas as respostas são completamente diferentes. stackoverflow.com/questions/7271165/… . Parece que há arquitetura N-Tier para software e arquitetura N-Tier para hardware.
Noremac 28/08/14

Respostas:

247

Wikipedia :

Na engenharia de software, a arquitetura multicamada (geralmente chamada de arquitetura n camada) é uma arquitetura cliente-servidor na qual, a apresentação, o processamento do aplicativo e o gerenciamento de dados são processos logicamente separados. Por exemplo, um aplicativo que usa middleware para atender solicitações de dados entre um usuário e um banco de dados emprega arquitetura de várias camadas. O uso mais difundido da "arquitetura multicamada" refere-se à arquitetura de três camadas.

É discutível o que conta como "camadas", mas, na minha opinião, precisa pelo menos cruzar a fronteira do processo. Ou então é chamado de camadas. Mas, ele não precisa estar em máquinas fisicamente diferentes. Embora eu não recomende, você pode hospedar camada lógica e banco de dados na mesma caixa.

texto alternativo

Editar : Uma implicação é que a camada de apresentação e a lógica (às vezes chamada de Business Logic Layer) precisam cruzar os limites da máquina "através do fio" às vezes em redes não confiáveis, lentas e / ou inseguras. Isso é muito diferente do aplicativo de área de trabalho simples, onde os dados residem na mesma máquina que os arquivos ou aplicativos da Web, onde você pode acessar diretamente o banco de dados.

Para a programação em n camadas, você precisa empacotar os dados em algum tipo de forma transportável chamada "conjunto de dados" e executá-los rapidamente. A classe DataSet do .NET ou o protocolo de Serviços da Web, como o SOAP, são algumas dessas tentativas de passar objetos por fios.

Eugene Yokota
fonte
6
"3 níveis" e "N níveis" há alguma diferença?
chakrit
7
Depende de como você conta "camadas" (lógicas, físicas, etc.), mas você pode facilmente ter mais de três processos envolvidos para escrever um aplicativo. UI, a plataforma de interface do usuário (como o Eclipse RCP), Web Services, BLL, DAL, banco de dados, autenticação de Serviços, Reporting Services Analytical Serviços ...
Eugene Yokota
6
@chakrit: No meu tempo (eu sou velho), mais de 2 camadas (cliente-servidor) se referiam automaticamente à camada n.
Eduardo Molteni 15/01
@EugeneYokota - diz-se que as camadas devem representar seções físicas na arquitetura (que podem ou não ser mais autorizadas, por exemplo, em um cluster), e as camadas se referirão ao agrupamento lógico dos componentes do aplicativo.
Eliran Malka
Foi-me dito algo que parece muito semelhante, mas com as camadas sendo camada de apresentação - serviço - integração / dados. Você sabe se essas são apenas palavras diferentes para a mesma coisa que a arquitetura mostrada acima ou algo diferente? No que diz respeito ao meu conhecimento, eles parecem os mesmos, mas eu gostaria de ter certeza.
KayleighArianna
20

É baseado em como você separa a camada de apresentação da lógica de negócios principal e do acesso a dados ( Wikipedia )

  • Camada 3 significa camada de apresentação + camada de componente + camada de acesso a dados.
  • N-camada é quando camadas adicionais são adicionadas além dessas, geralmente para modularidade, configurabilidade ou interoperabilidade adicional com outros sistemas.
tsilb
fonte
12
na verdade, se uma dessas camadas é hospedado por um participante remoto, por exemplo, um processador de pagamento, que nível pode não ser tão "desnecessário"
Zak
1
Hmm. Há uma enorme diferença entre 'camadas' e 'serviços'. O N-Tier geralmente é usado para indicar que, para o nível especificado, qualquer coisa acima deve passar por ele para acessar serviços de nível inferior. Se eles estiverem em paralelo, eu os chamaria de serviços, e não de camadas.
Dak 16/01
Ao construir o MCV usual (uma arquitetura de três camadas), pode-se decidir implementar o MCV com interfaces de dois andares, de modo que se possa substituir um nível específico sem precisar modificar nem mesmo uma linha de código. Muitas vezes vemos os benefícios disso, por exemplo, em cenários em que você deseja poder usar mais de um banco de dados (nesse caso, você tem uma interface dupla entre o controle e as camadas de dados). Quando você colocá-lo no Ver-camada (apresentação), então você pode (hold on !!) substituir a interface do usuário com outra máquina, assim, automatizar entrada real (!!!)
David Svarrer
15

É uma palavra da moda que se refere a coisas como a arquitetura normal da Web com, por exemplo, Javascript - ASP.Net - Middleware - camada de banco de dados. Cada uma dessas coisas é uma "camada".

1800 INFORMAÇÃO
fonte
4

Aplicativos de dados de camada N são aplicativos de dados separados em várias camadas. Também chamados de "aplicativos distribuídos" e "aplicativos de várias camadas", os aplicativos de camada n separam o processamento em camadas discretas distribuídas entre o cliente e o servidor. Ao desenvolver aplicativos que acessam dados, você deve ter uma separação clara entre as várias camadas que compõem o aplicativo.

Um aplicativo típico de n camadas inclui uma camada de apresentação, uma intermediária e uma de dados. A maneira mais fácil de separar as várias camadas em um aplicativo de n camadas é criar projetos discretos para cada camada que você deseja incluir no seu aplicativo. Por exemplo, a camada de apresentação pode ser um aplicativo Windows Forms, enquanto a lógica de acesso a dados pode ser uma biblioteca de classes localizada na camada intermediária. Além disso, a camada de apresentação pode se comunicar com a lógica de acesso a dados na camada intermediária por meio de um serviço como um serviço. A separação dos componentes do aplicativo em camadas separadas aumenta a capacidade de manutenção e escalabilidade do aplicativo. Isso é feito ao facilitar a adoção de novas tecnologias que podem ser aplicadas a uma única camada sem a necessidade de redesenhar toda a solução. Além do que, além do mais,

Retirado do site da Microsoft .

Robert Rocha
fonte
4

Se eu entendo a pergunta, parece-me que o interlocutor está realmente perguntando "OK, então o nível 3 é bem compreendido, mas parece que há uma mistura de hype, confusão e incerteza em torno do que o nível 4 ou generalizar, arquiteturas de camada N significam. Então ... qual é a definição de camada N que é amplamente entendida e acordada? "

Na verdade, é uma pergunta bastante profunda e, para explicar o porquê, preciso ir um pouco mais fundo. Tenha paciencia comigo.

A arquitetura clássica de três camadas: banco de dados, "lógica de negócios" e apresentação, é uma boa maneira de esclarecer como respeitar o princípio da separação de preocupações. Ou seja, se eu quiser mudar a forma como "a empresa" deseja atender os clientes, não precisarei examinar todo o sistema para descobrir como fazer isso e, em particular, as decisões sobre questões de negócios não devem ser dispersas quer ou não através do código.

Agora, esse modelo serviu bem por décadas e é o modelo clássico de 'cliente-servidor'. Avanço rápido para as ofertas na nuvem, em que os navegadores da web são a interface do usuário para um conjunto amplo e fisicamente distribuído de usuários, e normalmente é necessário adicionar serviços de distribuição de conteúdo, que não fazem parte da arquitetura clássica de três camadas (e que precisam ser gerenciados por direito próprio).

O conceito generaliza quando se trata de serviços, microsserviços, como dados e computação são distribuídos e assim por diante. Se algo é ou não uma 'camada', tudo se resume a saber se a camada fornece ou não um modelo de interface e implantação para serviços que estão por trás (ou abaixo) da camada. Portanto, uma rede de distribuição de conteúdo seria uma camada, mas um serviço de autenticação não seria.

Agora, leia outras descrições de exemplos de arquiteturas de N camadas com esse conceito em mente e você começará a entender o problema. Outras perspectivas incluem abordagens baseadas em fornecedor (por exemplo, NGINX), balanceadores de carga com reconhecimento de conteúdo, serviços de isolamento e segurança de dados (por exemplo, IBM Datapower), os quais podem ou não agregar valor a uma determinada arquitetura, implementação e casos de uso.

Dak
fonte
3

Entendo que o N-Tier separa a lógica comercial, o acesso e os dados do cliente usando máquinas físicas separadas. A teoria é que um deles pode ser atualizado independentemente dos outros.

GregD
fonte
3

Aplicativos de dados de camada N são aplicativos de dados separados em várias camadas. Também chamados de "aplicativos distribuídos" e "aplicativos de várias camadas", os aplicativos de camada n separam o processamento em camadas discretas distribuídas entre o cliente e o servidor. Ao desenvolver aplicativos que acessam dados, você deve ter uma separação clara entre as várias camadas que compõem o aplicativo.

E assim por diante em http://msdn.microsoft.com/en-us/library/bb384398.aspx

olyv
fonte
3

Ao construir o MCV usual (uma arquitetura de três camadas), pode-se decidir implementar o MCV com interfaces de dois andares, de modo que se possa substituir um nível específico sem precisar modificar nem mesmo uma linha de código.

Muitas vezes vemos os benefícios disso , por exemplo, em cenários em que você deseja poder usar mais de um banco de dados (nesse caso, você tem uma interface dupla entre o controle e as camadas de dados).

Quando você o coloca na camada View (apresentação), pode (espere !!) substituir a interface USER por outra máquina, automatizando assim a entrada REAL (!!!) - e, assim, executar testes de usabilidade tediosos por milhares de vezes, sem que nenhum usuário precise tocar e re-tocar e re-tocar novamente nas mesmas coisas repetidamente.

Alguns descrevem essa arquitetura de 3 camadas com 1 ou 2 interfaces duplas como arquitetura de 4 ou 5 camadas , implicitamente implicando as interfaces duplas.

Outros casos incluem (mas não estão limitados a) o fato de que você - no caso de sistemas de banco de dados replicados semi ou totalmente - seria praticamente capaz de considerar um dos bancos de dados como o "mestre" e, portanto, teria uma camada compreendendo o mestre e outro compreendendo o banco de dados escravo.

Exemplo para celular

Portanto, multicamadas - ou N - de fato tem algumas interpretações, enquanto eu certamente me ateria às de três camadas + camadas extras, compostas por discos de interface finos presos entre eles para permitir as trocas de camadas e, em termos de teste (particularmente usado em dispositivos móveis), agora você pode executar testes de usuário no software real, simulando os usuários tocando de maneiras que a lógica de controle não pode distinguir de um usuário real. Isso é quase primordial na simulação de testes reais do usuário , pois você pode gravar todas as entradas do OTA dos usuários e, em seguida, reutilizar a mesma entrada ao fazer testes de regressão.

David Svarrer
fonte
2

Quando falamos de camadas, geralmente falamos de processos físicos (com espaço de memória diferente).

Portanto, caso as Camadas de um aplicativo sejam implantadas em diferentes processos, esses diferentes processos terão camadas diferentes.

Por exemplo, em um aplicativo de três camadas, a camada de negócios conversa com Mainframes (processo separado) e com o Reporting Service (processo separado); então, esse aplicativo seria de cinco camadas.

Portanto, o nome genérico é de n camadas.

Sandeep Jindal
fonte
2

de https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

Uma arquitetura de camada N divide os pneus de um aplicativo em pneus lógicos e físicos, principalmente, e eles são divididos em sub-partes. insira a descrição da imagem aqui

Camadas são uma maneira de separar responsabilidades e gerenciar dependências. Cada camada tem uma responsabilidade específica. Uma camada superior pode usar serviços em uma camada inferior, mas não o contrário.

As camadas são fisicamente separadas, executando em máquinas separadas. Uma camada pode ligar para outra camada diretamente ou usar mensagens assíncronas (fila de mensagens). Embora cada camada possa estar hospedada em sua própria camada, isso não é necessário. Várias camadas podem estar hospedadas na mesma camada. Separar fisicamente as camadas melhora a escalabilidade e a resiliência, mas também adiciona latência à comunicação de rede adicional.

Um aplicativo tradicional de três camadas possui uma camada de apresentação, uma intermediária e uma de banco de dados. A camada intermediária é opcional. Aplicativos mais complexos podem ter mais de três camadas. O diagrama acima mostra um aplicativo com duas camadas intermediárias, encapsulando diferentes áreas de funcionalidade.

Um aplicativo de camada N pode ter uma arquitetura de camada fechada ou uma arquitetura de camada aberta:

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

Uma arquitetura de camada fechada limita as dependências entre as camadas. No entanto, pode criar tráfego de rede desnecessário, se uma camada simplesmente passar solicitações para a próxima camada.

Manjitha teshara
fonte
1

Um aplicativo de camada N é um aplicativo que possui mais de três componentes envolvidos. Quais são esses componentes?

  • Cache
  • Filas de mensagens para comportamento assíncrono
  • Balanceadores de carga
  • Pesquise os servidores para pesquisar por enormes quantidades de dados
  • Componentes envolvidos no processamento de grandes quantidades de dados
  • Componentes executando tecnologia heterogênea, comumente conhecida como serviços da web etc.

Todas as aplicações sociais como Instagram, Facebook, serviços industriais de grande escala como Uber, Airbnb, jogos multijogador massivos online como Pokemon Go, aplicações com recursos sofisticados são aplicações de n camadas.

Sunny Sultan
fonte
0

Martin Fowler demonstrando claramente:

A estratificação é uma das técnicas mais comuns usadas pelos projetistas de software para desmembrar um sistema de software complicado. Você vê isso nas arquiteturas de máquinas, onde as camadas descem de uma linguagem de programação com chamadas do sistema operacional para drivers de dispositivo e conjuntos de instruções da CPU, e para portas lógicas dentro dos chips. A rede possui FTP em camadas sobre o TCP, que está sobre o IP, sobre a Ethernet.

Ao pensar em um sistema em termos de camadas, você imagina os principais subsistemas do software organizados em alguma forma de camada de bolo, onde cada camada repousa sobre uma camada inferior. Nesse esquema, a camada superior usa vários serviços definidos pela camada inferior, mas a camada inferior não tem conhecimento da camada superior. Além disso, cada camada geralmente oculta suas camadas inferiores das camadas acima, portanto, a camada 4 usa os serviços da camada 3, que utiliza os serviços da camada 2, mas a camada 4 não tem conhecimento da camada 2. (Nem todas as arquiteturas de camadas são opacas como esta , mas a maioria é - ou melhor, a maioria é opaca.)

Dividir um sistema em camadas tem vários benefícios importantes.

• Você pode entender uma única camada como um todo coerente sem saber muito sobre as outras camadas. Você pode entender como criar um serviço FTP sobre o TCP sem conhecer os detalhes de como a Ethernet funciona.

• Você pode substituir camadas por implementações alternativas dos mesmos serviços básicos. Um serviço de FTP pode ser executado sem alterações por Ethernet, PPP ou qualquer outra empresa de cabo.

• Você minimiza as dependências entre as camadas. Se a empresa de cabo mudar seu sistema físico de transmissão, desde que faça o IP funcionar, não precisaremos alterar nosso serviço de FTP.

• Camadas são bons locais para padronização. TCP e IP são padrões porque definem como suas camadas devem operar.

• Depois de criar uma camada, você pode usá-la para muitos serviços de nível superior. Assim, o TCP / IP é usado por FTP, telnet, SSH e HTTP. Caso contrário, todos esses protocolos de nível superior teriam que escrever seus próprios protocolos de nível inferior. Da biblioteca de Kyle Geoffrey Passarelli

A estratificação é uma técnica importante, mas há desvantagens.

• Camadas encapsulam algumas, mas não todas, coisas bem. Como resultado, você às vezes recebe alterações em cascata. O exemplo clássico disso em um aplicativo corporativo em camadas é adicionar um campo que precisa ser exibido na interface do usuário, deve estar no banco de dados e, portanto, deve ser adicionado a todas as camadas intermediárias.

• Camadas extras podem prejudicar o desempenho. Em todas as camadas, as coisas normalmente precisam ser transformadas de uma representação para outra. No entanto, o encapsulamento de uma função subjacente geralmente oferece ganhos de eficiência que mais do que compensam. Uma camada que controla as transações pode ser otimizada e, em seguida, tornar tudo mais rápido. Mas a parte mais difícil de uma arquitetura em camadas é decidir quais camadas ter e qual deve ser a responsabilidade de cada camada.

Hamit YILDIRIM
fonte