Modelos de sistemas distribuídos, problema dos generais bizantinos. mas também como o autor que eu estou me baseando, que é o Martin Kleffman, também não tem a intenção de fazer nenhuma analogia militar. Este conteúdo é encontrado na literatura de modelos de sistemas distribuídos como o problema dos generais bizantinos. E aqui nós vamos entender a palavra bizantino como algo muito complexo, uma referência histórica à região geográfica que atualmente está na Turquia e que na antiguidade era constituída pelo Império Bizantino. E naquele momento histórico existiu uma complexidade militar e também de cobrança de impostos muito, muito complexa. Então, bizantino aqui tem a ver com complexidade. Também não existe a intenção de fazer nenhum comentário negativo sobre as pessoas que vivem nesta região do globo, seja no passado ou atualmente. Então, feitos estes comentários, vamos detalhar o problema dos generais bizantinos sobre o contexto de sistemas distribuídos. Aqui nós já vamos ver uma combinação de três exércitos, também com a intenção de conquistar uma cidade. E o nosso problema neste dilema dos generais bizantinos é que alguns generais podem ser traidores. Então, eu confio em você para neste ponto já estar visualizando os possíveis nós de um sistema gerenciador de banco de dados que é distribuído e que estes nós podem falhar. Então, esta que é a analogia que nós temos aqui. Então, mais uma vez, os exércitos têm a sua comunicação entre seus generais realizada por mensageiros e eles precisam entrar em um consenso sobre o momento do ataque. E como nós vimos no exemplo anterior, este ataque tem que ser síncrono, precisa acontecer juntos, todos precisam atacar de maneira conjunta. Então, aqui nós vamos observar que nós temos o general 1 mandando mensagens para o general 2 e 3, sinalizando que o ataque deve ser realizado e o general 2 pode comunicar para o 3 uma mensagem oposta. Então ele pode ter um comportamento de traição, um comportamento de falha. Pode ter um comportamento de traição, um comportamento de falha. E também nós vamos ter uma situação onde o general 1 manda uma ordem de ataque para o general 3 e uma ordem de recuo para o general 2. E o general 2 também manda uma ordem de recuo para o 3. Então, do ponto de vista do general 3, situações distintas como essa são idênticas. Não é possível ter uma diferenciação. Então, como a gente resolve esse dilema? Como a comunicação ou como o plano de ação precisa acontecer? Então, aqui a solução é generais honestos, ou seja, nós que não estamos falhando, precisam concordar com o plano de ação, ou seja, precisam obter consenso. Vamos aplicar novamente o problema dos generais bizantinos, aquela situação em que nós vimos um cliente realizando uma compra que precisa ter um pagamento realizado. Então, aqui nós temos que ter a concordância, ou seja, o consenso de que o produto foi pago devidamente por aquele cliente e pode ser entregue para aquela pessoa, para que o seu pedido seja realizado com sucesso. Então, aqui nós vamos ter algumas características interessantes. Cada general pode ser honesto ou malicioso, ou seja, cada nó pode ser falho ou não, estar íntegro. Existe um teorema para isso. Então, nós vamos ver aqui que é 3F mais 1 generais honestos para tolerar F generais maliciosos. Então, nesse instante, a gente já começa a visualizar o porquê de regras de maioria. Então, se eu tenho 3, eu preciso da maioria de dois, eu preciso do quórum de dois nós. Então aqui está a regra, o teorema que embasa este comportamento. Generais honestos não sabem quem é malicioso, generais maliciosos podem conspirar juntos, Generais maliciosos podem conspirar juntos. Imagina um cenário de invasão, um cenário de ataque. Então, um ataque muito sofisticado pode tomar conta de vários nós de um sistema distribuído e esses nós que foram comprometidos podem atacar em conjunto. Se você está pensando que criptografia resolve o problema, afinal as mensagens podem ser assinadas digitalmente e com isso a gente garante a autenticidade dessas mensagens, esse pensamento é bom, ajuda, só que não resolve o problema. Então, os generais honestos precisam estar de acordo com o plano de ação. precisam estar de acordo com o plano de ação. Ou, os nós íntegros que estão em operação precisam obter consenso sobre a consistência e integridade dos dados.