Um sistema distribuído em sua definição mais simples é um grupo de computadores trabalhando juntos que aparecem como um para o usuário final. As máquinas compartilham um estado comum, são executadas simultaneamente e podem operar independentemente sem afetar o tempo de atividade de todo o sistema. A verdade é que gerenciar tais sistemas é um assunto complexo e cheio de armadilhas.
Visão geral do sistema
O sistema distribuído permite o compartilhamento de recursos (incluindo software) conectados à rede ao mesmo tempo.
Exemplos de distribuição do sistema:
- Pilha tradicional. Esses bancos de dados são armazenados no sistema de arquivos de uma máquina. Sempre que o usuário deseja receber informações, ele se comunica diretamente com esta máquina. Para distribuir este sistema de banco de dados, você precisa executá-lo em vários PCs ao mesmo tempo.
- Arquitetura distribuída.
Sistema distribuídopermite dimensionar horizontalmente e verticalmente. Por exemplo, a única maneira de lidar com mais tráfego seria atualizar o hardware que executa o banco de dados. Isso é chamado de escala vertical. O dimensionamento vertical é bom até um certo limite, após o qual mesmo o melhor equipamento não consegue fornecer o tráfego necessário.
Escala horizontal significa adicionar mais computadores, não atualizar o hardware em um. O dimensionamento vertical aumenta o desempenho para os recursos de hardware mais recentes em sistemas distribuídos. Essas oportunidades não são suficientes para empresas de tecnologia com cargas de trabalho moderadas a pesadas. A melhor coisa sobre o dimensionamento horizontal é que não há limites de tamanho. Quando o desempenho diminui, outra máquina é simplesmente adicionada, o que, em princípio, pode ser feito indefinidamente.
No nível corporativo, um sistema de controle distribuído geralmente envolve várias etapas. Nos processos de negócios nos locais mais eficientes da rede de computadores da empresa. Por exemplo, em uma distribuição típica usando um modelo de sistema distribuído de três camadas, o processamento de dados é feito em um PC no local do usuário, o processamento de negócios é feito em um computador remoto e o acesso ao banco de dados e o processamento de dados são feitos em um computador completamente diferente. que fornece acesso centralizado para muitos processos de negócios. Normalmente, esse tipo de computação distribuídausa o modelo de interação cliente-servidor.
Tarefas Principais
As principais tarefas de um sistema de controle distribuído incluem:
- Transparência - Obtenha uma única imagem do sistema sem ocultar a localização, acesso, migração, simultaneidade, failover, realocação, persistência e detalhes de recursos para os usuários.
- Abertura - simplifica a configuração e as alterações da rede.
- Confiabilidade - Comparado a um único sistema de controle, deve ser confiável, consistente e ter uma alta probabilidade de mascarar erros.
- Performance - Em comparação com outros modelos, os modelos distribuídos proporcionam um aumento de desempenho.
- Escalável - Esses sistemas de controle distribuído devem ser escaláveis em termos de território, administração ou tamanho.
As tarefas dos sistemas de distribuição incluem:
- Segurança é um grande problema em um ambiente distribuído, especialmente ao usar redes públicas.
- Tolerância a falhas - pode ser difícil quando o modelo é construído com componentes não confiáveis.
- Coordenação e distribuição de recursos - pode ser difícil se não houver protocolos adequados ou políticas necessárias.
Ambiente de computação distribuído
(DCE) é um padrão da indústria amplamente utilizado que suporta tal computação distribuída. Na Internet, provedores terceirizados oferecem alguns serviços genéricos,que se encaixam neste modelo.
Grid computing é um modelo de computação com uma arquitetura distribuída de um grande número de computadores associados à resolução de um problema complexo. No modelo de computação em grade, servidores ou computadores pessoais executam tarefas independentes e são conectados livremente uns aos outros pela Internet ou redes de baixa velocidade.
O maior projeto de computação em grade é o SETI@home, no qual proprietários de computadores individuais se voluntariam para realizar alguns de seus ciclos de processamento multitarefa usando seu computador para o projeto Search for Extraterrestrial Intelligence (SETI). Este problema de computador usa milhares de computadores para baixar e pesquisar dados de radiotelescópios.
Um dos primeiros usos da computação em grade foi quebrar o código criptográfico por um grupo agora conhecido como distribuído.net. Este grupo também descreve seu modelo como computação distribuída.
Escalonamento do banco de dados
A disseminação de novas informações do mestre para o escravo não acontece instantaneamente. Na verdade, existe uma janela de tempo na qual você pode obter informações desatualizadas. Se não fosse esse o caso, o desempenho de gravação sofreria, pois os sistemas distribuídos teriam que esperar de forma síncrona pela propagação dos dados. Eles vêm com alguns compromissos.
Usando uma abordagem de banco de dados escravo, é possível dimensionar o tráfego de leitura até certo ponto. Há muitas opções aqui. Mas você só precisa dividir o tráfego de gravação em váriosservidores porque não pode lidar com isso. Uma maneira é usar uma estratégia de replicação multimestre. Lá, em vez de escravos, existem vários nós principais que suportam leitura e escrita.
Outro método é chamado de fragmentação. Com ele, o servidor é dividido em vários servidores menores, chamados de shards. Esses fragmentos têm entradas diferentes, regras são criadas sobre quais entradas vão para cada fragmento. É muito importante criar uma regra para que os dados sejam distribuídos uniformemente. Uma abordagem possível para isso é definir intervalos de acordo com algumas informações de registro.
Esta chave de fragmentação deve ser escolhida com muito cuidado, pois a carga nem sempre é igual às bases de colunas arbitrárias. O único shard que recebe mais solicitações do que os outros é chamado de hotspot, e eles tentam impedir que ele se forme. Uma vez divididos, os dados de recalibração tornam-se incrivelmente caros e podem resultar em tempo de inatividade significativo.
Algoritmos de consenso de banco de dados
DBs são difíceis de implementar em sistemas de segurança distribuídos porque eles exigem que cada nó negocie a ação correta de interrupção ou confirmação. Essa qualidade é conhecida como consenso e é um problema fundamental na construção de um sistema de distribuição. Alcançar o tipo de acordo necessário para o problema de "commit" é simples se os processos envolvidos e a rede forem totalmente confiáveis. No entanto, os sistemas reais estão sujeitos a uma série depossíveis falhas de processos de rede, mensagens perdidas, corrompidas ou duplicadas.
Isso representa um problema e não é possível garantir que o consenso correto seja alcançado dentro de um período limitado de tempo em uma rede não confiável. Na prática, existem algoritmos que chegam a um consenso rapidamente em uma rede não confiável. Na verdade, o Cassandra fornece transações leves por meio do uso do algoritmo Paxos para consenso distribuído.
Computação distribuída é a chave para o influxo de processamento de big data que tem sido usado nos últimos anos. É um método de dividir uma tarefa enorme, como 100 bilhões de registros acumulados, dos quais nenhum computador é capaz de fazer praticamente qualquer coisa por conta própria, em muitas tarefas menores que podem caber em uma única máquina. O desenvolvedor divide sua enorme tarefa em muitas tarefas menores, executa-as em muitas máquinas em paralelo, coleta os dados adequadamente, então o problema original será resolvido.
Esta abordagem permite escalar horizontalmente - quando há uma grande tarefa, basta adicionar mais nós ao cálculo. Essas tarefas são executadas há muitos anos pelo modelo de programação MapReduce associado à implementação para processamento paralelo e geração de grandes conjuntos de dados usando um algoritmo distribuído em um cluster.
Atualmente, o MapReduce está um pouco desatualizado e traz alguns problemas. Surgiram outras arquiteturas que abordam esses problemas. Ou seja, Arquitetura Lambda para distribuiçãosistemas de processamento de fluxo. Os avanços nesta área trouxeram novas ferramentas: Kafka Streams, Apache Spark, Apache Storm, Apache Samza.
Sistemas de armazenamento e replicação de arquivos
Os sistemas de arquivos distribuídos podem ser considerados como armazenamentos de dados distribuídos. Isso é o mesmo que o conceito - armazenar e acessar uma grande quantidade de dados em um cluster de máquinas que são uma única entidade. Eles geralmente andam de mãos dadas com a Computação Distribuída.
Por exemplo, o Yahoo é conhecido por executar HDFS em mais de 42.000 nós para armazenar 600 petabytes de dados desde 2011. A Wikipedia define a diferença em que os sistemas de arquivos distribuídos permitem o acesso a arquivos usando as mesmas interfaces e semântica dos arquivos locais, em vez de uma API personalizada, como Cassandra Query Language (CQL).
Hadoop Distributed File System (HDFS) é um sistema usado para computação na infraestrutura Hadoop. Difundido, é usado para armazenar e replicar arquivos grandes (tamanho GB ou TB) em muitas máquinas. Sua arquitetura consiste principalmente em NameNodes e DataNodes.
NameNodes é responsável por armazenar metadados sobre o cluster, como qual nó contém blocos de arquivos. Eles atuam como coordenadores de rede, descobrindo onde melhor armazenar e copiar arquivos, acompanhando a integridade do sistema. Os DataNodes simplesmente armazenam arquivos e executam comandos como replicação de arquivos, nova gravação eoutros.
Sem surpresa, o HDFS é melhor usado com o Hadoop para computação, pois fornece reconhecimento de informações de tarefas. Os trabalhos especificados são executados nos nós que armazenam os dados. Isso permite que você use a localização dos dados - otimiza os cálculos e reduz a quantidade de tráfego na rede.
O Interplanetary File System (IPFS) é um novo protocolo/rede peer-to-peer para sistemas de arquivos distribuídos. Usando a tecnologia Blockchain, possui uma arquitetura totalmente descentralizada sem um único proprietário ou ponto de falha.
IPFS oferece um sistema de nomenclatura (semelhante ao DNS) chamado IPNS e permite que os usuários recuperem informações facilmente. Ele armazena o arquivo por meio de versionamento histórico, assim como o Git faz. Isso permite o acesso a todos os estados anteriores do arquivo. Ele ainda está passando por um desenvolvimento pesado (v0.4 no momento da redação), mas já vimos projetos interessados em construí-lo (FileCoin).
Sistema de mensagens
Os sistemas de mensagens fornecem um local central para armazenar e distribuir mensagens dentro de um sistema comum. Eles permitem que você separe a lógica do aplicativo da comunicação direta com outros sistemas.
Escala conhecida - o cluster Kafka do LinkedIn processou 1 trilhão de mensagens por dia com picos de 4,5 milhões de mensagens por segundo.
Em termos simples, a plataforma de mensagens funciona assim:
- Mensagempassado do aplicativo que potencialmente o cria, chamado produtor, entra na plataforma e é lido de vários aplicativos, chamados consumidores.
- Se você precisar armazenar um determinado evento em vários lugares, como criar um usuário para um banco de dados, armazenamento, serviço de envio de e-mail, a plataforma de mensagens é a maneira mais limpa de distribuir essa mensagem.
Existem várias plataformas populares de mensagens de alto nível.
RabbitMQ é um mediador de mensagens que permite ajustar melhor o controle de suas trajetórias usando regras de roteamento e outros parâmetros facilmente configuráveis. Ele pode ser chamado de corretor "inteligente" porque tem muita lógica e monitora de perto as mensagens que passam por ele. Fornece opções para APs e CPs do CAP.
Kafka é um corretor de mensagens que é um pouco menos funcional, pois não registra quais mensagens foram lidas e não permite lógica de roteamento complexa. Ajuda a alcançar um desempenho incrível e representa a maior promessa neste espaço com o desenvolvimento ativo de sistemas distribuídos pela comunidade de código aberto e o suporte da equipe Confluent. Kafka é mais popular entre empresas de alta tecnologia.
Aplicativos de Interação de Máquina
Este sistema de distribuição é um grupo de computadores trabalhando juntos para aparecer como um computador separado para o usuário final. Estas máquinas estão em estado geral, funcionandosimultaneamente e pode trabalhar independentemente sem afetar o tempo de atividade de todo o sistema.
Se você considerar o banco de dados como distribuído, somente se os nós interagirem entre si para coordenar suas ações. Neste caso, é algo como um aplicativo executando seu código interno em uma rede peer-to-peer e é classificado como um aplicativo distribuído.
Exemplos de tais aplicações:
- Known Scale - BitTorrent enxame 193.000 nós para o episódio de Game of Thrones.
- Tecnologia básica de registro de sistemas Blockchain distribuídos.
Os livros-razão distribuídos podem ser considerados como um banco de dados imutável, somente para aplicativos, que é replicado, sincronizado e compartilhado em todos os nós da rede de distribuição.
A escala conhecida - a rede Ethereum - teve 4,3 milhões de transações por dia em 4 de janeiro de 2018. Eles usam o padrão Event Sourcing, que permite restaurar o estado do banco de dados a qualquer momento.
Blockchain é a tecnologia subjacente atual usada para ledgers distribuídos e realmente marcou seu início. Esta mais nova e maior inovação no espaço distribuído criou o primeiro protocolo de pagamento verdadeiramente distribuído, bitcoin.
Blockchain é um livro-razão distribuído com uma lista ordenada de todas as transações que já ocorreram em sua rede. Os negócios são agrupados e armazenados em blocos. Todo o blockchain é essencialmente uma lista vinculada de blocos. Blocos especificadossão caros para criar e são fortemente acoplados uns aos outros por meio de criptografia. Simplificando, cada bloco contém um hash especial (que começa com um número X de zeros) do conteúdo do bloco atual (na forma de uma árvore de Merkle) mais o hash do bloco anterior. Este hash requer muito poder da CPU.
Exemplos de sistemas operacionais distribuídos
Os tipos de sistema aparecem para o usuário porque são sistemas de usuário único. Eles compartilham sua memória, disco e o usuário não tem problemas para navegar pelos dados. O usuário armazena algo em seu PC e o arquivo é armazenado em vários locais, ou seja, computadores conectados para que os dados perdidos possam ser facilmente recuperados.
Exemplos de sistemas operacionais distribuídos:
- Windows Server 2003;
- Windows Server 2008;
- Windows Server 2012;
- UbuntuLinux (servidor Apache).
Se algum computador inicializar mais alto, ou seja, se muitas solicitações forem trocadas entre PCs individuais, é assim que ocorre o balanceamento de carga. Nesse caso, as solicitações são propagadas para o PC vizinho. Se a rede ficar mais carregada, ela poderá ser expandida adicionando mais sistemas à rede. O arquivo e as pastas de rede são sincronizados e as convenções de nomenclatura são usadas para que não ocorram erros quando os dados forem recuperados.
Caching também é usado ao manipular dados. Todos os computadores usam o mesmo namespace para nomear arquivos. Maso sistema de arquivos é válido para todos os computadores. Se houver atualizações no arquivo, ele será gravado em um computador e as alterações serão propagadas para todos os computadores, de modo que o arquivo tenha a mesma aparência.
Os arquivos são bloqueados durante o processo de leitura/gravação, portanto, não há impasse entre computadores diferentes. As sessões também ocorrem, como ler, gravar arquivos em uma sessão e fechar a sessão, e então outro usuário pode fazer o mesmo e assim por diante.
Benefícios do uso
Um sistema operacional projetado para facilitar o dia a dia das pessoas. Para benefícios e necessidades do usuário, o sistema operacional pode ser de usuário único ou distribuído. Em um sistema de recursos distribuídos, muitos computadores estão conectados entre si e compartilham seus recursos.
Benefícios de fazer isso:
- Se um PC em tal sistema estiver com defeito ou danificado, então outro nó ou computador cuidará dele.
- Mais recursos podem ser facilmente adicionados.
- Recursos como impressoras podem servir vários computadores.
Este é um resumo sobre o sistema de distribuição, porque ele é usado. Algumas coisas importantes a serem lembradas: eles são complexos e são escolhidos por escala e preço e são mais difíceis de trabalhar. Esses sistemas são distribuídos em várias categorias de armazenamento: computação, sistemas de arquivos e mensagens, registros, aplicativos. E tudo isso é muito superficial sobre um sistema de informação complexo.