Group Discussion: NoSQL and CAP Theorem
Student Groups
Our goal here is to understand the CAP Theorem and to know the advantages and disadvantages of some NoSQL solutions. There will be four groups. All the wikis will have the following content:
- DB Name
- Student List (with name and USP id)
- Main DB Features
- Does It Implement CA, CP, or AP? Why?
- DB Advantages
- DB Disadvantages
- Application Niches
They will also make a 22 minutes presentation of their work to the class.
Each group has to choose:
- Coordinator: To coordinate the discussions and group activities. He also has to control the time to make sure the group will post its results on time.
- Editor: To write down the group's contents to the wiki.
- Three Presenters: To present the work to the class
A group may divide the work among subgroups, but, in this case, it is recommended that you plan some time to join the work of each subgroup.
Tip: If you use Google Docs or Slides to create your work, you may just link it to the group's wiki page. But remember to make it readable by everyone and copy its text to the wiki (just as a backup).
Cassandra DB
Índice analítico
1.1. Realizado por:
1.2. O que é o Apache Cassandra e como funciona sua arquitetura?
1.3. AP (Availability and Partition Tolerance) no Cassandra
1.3.1. 1. Alta Disponibilidade (Availability - A)
1.3.2. 2. Tolerância a Partições (Partition Tolerance - P)
1.3.3. 3. Consistência Eventual (Trade-off de Consistência no CAP)
1.4. Vantagens do Cassandra DB
1.5. Desvantagens do Cassandra DB
1.6. Aplicações
Cassandra DB [editar]
Realizado por:
Felipe carneiro machado - 14569373
Felipe Volkweis de Oliveira - 14570041
Rafael Brazolin Alves Mansur - 14604020
Christyan Paniago Nantes - 15635906
Vinícius Gutierrez Neves - 14749363
Luiz Fellipe Catuzzi - 11871198
Hélio Márcio Cabral Santos - 14577862
Gabriel Martins Monteiro - 14572099
Murilo Fonseca de Matos - 13719065
Kouki Hayashi - 13672018
Augusto Cavalcante Barbosa Pereira - 14651531
O que é o Apache Cassandra e como funciona sua arquitetura?
O Apache Cassandra é um banco de dados NoSQL de colunas largas concebido para lidar com petabytes de dados em clusters distribuídos, oferecendo latências muito baixas tanto para leitura quanto para escrita. O projeto nasceu no Facebook entre 2007 e 2008 para suportar o sistema de busca de mensagens internas; foi liberado como código aberto em julho de 2008, transferido à Apache Software Foundation em 2009 e promovido a projeto de primeiro nível em março de 2010. Desde então, tornou-se referência para workloads que exigem escalabilidade horizontal praticamente ilimitada, zero downtime e suporte nativo a múltiplos datacenters.
Seu grande diferencial está na arquitetura “masterless”: todos os nós de um cluster Cassandra são iguais (peer-to-peer) e podem atender leituras ou gravações diretamente, eliminando qualquer ponto único de falha. Os dados são particionados através de consistent hashing em um anel lógico de tokens; isso faz com que a adição ou remoção de servidores exija pouquíssimo rebalanceamento e permita escalabilidade linear — adicionar um nó comum equivale, em média, a multiplicar a capacidade agregada disponível. A combinação de design descentralizado e distribuição uniforme de dados sustenta o alto rendimento que tornou Cassandra popular em empresas como Netflix, Uber e Apple.
Para garantir resiliência, o sistema oferece replicação configurável por keyspace: o desenvolvedor escolhe o fator de réplica e quais datacenters devem receber cópias, obtendo tolerância a falhas de rack, zona ou região. O estado do cluster é mantido pelo protocolo Gossip, no qual, a cada segundo, cada nó troca informações de saúde e esquema com alguns pares, propagando rapidamente qualquer mudança. Em caso de indisponibilidade transitória, mecanismos como hinted handoff e reparos anti-entropia recuperam as réplicas divergentes, assegurando consistência eventual sem sacrificar disponibilidade. Essa combinação de replicação elástica, monitoramento distribuído e recuperação automática consolida Cassandra como solução de escolha para serviços que precisam permanecer online mesmo diante de falhas de rede ou equipamentos.
AP (Availability and Partition Tolerance) no Cassandra
O Cassandra é um banco de dados distribuído que prioriza Disponibilidade (A) e Tolerância a Partições (P) no teorema CAP, sacrificando um pouco a Consistência (C) em certos cenários.
1. Alta Disponibilidade (Availability - A)
- O Cassandra garante que os dados sempre estarão acessíveis, mesmo que alguns nós falhem.
- Ele replica os dados em múltiplos nós (configurável pelo fator de replicação).
- Se um nó estiver inativo, as requisições são redirecionadas para outros nós que contenham a réplica dos dados.
2. Tolerância a Partições (Partition Tolerance - P)
- O Cassandra lida bem com falhas de rede (partições), mantendo a operação mesmo que alguns nós fiquem isolados.
- Ele usa um modelo peer-to-peer (sem nó mestre), onde todos os nós são iguais, evitando um ponto único de falha.
- Em caso de partição, o Cassandra permite leituras e escritas em nós disponíveis, resolvendo inconsistências depois (via mecanismos como hinted handoff e read repair).
3. Consistência Eventual (Trade-off de Consistência no CAP)
- Por padrão, o Cassandra oferece consistência eventual, onde as atualizações se propagam assincronamente entre os nós.
- Porém, é possível ajustar o nível de consistência por operação (ex: QUORUM, ALL, ONE) para equilibrar entre disponibilidade e consistência.
- Ferramentas como Read Repair e Anti-Entropy ajudam a sincronizar dados gradualmente após inconsistências temporárias.
Vantagens do Cassandra DB
O Apache Cassandra tem como uma de suas grandes vantagens a sua disponibilidade e tolerância a falhas, pois ele garante que os dados estarão acessíveis mesmo em cenários de possíveis falhas, como falha de hardware ou de rede. Isso é possível pois o Apache Cassandra utiliza uma arquitetura peer-to-peer, onde todos os nós tem a mesma importância. Quando um nó falha, outro nó assume o seu lugar, impedindo que o sistema falhe, ou que haja gargalos na consulta. Como não há um nó central, não há um único ponto de falha, o que garante que o sistema sempre se mantenha disponível.
Outra grande vantagem do Apache Cassandra é que é um sistema open-source. Devido a isso, ele oferece uma grande liberdade, flexibilidade e custo reduzido, já que não é necessário pagar uma licença para utilizá-lo. Sua licença facilita a integração do sistema com outras tecnologias, além de garantir uma maior segurança, já que falhas podem ser identificadas e corrigidas pela própria comunidade
Além disso, o Apache Cassandra tem alta escalabilidade horizontal, em que cada nó adicional aumenta a capacidade de processamento, permitindo manter uma alta taxa de transferência mesmo com volumes muito grandes de informação. Essa escalabilidade é alcançada por meio do uso de uma arquitetura peer-to-peer, particionamento automático de dados e alta elasticidade na adição de novos nós
Não somente isso, mas essa database usa o modelo wide-column e possui um modelo flexível de dados, ou seja, armazena os dados em famílias de colunas, o que permite com uma grande variedade de dados, sejam estruturados, semi-estruturados e até mesmo não estruturados. O Apache Cassandra não exige um esquema fixo, mas oferece a possibilidade de usar uma linguagem própria (Cassandra Query Language - CQL) que se assemelha ao SQL, o que facilita o uso de quem já sabe usar modelos relacionais de banco de dados.
Por fim, semelhante ao mongoDB, essa database, mesmo que siga o teorema CAP, pode ajustar quais características são priorizadas. Por padrão a disponibilidade e tolerância à partição são favorecidas, mas é possível fazer com que dê mais prioridade à consistência, exigindo confirmação de escrita em diferentes nós.
Desvantagens do Cassandra DB
Por outro lado, o Cassandra também tem diversas desvantagens. As principais delas são:
Complexidade de Modelagem de Dados:A modelagem de dados no Cassandra é orientada pela consulta, o que significa que as tabelas devem ser projetadas com base nas queries que serão executadas. Isso pode ser um desafio para quem está acostumado com o modelo relacional.
Consistência Eventual:O Cassandra prioriza a disponibilidade e tolerância aos particionamentos. Portanto, a consistência não pode ser totalmente garantida.
Falta de Transações ACID:O Cassandra não suporta transações multi-operações no estilo ACID (Atomicidade, Consistência, Isolamento, Durabilidade) que são padrão em bancos relacionais. Por exemplo, o Cassandra garante atomicidade apenas para operações em uma única linha. Isso significa que todas as atualizações em uma única linha serão bem-sucedidas ou falharão juntas. No entanto, não há como garantir que duas operações em linhas diferentes ocorram de forma atômica.
Consultas Limitadas:Consultas complexas com JOINs e agregações não são nativamente suportadas. Para relacionar dados, você precisa duplicá-los em diferentes tabelas . A manutenção desses dados duplicados é manual e pode se tornar complexa.
Agregação por partição: As funções de agregação rodam apenas no nível de uma partição. Para agregar dados de todo o banco, seria necessário executar a agregação em cada partição individualmente e depois somar os resultados na aplicação.
Aplicações
Por sua alta escalabilidade e tolerância a falhas, o Cassandra possui diversas usabilidades e foi adotado por grandes empresas, sendo hoje o segundo DB NoSQL, atrás apenas do Mongodb.
Dentre As aplicações e empresas que utilizam o Cassandra temos:
- Redes sociais: Reddit, Twitter, Instagram
- Uso: Armazenamento de postagens, comentários, curtidas, seguidores e notificações em tempo real.
- Séries temporais: Nasa, Accenture, Globo.com, SPC Brasil
- Uso: Cassandra é eficiente para gravar e consultar dados organizados por tempo, como métricas, logs de servidores, dados de sensores, e dados analíticos.
- Segurança da informação: Cisco, PagSeguro
- Uso: Armazenamento de logs de segurança, eventos de rede, alertas de intrusão, e dados de análise comportamental.
- E-commerces: Ebay, Luiza Labs (Magazine Luiza)
- Uso: Armazenamento de catálogos de produtos, histórico de compras, e sessões de usuário.
- Streaming/Sistemas de recomendação: Netflix, Instagram, Twitter, Spotify
- Uso: Sistemas de recomendação usam Cassandra para armazenar históricos de consumo e preferências dos usuários, permitindo sugestões em tempo real.
- Bancos/Detecção de fraudes: Goldman Sachs, PagSeguro, SPC Brasil
- Uso: Processamento de transações financeiras em tempo real, monitoramento de fraudes, e armazenamento de logs de acesso e eventos
- IOT/Rastreamento em tempo real: Apple, Uber
- Uso: Armazenamento de grandes volumes de dados de sensores, logs de eventos e localizações em tempo real
Alguns exemplos práticos:
Uber, por exemplo, usa Cassandra para rastrear localização de motoristas e passageiros com alta disponibilidade e baixa latência.
A Netflix utiliza Cassandra para gerenciar catálogos, preferências de usuário, e registros de visualização.
A NASA utiliza Cassandra para armazenar dados contínuos de sondas ou satélites.