segunda-feira, 14 de fevereiro de 2011

Servidor dedicado x Servidor compartilhado. Qual usar?

Boa noite,

Hoje vou falar um pouco sobre servidores Oracle dedicados e compartilhados, vou explicar resumidamente como funciona a arquitetura de cada um (não vou entrar detalhadamente em como funciona toda a arquitetura do Oracle, apenas superficialmente, este tema fica para uma próxima publicação), quais as vantagens, desvantagens e quando usar cada um deles.



Servidor Dedicado:
Um servidor dedicado funciona da seguinte forma:
Existe um listener que fica aguardando processos de usuários chegarem para conecta-los a processos do servidor Oracle, que irão precessar sua solicitação no banco de dados e então devolve-las. Complicado? Vamos entender como isso funciona:

Imagine o centro de São Paulo, sempre que você passa, por exemplo pela São Bento, ouve aquele sujeito gritando: "ÓTICA, ÓTICA, ÓTICA.... ÓTICA, ÓTICA ÓTICA", se você deseja comprar um óculos com certeza é para la que você vai. O listener funciona de uma forma parecida, se houvesse um listener na São Bento ele estaria gritando algo como: "EI! QUER SE CONECTAR NA PORTA 1521, PROTOCOLO TCP/IP, HOSTNAME SERV_X, INSTANCIA X, Y OU Z???....... EI! QUER SE CONECTAR NA PORTA 1521, PROTOCOLO TCP/IP, HOSTNAME SERV_X, INSTANCIA X, Y OU Z???". Bom é mais ou menos assim que ele trabalha, quando você (processo usuário) deseja fazer, uma consulta no banco, por exemplo, seu processo dentro do servidor vai procurar uma forma de acessar a instância, e quem vai encaminha-lo é o listener.

Pensando desta forma, o listener conecta o processo usuário (sua solicitação ao banco de dados) a um processo de servidor (processo dentro do banco de dados que irá atender sua solicitação) e volta a aguardar uma nova solicitação. Usando ainda a analogia a ótica, o listener assim que encaminha o cliente (processo usuário)  ao atendente (processo servidor), volta a fazer sua função de anunciar a ótica novamente.

Um atendente em uma ótica irá verificar se o que você deseja encontra-se na loja ou em outra loja, receber o dinheiro que é a unica forma de você possuir o produto e após ajustar sua lente na armação te entregar o produto final. Tendo este cenário em mente e apenas trocando os nome podemos entender como funciona dentro do servidor. O processo usuário (sua solicitação) é analisado pelo processo servidor que verifica se os dados que você deseja estão em memória(loja) ou em disco (loja de outra localidade). Se estiver em disco ele precisa trazer estes dados para memória. Após isto, verificar se você possuí permissão para fazer o que deseja (pagar o produto) e só então o processo servidor irá organizar os dados de uma forma legível e devolve-los ao processo usuário.

Agora ficou fácil certo?

Abaixo está uma imagem da arquitetura de servidor dedicado e uma abstração da ilustração que que utilizei na explicação:

Arquitetura de um servidor dedicado Oracle. (Documentação Oracle)






Vantagens: Comparado a um servidor compartilhado, o tempo de resposta é muito mais rápido pois a solicitação é conectada diretamente a um processo servidor que já irá executar a solicitação.

Desvantagens: Não consegue gerenciar tão bem um ambiente com diversas conexões e transações simultâneas devido a limitação do servidor físico para o processamento de instruções.

Quando usar: Ótimo para um ambiente com poucas conexões e instruções grandes e demoradas. Indicado para ambientes de Data Warehouse (Consultas gigantescas porém concorrência de dados pequenas).



Servidor Complartilhado:
A princípio um servidor complartilhado não demonstra nenhuma diferença na usabilidade para o lado do cliente, ele funciona da mesma maneira que um servidor dedicado, o processo usuário também irá se conectar ao banco de dados através do listener. As diferenças começam a partir deste ponto.

O listener não conectar o processo usuário diretamente a um processo de servidor e sim ao primeiro dispatcher que estiver disponível. Os dispatcher´s são conceitualmente parecidos com os processos servidores porém trabalham de forma diferente. Vamos tentar uma analogia de novo?

Imagine quando você entra em uma praça de alimentação de um shopping e escolhe um restaurante, os dispatcher´s seriam como os primeiros atendentes que não executam sua solicitação, estão apenas ali para ouvir o que você precisa, saber se isto esta no cárdapio e realizar o pagamento. Após isto o que é feito com seu pedido? O atendente pega seu pedido e coloca em uma fila de pedidos onde o primeiro cozinheiro que estiver disponível irá executar seu pedido, claro que para o controle do restaurante você recebe uma senha a mesma que o atendente usa para saber que aquele pedido foi você quem fez. Assim que seu pedido fica pronto ele devolve aos atendentes que sabem, por exemplo, que o pedido 211 foi você quem fez.

Da mesma forma acontece em um servidor compartilhado, o listener conecta sua solicitação a um dispatcher (atendente), que irá encaminhar para uma fila comum onde o primeiro processo de servidor compartilhado (cozinheiro) irá checar se o que você necessita esta em memória, ou no disco e se você tem privilégios suficientes para o que esta solicitando e executar sua solicitação, a única diferença que não podemos usar na analogia é que o processo de servidor compartilhado irá devolver a resposta a fila do dispatcher que a encaminhou, isto tudo com um controle feito pelo Oracle, para balancear sobre o que entra e o que sai nas filas comuns e de devolução dos dispatchers, o balanceamento evita sobrecarga em um só servidor e em um só dispatcher.

Com isto, você pode ter por exemplo 2 servidores físicos trabalhando na mesma instância e executando separadamente uma tarefa em conjunto.
Outra grande diferença está também na área temporária do processo usuário, onde antes existiam áreas únicas para cada conexão chamadas PGA´s, agora esta área é englobada a SGA na large pool (explicarei estas áreas melhor quando for detalhar toda a arquitetura do Oracle).

Vantagens: Gerencia muito bem e muito mais rápido um ambiente com diversos usuários e inúmeras transações sem degradar tanto os recursos da máquina física devido a concorrência de informações.

Desvantagens: É muito possível que as instruções demorem algum tempo a mais para serem executadas em um ambiente com servidor compartilhado devido a entrada e saida das instruções nas filas e isto acaba gerando um pouco mais de gasto da CPU, mas no geral o ganho é maior.

Quando usar: Recomendado para ambientes que tenham diversas conexões simultâneas e transações pequenas (Banco de dados OLTP, exemplo uma central de atendimento ao cliente), o que mesmo gerando um pouco mais de consumo de CPU e memória você deve levar em consideração que está usando mais de uma máquina para este processamente, ou seja, ele roda muito melhor em processadores multithreads.





Arquitetura de um servidor compartilhado Oracle. (Documentação Oracle)













Seguindo o modelo que usei como exemplo abaixo uma ilustração


Espero que tenha ficado claro a todos. Qualquer dúvida deixe nos comentários que se estiver dentro dos meus conhecimentos com certeza irei responder.


Robert Santos.

 

15 comentários:

  1. bastante didático, parabéns!

    ResponderExcluir
  2. Obrigado, ta meio parado o blog devido a TCC de facul que estou fazendo mas vou fazer mais postagens a partir de agora.

    ResponderExcluir
  3. Parabens muito Boa explicação

    ResponderExcluir
  4. Valeu, estou terminando a faculdade, o blog esta um pouco de lado até o fim do ano, depois volto a postar normalmente.

    ResponderExcluir
  5. Achei muito legal, parabéns!!

    ResponderExcluir
  6. Cara agora fiquei confuso ?:/ eu achava que dedicado era melhor em tudo em relação aos compatilhados princinpalmente no fator "Peformace Geral do Site"

    ResponderExcluir
  7. Show de bola!!! Parabéns.

    ResponderExcluir
  8. Gostei muito das explicações e das analogias. Sabemos que é um fluxo bem complexo, mas realmente a forma usada facilitou o entendimento.. Parabéns!

    ResponderExcluir
  9. Muito bom! Me ajudou bastante!

    ResponderExcluir
  10. Parabéns, pela publicação, este assunto é mesmo complexo, você arrebentou nas comparações, fico muito claro agora !!

    ResponderExcluir
  11. Excelente post homem !
    Concordo plenamente com seu ponto que as relações fortes com o seu cliente é a chave, e usar a linguagem seus clientes usam . Estes dois pontos são os principais pontos-chave que temos de nos concentrar em Marketing B2B.
    Servidor dedicado

    ResponderExcluir
  12. Hello! I just would like to give a huge thumbs up for the great info you have here on this post.
    Übersetzung Deutsch Französisch

    ResponderExcluir