Consenso nos sistemas distribuídos Vimos que a replicação baseada no Total Order Broadcast é muito utilizada e a implementação dessa técnica que é o Total Order Broadcast é feita com o uso de um nó líder para sequenciar as mensagens entre os clientes e as demais réplicas que compõem o nosso cluster. Então, tecnicamente nós vamos perceber que o nó líder distribui as mensagens na maneira FIFO broadcast, vamos relembrar que FIFO significa First In, First Out, e assim todos os nós entregam a mesma sequência de mensagens na mesma ordem. E com isso nós conseguimos trabalhar com o problema de consistência no sistema distribuído. Só que nisso vai ter uma implicação. Nós temos um problema, que o nó líder é um ponto único de falha. E com isso nós temos dois caminhos de solução. Primeiro caminho, intervenção humana. Então o operador humano vai selecionar um novo líder entre as réplicas e fazer uma reconfiguração de cada nó para este novo líder. Fica evidente aqui que esta solução certamente não é a melhor, pensando na urgência e tempestividade das coisas que nós vivemos no mundo de transformação digital. Então, vai caber uma solução número dois, que são os algoritmos de consenso, que é justamente a técnica de transferência automática da liderança de um nó para outro. Bom, consenso. O consenso é um acordo que muitos nós alcançam sobre um determinado valor. E este valor é a próxima mensagem a ser entregue do ponto de vista do Total Order Broadcast. Assim que um nó decide sobre uma certa ordem de mensagens, os demais nós decidirão a mesma ordem. Então, consenso e Total Order Broadcast são algoritmos que são formalmente equivalentes. Você chega em consenso a partir do Total Order Broadcast e vice-versa. O mais importante aqui é a gente entender que um ou mais nós vão propor um valor para determinado atributo. E o algoritmo de consenso decide entre os valores propostos qual é o valor mais decente, mais adequado, o valor consistente. Algoritmos de consenso. Paxos, mais famoso, o mais antigo também, de 1998, o autor é o Lamport, Leslie Lamport. Então aqui nós temos um algoritmo que garante que um conjunto de nós, de um sistema distribuído, vai concordar sobre um único valor, vai chegar a um consenso sobre um único valor, mesmo que aconteçam falhas e particionamentos de rede. Temos o multipaxels, que é uma extensão do paxels que simplifica a sua implementação e melhora o desempenho para sistemas reais. Se a gente for olhar detalhadamente o paper que propõe o Paxels, nós vamos ver que este é um algoritmo muito complexo. É complexo de ser compreendido e também complexo de fazer um debug, de ser depurado. Então, o multipaxels vem com essa proposta de simplificar e melhorar desempenho. E aqui, nós vamos perceber a introdução de um líder, ou seja, um dos nós vai assumir um papel primário, um papel de liderança, e vai ser responsável por coordenar as operações de consenso daquele cluster. de consenso daquele cluster. Em 2014, nós temos o Raft e o Raft é outro algoritmo de consenso muito popular. O Raft vai dividir o problema do consenso em termos de líderes e seguidores. O líder também vai coordenar este consenso e os seguidores vão replicar o estado do líder. O Haft em relação ao Paxos é muito mais didático, é muito mais compreensível. Outros algoritmos famosos também são o VSR e o ZAP. Então, o VSR, de View Stamped Replication, também é baseado em estados de réplica, E o ZAB é o Zookeeper Atomic Broadcast. Aqui temos um algoritmo que é semelhante ao Paxos, porém foi ajustado para os requisitos do Apache Zookeeper. Então, todas as réplicas aqui operam as suas operações, realizam as suas operações na mesma ordem. Então, esses aqui são os cinco algoritmos de consenso mais populares e mais comuns da gente se deparar no dia a dia. mais populares e mais comuns da gente se deparar no dia a dia. Vamos falar um pouco mais sobre a eleição do nó líder. Então, aqui nós vamos perceber que o Multipaxus, o RAPT, o VSR e o ZAB usam líderes para sequenciar as mensagens. Existe um detector de falha do líder que basicamente é um time-out, ou seja, se este líder demorar muito para responder às réplicas, essas réplicas se possuírem um quórum, que é o conjunto mínimo de membros necessários para validar uma decisão, se tiver este quórum, elegem um novo líder. Se tiver este quórum, elegem um novo líder. E estes algoritmos vão evitar que tenha mais de um líder por termo. Este problema é popularmente conhecido como split brain. Podemos ter líderes diferentes em paralelo, porém estes líderes estarão em termos ou em momentos diferentes e quando um líder de um termo anterior identifica um líder de um termo mais recente, ele vai sair do papel de liderança e vai começar a seguir o líder do termo mais atual. Então, é um processo sofisticado e estes algoritmos vão realizar esse consenso nos sistemas distribuídos. E é um fator aqui muito importante de compreensão, principalmente para bancos de dados no ciclo, que estão fortemente amparados sobre o paradigma de sistemas distribuídos.