Master-Slave
Tags: distributedsystems, devops, architecture, networking
Published: 2023-05-24 20:38:10

<img src="https://www.eplan.help/en-us/Infoportal/Content/EECPro/2.9/Content/Pictures/2010112601.svg" height="177" align="right">

Embora o nome sugira certa semelhança com o modelo de cliente-servidor, na **arquitetura mestre-escravo**, as funções se invertem.

> **Mestre-escravo (master-slave)** é um modelo de comunicação ou controle assimétrico onde um dispositivo ou processo (o "mestre") controla um ou mais outros dispositivos ou processos (os "escravos") e serve como seu hub de comunicação.

Em alguns sistemas, **um mestre** é selecionado a partir de um grupo de dispositivos elegíveis, com os outros dispositivos atuando na função de **escravos**.

O processo de comunicação de um mestre com um escravo é denominado **transação**. Existem dois tipos:

- **Pergunta-Resposta**: O mestre inicia uma transação com um de seus escravos. Todos os escravos o ouvem, mas apenas aquele a quem a comunicação é dirigida responde. A transação pode envolver a troca de várias mensagens.
- **Disseminação sem Resposta**: O mestre inicia uma transação para todos os escravos. Nenhum escravo responde explicitamente e o mestre presume que eles terminarão suas execuções em algum ponto. Pode ser que um ou mais escravos não recebam as informações corretamente e isso deve ser levado em consideração ao utilizar esse tipo de transação.

Em uma transação mestre-escravo, certos parâmetros são definidos para organizá-los e garanti-los, entre eles:

- **Protocolo**: Para que dois componentes que estão trocando informações sejam compreendidos, é necessário que haja acordo sobre o conteúdo das informações trocadas. O conjunto de regras e convenções que governam a comunicação é chamado de _protocolo_.
- **Polling**: O componente mestre interroga sob um esquema programado a sequência de escravos disponíveis; cada escravo pode receber diferentes tipos de transações correspondentes a uma ou mais tarefas.
- **Tempo esgotado (Timeout)**: Quando o mestre inicia a transação com um determinado escravo dentro do esquema de consulta-resposta, pode acontecer que o escravo seja incapaz de responder ao mestre. Portanto, o mestre deve lidar com um tempo limite para a resposta do escravo e, se não houver resposta, abortar a transação para tentar novamente ou para continuar com seu esquema de _polling_.
- **Novas tentativas**: Quando um escravo não responde e o mestre aborta a transação, ele deve decidir o que fazer: continuar com o esquema de polling ou tentar novamente a transação abortada. O número de vezes que uma transação será repetida é chamado de _novas tentativas_.

Dentro desses modelos, há ainda algumas variações. No projeto de um sistema com arquitetura mestre-escravo, uma das decisões mais relevantes afeta a distribuição de responsabilidades, o que se denomina **granularidade**.

> **Granularidade** é a forma como o trabalho a ser executado é decomposto, ou seja, a carga computacional ou o tamanho das tarefas atribuídas aos escravos.

Dois tipos são distinguidos:

- **Granularidade fina**: Consiste em distribuir o trabalho em muitas pequenas tarefas. Isso tem a vantagem de que, se um escravo morrer, o mestre atribui a tarefa a outro escravo, com uma penalidade de tempo muito pequena. Como desvantagem, você precisa de um número maior de escravos para realizar a tarefas específica;

- **Granularidade grossa**: Consiste em distribuir o trabalho em algumas tarefas grandes. Como vantagem, é apresentado que não serão necessários muitos escravos para realizar uma tarefa. Por outro lado, se um escravo morrer, a penalidade de tempo será significativa.

A implantação de um sistema com arquitetura mestre-escravo também permite a aplicação de diversas variantes dependendo da utilização de um ou mais mestres.

São elas:

- **Mestre-escravo simples**: Estrutura clássica em que existe um único mestre que realiza a distribuição das tarefas entre os componentes escravos que as executam. Também pode ser responsável pelo gerenciamento dos próprios escravos (inicialização e parada, criação de mais instâncias em resposta ao aumento de solicitações ou carga do sistema, prisão de escravos ociosos ou com comportamentos anômalos etc.).

- **Mestre-escravo multinível**: Estrutura profunda na qual, ao invés de ter um único mestre supervisionando todos os escravos, um ou mais níveis de mestres são introduzidos para esse fim. Esses níveis de mestres então agrupam a supervisão de escravos ou outros mestres, de forma a conter o número de componentes supervisionados por cada componente de supervisão. Esta variante é comum em sistemas com grande número de escravos para evitar problemas de desempenho, ou seja, o mestre fica saturado com alta frequência de comunicações de escravos e para os escravos.

- **Master sobressalente**: Estrutura que inclui um ou mais master sobressalentes, com o objetivo de aumentar a disponibilidade. Esta variante apresenta vários mestres secundários para que o esquema geral da arquitetura seja mantido. Se, durante a operação usual de monitoramento e controle o mestre morre, ele é imediatamente substituído por outro (usando pontos de verificação), minimizando o tempo em que o sistema deixa de estar operacional.

- **Mestre com redundância passiva**: Estrutura que inclui um ou mais masters sobressalentes, com o objetivo de aumentar a disponibilidade. Esta variante, como no caso anterior, introduziria um novo mestre, que seria constantemente atualizado em relação aos dados do mestre principal. Assim, se durante a operação usual de supervisão e controle o mestre morrer, ele é imediatamente substituído por outro que já está pronto para funcionar, reduzindo praticamente a zero o tempo em que o sistema deixa de estar operacional.

### Vantagens do Master-Slave
Entre as **vantagens** da arquitetura mestre-escravo está a alta tolerância a erros. Isso significa que caso um escravo morra, dificilmente o sistema será afetado e poderá continuar operando sem problemas. A tarefa incompleta pode ser atribuída a outro escravo pelo mestre, e o escravo com falha pode ser reiniciado ou substituído. Por outro lado, no caso de falecimento do mestre (que é o caso que mais afeta o sistema, pois envolve uma penalidade maior ou até mesmo faz com que pare totalmente) pode ser resolvido aplicando algumas das variantes que proporcionam um substituto para o mestre.

### Desvantagens do Master-Slave
Entre as **desvantagens** mais problemáticas está a necessidade de independência das tarefas a serem desempenhadas pelo sistema, de forma a distribuí-las entre os escravos. Além disso, tal distribuição deve fazer uso inteligente das capacidades dos escravos, para maximizar o desempenho geral do sistema.

Assim, se uma arquitetura com muitos escravos e um único mestre for implantada, onde há muitas comunicações entre ela e estes, o mestre pode sofrer problemas de saturação, sendo o principal componente do sistema, isso resultaria em uma redução direta no desempenho. A saturação (ou baixo desempenho) do mestre é tanto mais provável quanto mais responsabilidades lhe forem atribuídas, portanto um sistema em que o mestre, além de distribuir tarefas entre os escravos, é responsável por processar os dados por eles retornados, fazendo algum tipo de computação global com esses dados, aumenta o risco de oferecer uma latência maior do que a esperada.

> Em termos gerais, a arquitetura mestre-escravo é adequada para a construção de sistemas de tempo real, que precisam garantir o tempo de resposta. Também é frequentemente encontrado em sistemas embarcados, que podem ser construídos combinando arquitetura de repositório ou arquitetura de pipeline com mestre-escravo.

> **Comentário**: Essa arquitetura, às vezes, é usada para estruturar a parte dos sistemas que lida com a replicação de informações; portanto, na replicação do banco de dados, o banco de dados mestre é considerado a fonte autorizada, e os bancos de dados escravos são sincronizados com ele.

Além de organizar a relação entre componentes de software de sistemas computacionais, a organização mestre-escravo está presente nas camadas mais baixas dos níveis de rede, bem como nas caraterísticas de arquitetura de computadores.

Os periféricos conectados a um barramento em equipamentos de informática geralmente funcionam como escravos de um mestre (controlador). Os discos rígidos que usam **ATA** em paralelo também são organizados em um esquema mestre-escravo.

> **ATA - Acrônimo de Advanced Technology Attachment** é uma tecnologia surgida nos anos 80, trazendo o inovador recurso de funcionamento do disco rígido com o driver (controlador) integrado, tendo o objetivo de homogeneizar os tipos de conectores do disco rígido à placa mãe e à fonte de energia.

> Os **clusters** de computadores fazem uso dessa arquitetura, assim como ferramentas como o **Jenkins** que utiliza essa arquitetura para realizar seu `build` da instância master para as instâncias slaves.