Enquanto tento entender a "Disponibilidade" (A) e "Tolerância de partição" (P) no CAP, achei difícil entender as explicações de vários artigos.
Tenho a sensação de que A e P podem andar juntos (sei que não é esse o caso, e é por isso que não entendo!).
Explicando em termos simples, o que são A e P e a diferença entre eles?
database
nosql
consistency
availability
Manikandan Kannan
fonte
fonte
Respostas:
Consistência significa que os dados são iguais no cluster, para que você possa ler ou gravar de / para qualquer nó e obter os mesmos dados.
Disponibilidade significa a capacidade de acessar o cluster, mesmo se um nó no cluster ficar inativo.
Tolerância de partição significa que o cluster continua funcionando mesmo se houver uma "partição" (quebra de comunicação) entre dois nós (os dois nós estão ativos, mas não podem se comunicar).
Para obter disponibilidade e tolerância à partição, você precisa renunciar à consistência. Considere se você possui dois nós, X e Y, em uma configuração mestre-mestre. Agora, há uma interrupção entre a comunicação de rede entre X e Y, para que eles não possam sincronizar atualizações. Nesse ponto, você pode:
A) Permitir que os nós fiquem fora de sincronia (perdendo a consistência) ou
B) Considere o cluster "inativo" (desistindo da disponibilidade)
Todas as combinações disponíveis são:
Você deve observar que os sistemas CA praticamente não existem (mesmo que alguns sistemas afirmem existir).
fonte
Considerando P em termos iguais a C e A é um erro, mas a noção '2 de 3' entre C, A, P é enganosa. A maneira sucinta que eu explicaria o teorema do CAP é: "Em um armazenamento de dados distribuído, no momento da partição de rede, você precisa escolher Consistência ou Disponibilidade e não pode obter os dois". Os sistemas NoSQL mais recentes estão tentando se concentrar na disponibilidade, enquanto os bancos de dados ACID tradicionais tiveram um foco maior na consistência.
Você realmente não pode escolher a CA, a partição de rede não é algo que alguém gostaria de ter, é apenas uma realidade indesejável de um sistema distribuído, as redes podem falhar. A questão é que escolha você escolhe para o seu aplicativo quando isso acontece. Este artigo do homem que formulou esse termo pela primeira vez parece explicar isso muito claramente.
fonte
Aqui está como eu estou discutindo o CAP, principalmente em relação a P.
A CA só é possível se você estiver de acordo com um banco de dados monolítico de servidor único (talvez com replicação, mas todos os dados em um "bloco de falha" - não se considera que os servidores falhem parcialmente).
Se o seu problema exigir dimensionamento, distribuição e multi-servidor, podem ocorrer partições de rede. Você já está solicitando P. Poucos problemas que abordo são passíveis de paradigmas de servidor único sempre (ou, como disse Stonebraker, "distribuir é estaca da mesa"). Se você encontrar um problema de autoridade de certificação, soluções como um RDBMS tradicional sem dimensionamento proporcionam muitos benefícios.
Para mim, raro: passamos a discutir AP vs CP.
Você só escolhe entre as operações AP e CP quando possui uma partição. Se a rede e o hardware estiverem funcionando corretamente, você pega o seu bolo e também o come.
Vamos discutir a distinção AP / CP.
AP - quando houver uma partição de rede, deixe as partes independentes operarem livremente.
CP - quando houver uma partição de rede, desligue os nós ou desautorize leituras e gravações para que ocorram falhas determinísticas.
Eu gosto de arquiteturas que podem fazer as duas coisas, porque alguns problemas são AP e alguns são CP - e alguns bancos de dados podem fazer as duas coisas. Entre as soluções de CP e AP, também existem sutilezas.
Por exemplo, em um conjunto de dados AP, você tem a possibilidade de leituras inconsistentes e geração de conflitos de gravação - esses são dois modos possíveis de AP diferentes. Seu sistema pode ser configurado para AP com alta disponibilidade de leitura, mas não permite conflitos de gravação? Ou seu sistema AP pode aceitar conflitos de gravação, com um sistema de resolução forte e flexível? Você precisará dos dois eventualmente ou poderá escolher um sistema que faça apenas um?
Em um sistema CP, quanta indisponibilidade você obtém com partições pequenas (servidor único), se houver? Maior replicação pode aumentar a indisponibilidade em um sistema CP, como o sistema lida com essas compensações?
Essas são todas as perguntas a serem feitas com CP vs AP.
Uma ótima leitura nesta área no momento é a publicação "12 anos depois" de Brewer. Penso que isto avança o debate da PAC com clareza e recomendo vivamente.
http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
fonte
Consistência:
Uma leitura é garantida para retornar a gravação mais recente (como ACID) para um determinado cliente. Se alguma solicitação ocorrer durante esse período, será necessário aguardar a conclusão da sincronização de dados no (s) nó (s).
Disponibilidade:
todo nó (se não falhou) sempre executa consultas e sempre deve responder às solicitações. Não importa se retorna a cópia mais recente ou não.
Tolerância de partição:
O sistema continuará funcionando quando ocorrerem partições de rede.
fonte da foto
fonte
Eu sinto que a tolerância da partição não é explicada bem em nenhuma das respostas, então, para explicar as coisas com mais detalhes, o teorema do CAP significa:
C : (linearidade ou consistência forte) significa aproximadamente
A :
P :
Fonte: Awesome de Martin kleppmann trabalho
Só para dar um exemplo: o Cassandra pode no máximo ser um sistema AP. Mas se você configurá-lo para ler ou gravar com base no Quorum, ele não permanece disponível para CAP (disponível conforme a definição do teorema da CAP) e é apenas o sistema P.
fonte
Em um simples teorema da CAP, é impossível que um sistema distribuído forneça simultaneamente as três garantias:
Consistência
Cada nó contém os mesmos dados ao mesmo tempo
Disponibilidade
Pelo menos um nó deve estar disponível para fornecer dados sempre
Tolerância de partição
Falha no sistema é muito rara
Principalmente, todo sistema pode garantir no mínimo dois recursos, CA, AP ou CP .
fonte
Consistência - Quando estamos enviando a solicitação de leitura, se estiver retornando resultado, ela deve retornar a gravação mais recente fornecida pela solicitação do cliente. Disponibilidade - Sua solicitação de leitura / gravação deve sempre ser bem-sucedida. Tolerância de partição - Quando houver uma partição de rede (problema para algumas máquinas se comunicarem), o sistema ainda deverá funcionar.
Em uma distribuição, há chances de que a partição de rede ocorra e não podemos evitar o "P" do CAP. Então, escolhemos entre "Consistência" e "Disponibilidade".
http://bigdatadose.com/understanding-cap-theorem/
fonte
Maneira simples de entender o teorema da PAC:
Esta explicação é deste excelente artigo . Espero que ajude.
fonte
Passei por muitos links, mas nenhum deles poderia me dar uma resposta satisfatória, exceto um.
Por isso, estou descrevendo o CAP em formulações muito simples.
Consistência : deve retornar os mesmos dados , independentemente de qual nó ele está vindo.
Disponibilidade : o nó deve responder (deve estar disponível).
Tolerância de partição : o cluster deve responder (deve estar disponível), mesmo se houver uma partição (ou seja, falha na rede) entre os nós.
(Também uma razão principal confunde mais é ruim convenção de nomenclatura dela Se eu tivesse razão, eu poderia ter dado. DNC teorema vez: consistência de dados , Nó disponibilidade , cluster Disponibilidade , onde cada um corresponde a consistência , disponibilidade e tolerância Partition respectivamente)
Banco de dados CP: um banco de dados CP oferece consistência e tolerância à partição à custa da disponibilidade. Quando uma partição ocorre entre dois nós, o sistema precisa desligar o nó não consistente (ou seja, torná-lo indisponível) até que a partição seja resolvida.
Banco de dados AP: um banco de dados AP oferece disponibilidade e tolerância de partição à custa da consistência. Quando uma partição ocorre, todos os nós permanecem disponíveis, mas aqueles na extremidade incorreta de uma partição podem retornar uma versão mais antiga dos dados que outros. (Quando a partição é resolvida, os bancos de dados AP normalmente ressincronizam os nós para reparar todas as inconsistências no sistema.)
Banco de dados da CA: um banco de dados da CA fornece consistência e disponibilidade em todos os nós. No entanto, ele não poderá fazer isso se houver uma partição entre dois nós no sistema e, portanto, não puder fornecer tolerância a falhas. Em um sistema distribuído, as partições não podem ser evitadas. Portanto, embora possamos discutir um banco de dados distribuído pela CA em teoria, para todos os efeitos práticos, um banco de dados distribuído pela CA pode existir, mas não deveria existir.
Portanto, isso não significa que você não pode ter um banco de dados da CA para seu aplicativo distribuído se precisar de um. Muitos bancos de dados relacionais, como o PostgreSQL, oferecem consistência e disponibilidade e podem ser implantados em vários nós usando a replicação.
Fonte: https://www.ibm.com/cloud/learn/cap-theorem
fonte