Pesquisar este blog

segunda-feira, 13 de fevereiro de 2017

Introdução a Sistemas Distribuídos

Introdução a Sistemas Distribuídos 

História

Conforme as máquinas foram evoluindo, os sistemas foram ficando mais complexos, tudo na história da computação começou com enormes máquinas de válvulas, que eram programadas bit a bit, acionando ou não uma válvula. Tanto os sistemas, quanto as máquinas foram evoluindo com o passar do tempo.
No começo todo o sistema rodava em uma única máquina, mas com o passar do tempo, os sistemas já não cabiam mais nas máquinas e os sistemas tiveram que evoluir para uma forma em que eles pudessem rodar em várias máquinas, afim de distribuir o processamento e dar conta de todas as requisições.
No início as linguagens tinham suas próprias formas de armazenar os dados e todo o programa rodava sozinho, sem depender de nenhum software externo. Tudo rodava em máquinas grandes e terminais burros acessavam os programas, na maioria das vezes os terminais eram apenas um teclado e um monitor.

Como começou?

Com o tempo, foram se criando formas de armazenar os dados, e um software para cuidar disto. Os bancos de dados surgiram na década de 70, e os Sistemas Gerenciadores de Banco de Dados (SGBD) relacionais, ou banco de dados SQL começaram a dominar o mercado na década de 80.
Estes bancos são transacionais e possuem um relacionamento entre as tabelas. As transações são consideradas ACID:
  • Atomicas: Todas as ações de uma transação devem ser completadas com sucesso para que a transção seja comitada.
  • Consistencia: As regras de consistência são definidas no banco e todas elas devem ser obedecidas para que uma transção seja completada. (not null, foreign key, etc)
  • Isolamento: Uma transação é completamente isolada de outra transção e nenhuma outra transação no banco poderá interferir na transação corrente.
  • Durabilidade: Os dados de uma transação são permanentes e as alterações realizadas por ela só podem ser apagadas se isto for parte de uma transação subsequente.
Com a divisão entre um software para regras de negócio, processar a entrada de dados e um outro para cuidar dos dados começamos a ter sistemas distribuídos, agora um software cuidava do armazenamento dos dados e outro cuidava da entrada e da formatação dos dados. 
Nesta época as empresas começaram a investir em servidores e os terminais executavam uma boa parte do processamento dos dados e estes sistemas eram chamados de cliente servidor. Os softwares eram compilados para uma plataforma específica e eles deviam ser instalado em todas as máquinas que iriam usá-lo. A cada atualização uma nova rodada de instalação deveria ser feita.

A evolução para a web

Com o surgimento da internet, os sistemas voltaram a ser executados em um serviço central e os browsers acessavam os sistemas, com quase ou nenhum processamento.
As interfaces foram evoluindo e hoje parte das regras de negócio são validadas e executadas pelos browsers.
Devido a facilidade de instalação e manutenção os sistemas web ocuparam o lugar que todos os sitemas dentro de uma empresa e hoje ao invés de instalar um software todos usamos um site com um sistema.
A cada dia que passa os sistemas foram ficando maiores e mais complexos e eles foram sendo divididos em várias camadas, todas as camadas possuem réplicas e são distribuídas, com isto os sistemas se tornaram cada dia mais disponíveis.
Os bancos de dados já não são mais a única forma de ser armazenar os dados, muitos sistemas de armazenamento NoSQL são utilizados, existem alguns tipos diferentes e cada um deles possui uma pecuiliaridade que o torna ideal para um caso de uso específico.

Pontos Importantes

Comunicação para um sistema distribuído funcionar as máquinas precisam de uma forma confiável de comunicação.
Tolerância a falhas, como o sistema é constituído de vários componentes, se algum deles falhar o sistema tem que continuar operando.
Os componentes dos sistemas distribuídos possuem nomes, então uma forma organizada de nomear estes componentes precisa ser aplicada.
Quando temos que armazenar uma grande quantidade de dados, um sistema de arquivos distribuídos deverá ser usado.
Ao desenvolver um sistema distribuído a sua arquitetura deverá ser pensada de forma a atingir o melhor desempenho, com a garantia de que o sistema não vai parar, no menor custo, o que é uma tarefa bem complicada.

Apresentação