Referat zum Thema Apache Cassandra im Rahmen des Kurses Sichere Systeme an der Hochschule München.
Presentation about Apache Cassandra within the class Secure Systems at University of Applied Sciences Munich (in german language)
4. • Verteilte spaltenorientierte NoSQL Datenbank
• Entwickelt bei Facebook
• Open Source: 2008 (github.com/apache/cassandra)
• Aktuelle Version: 2.1.2 (Stand: 13.Januar 2015)
• Kein Master = Gleichwertige Nodes
• API
• CQL (Cassandra Query Language)
• Apache Thrift
• Treiber
• Java, Python, Ruby, NodeJS, C#
4
Apache Cassandra
A
D B
C
Cassandra Node
r/w
r/w
5. • SQL: Structured Query Language
• Syntax für Abfragen auf relationale Datenbanken
• Beispiele: MySql, MsSQL Server, Postgres
• NoSQL: Not Only SQL (seit 2009)
• Sammelbegriff für nicht relationale Datenbanken
• Weitere Unterteilungen
5
Exkurs: NoSQL
Typ Beispiele
Spaltenorientiert Cassandra, HBase
Dokumentenbasiert MongoDB, CouchDB
Key-Value Store Redis, Memcache
Graph DB Neo4j
6. • Bietet horizontale lineare Skalierbarkeit
• Größte produktive Installationen
• Apple: 75T Nodes, 10 PB, 1000+ Cluster, Mehrere Millionen Op/Sek
• Netflix: 2,7T Nodes, 420 TB, über 1 Billion Op/Tag
• Easou: 270 Nodes, 300 TB, 800 Millionen Anfragen/Tag
• Ebay: 100 Nodes, 250 TB
6
Apache Cassandra
http://www.datastax.com/documentation/cassandra/2.0/cassandra/images/intro_cassandra.png
9. • Gegründet: April 2010 von Jonathan Ellis
• Enterprise Support für Apache Cassandra
• ~80% der Commits auf Github
• DataStax Enterprise
• Apache Cassandra + Extra features
• Datastax Community (frei verfügbar)
• OpsCenter (GUI)
• DevCenter (Daten Modellierung)
9
Apache Cassandra
http://www.datastax.com/wp-content/themes/datastax-2013/images/opscenter/opsc4-ring-view-c-hadoop-solr.jpg
Datastax
11. • Gesetzmäßigkeit für verteilte Systeme (2002 MIT/Boston)
• Cassandra
• bietet A + P
• bessere Konsistenz gegen höhere Latenz
11
Cassandra Architektur
Konsistenz
Verfügbarkeit Partitionstoleranz
C
A P
Ein verteiltes System kann nur zwei der drei Eigenschaften Konsistenz,
Verfügbarkeit sowie Partitionstoleranz zur selben Zeit gewährleisten
Theoretische Grundlagen: CAP - Theorem
12. • Quelle: Amazon (Oktober 2007)
• Problem: Notwendigkeit für ~100% Verfügbarkeit
• Lösung:
• Partitionierung der Daten auf 1-n gleichwertige Nodes (masterless)
• Gleichmäßige Verteilung via Consistent Hashing
• Hohe Verfügbarkeit mittels n * Replikation der Daten
• Intra-Cluster Kommunikations Protokoll (Gossip)
12
Cassandra Architektur
“[…] even if disks are failing, network routes are flapping, or data centers are
being destroyed by tornados […]”
Theoretische Grundlagen: Dynamo Paper
13. • Quelle: Google (November 2006)
• Problem: Skalierung von massiven Datenmengen (PB)
• Lösung:
• Einfaches Datenmodell: row-key—> columns (keine Relationen)
• Logische Strukturierung in ColumnFamilies (analog SQL: Table)
• Persistenz: n * SSTable / ColumnFamily
• Caching pro ColumnFamily:
• Scan Cache: Index über Spalten in SSTable
• Block Cache: Ganze Zeile im RAM
13
Cassandra Architektur
column1 column2
row-key-1 x
row-key-2 y
Theoretische Grundlagen: Big Table Paper
14. • Quelle: Google (November 2006)
• Problem: Skalierung von massiven Datenmengen (PB)
• Lösung:
• Einfaches Datenmodell: row-key—> columns (keine Relationen)
• Logische Strukturierung in ColumnFamilies (analog SQL: Table)
• Persistenz: n * SSTable / ColumnFamily
• Caching pro ColumnFamily:
• Scan Cache: Index über Spalten in SSTable
• Block Cache: Ganze Zeile im RAM
13
Cassandra Architektur
column1 column2
row-key-1 x
row-key-2 y
Theoretische Grundlagen: Big Table Paper
RAM
15. • Quelle: Google (November 2006)
• Problem: Skalierung von massiven Datenmengen (PB)
• Lösung:
• Einfaches Datenmodell: row-key—> columns (keine Relationen)
• Logische Strukturierung in ColumnFamilies (analog SQL: Table)
• Persistenz: n * SSTable / ColumnFamily
• Caching pro ColumnFamily:
• Scan Cache: Index über Spalten in SSTable
• Block Cache: Ganze Zeile im RAM
13
Cassandra Architektur
column1 column2
row-key-1 x
row-key-2 y
Theoretische Grundlagen: Big Table Paper
RAM
RAM
24. • Design: Festplatten werden ausfallen
• Lösung: Replication Factor (RF = N) pro Keyspace
• Strategien bestimmen Ort der Kopien (Replica Set)
• SimpleStrategy:
• Einfache Verteilung von N-1 Kopien auf die nächsten Nodes im Ring
• NetworkTopologyStrategy:
• Zuordnung der Nodes zu Datacenter (DC) und Rack
• Verteilung von N-1 Kopien unter Beachtung der Netzwerk Topology
• Vermeidung der Speicherung von Kopien im selben Rack
• Verteilung der Kopien auf weitere Datencenter
21
Daten-Replikation
Übersicht
26. • Beispiel: SimpleStrategy (RF = 2)
22
Daten-Replikation
A
D B
C
Daten
Daten
Kopie
nächster Node
in Uhrzeigerrichtung
Simple Strategy
Coordinator Node
27. • Beispiel: NetworkTopologyStrategy (RF = DC1:2)
23
Daten-Replikation
A
D B
C
Daten
DC1
Rack 1 Rack 2
A C
B D
NetworkTopologyStrategy
Coordinator Node
28. • Beispiel: NetworkTopologyStrategy (RF = DC1:2)
23
Daten-Replikation
A
D B
C
Daten
Daten
Kopie
DC1
Rack 1 Rack 2
A C
B D
nächster Node
im anderen Rack
NetworkTopologyStrategy
Coordinator Node
29. • Beispiel: NetworkTopologyStrategy (RF = DC1:2, DC2:2)
24
Daten-Replikation
Daten
A
D B
C
DC1 DC2
Rack 1 Rack 2 Rack 1 Rack2
A C E G
B D F H
NetworkTopologyStrategy
E
H F
G
DC1 DC2
Coordinator Node
30. • Beispiel: NetworkTopologyStrategy (RF = DC1:2, DC2:2)
24
Daten-Replikation
Daten
A
D B
C
DC1 DC2
Rack 1 Rack 2 Rack 1 Rack2
A C E G
B D F H
NetworkTopologyStrategy
E
H F
G
DC1 DC2
Coordinator Node
31. • Hinted Handoff
• Kurzfristige Lösung zur Wiederherstellung von Daten
• Bei Ausfall eines Nodes “merkt” sich ein anderer Node die Daten
• Wenn Node wieder verfügbar ist werden gemerkte Daten geschrieben
25
Daten-Replikation
Daten
A
D B
C
Ausfall Replica
Set
Ausfall eines Nodes
Coordinator Node
32. • Hinted Handoff
• Kurzfristige Lösung zur Wiederherstellung von Daten
• Bei Ausfall eines Nodes “merkt” sich ein anderer Node die Daten
• Wenn Node wieder verfügbar ist werden gemerkte Daten geschrieben
25
Daten-Replikation
Daten
A
D B
C
Ausfall Replica
Set
Daten
Daten:Node A
Ausfall eines Nodes
Coordinator Node
X
33. • Hinted Handoff
• Kurzfristige Lösung zur Wiederherstellung von Daten
• Bei Ausfall eines Nodes “merkt” sich ein anderer Node die Daten
• Wenn Node wieder verfügbar ist werden gemerkte Daten geschrieben
25
Daten-Replikation
Daten
A
D B
C
Ausfall Replica
Set
Daten
Daten:Node A
Online
B
C
Replica
Set
A
D
Ausfall eines Nodes
Coordinator Node
X Daten
34. • Manuelle Reparatur
• Langfristige Lösung zur Wiederherstellung von Daten
• Reparatur mit Hilfe des lokalen Werkzeugs “nodetool”
• Last gleichmäßig auf alle Nodes aus Replica Set verteilt
26
Daten-Replikation
B
C
Replica Set
A
Online
Daten
D
Ausfall eines Nodes
#NodeA:~ nodetool repair
Daten
36. • Konzept: Eventuell Konsistent (Eventual Consistency)
• Konfigurierbare Anforderungen an Konsistenz pro Request
• Lesen, Schreiben (Updaten, Löschen)
• Lesen: Anzahl der Nodes die kontaktiert werden
• Schreiben: Anzahl der Nodes bei dehnen Schreiben erfolgreich
28
Konsistenz
Übersicht
Level Erläuterung
ALL
Alle Nodes aus einem Replica Set
müssen antworten
QUORUM
Die Mehrheit der Nodes aus
einem Replica Set müssen
antworten
ONE
Mindestens ein Node aus einem
Replica Set muss antworten
37. • Beispiel: Schreiben, Consistency Level = ONE
• Antwort eines Nodes wird abgewartet
• Gesamtlaufzeit = 1ms
29
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
38. • Beispiel: Schreiben, Consistency Level = ONE
• Antwort eines Nodes wird abgewartet
• Gesamtlaufzeit = 1ms
29
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
39. • Beispiel: Schreiben, Consistency Level = ONE
• Antwort eines Nodes wird abgewartet
• Gesamtlaufzeit = 1ms
29
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
1ms
20ms
3ms
40. • Beispiel: Schreiben, Consistency Level = QUORUM
• Antworten der Mehrheit Nodes werden
abgewartet
• Gesamtlaufzeit = 3ms
30
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
41. • Beispiel: Schreiben, Consistency Level = QUORUM
• Antworten der Mehrheit Nodes werden
abgewartet
• Gesamtlaufzeit = 3ms
30
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
42. • Beispiel: Schreiben, Consistency Level = QUORUM
• Antworten der Mehrheit Nodes werden
abgewartet
• Gesamtlaufzeit = 3ms
30
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
1ms
20ms
3ms
43. • Beispiel: Schreiben, Consistency Level = ALL
• Antworten aller Nodes werden abgewartet
• Ausfall eines Replika-Nodes
= Kein Schreiben möglich
• Gesamtlaufzeit = 20ms
31
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
44. • Beispiel: Schreiben, Consistency Level = ALL
• Antworten aller Nodes werden abgewartet
• Ausfall eines Replika-Nodes
= Kein Schreiben möglich
• Gesamtlaufzeit = 20ms
31
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
45. • Beispiel: Schreiben, Consistency Level = ALL
• Antworten aller Nodes werden abgewartet
• Ausfall eines Replika-Nodes
= Kein Schreiben möglich
• Gesamtlaufzeit = 20ms
31
Konsistenz
Schreiben
A
D B
C
Data
Replica Set
1ms
20ms
3ms
46. • Beispiel: Lesen, Consistency Level = ONE
• Ein Node wird kontaktiert
• Auswahl des Nodes je nach Auslastung
• Gossip liefert Information über
Auslastung
32
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
47. • Beispiel: Lesen, Consistency Level = ONE
• Ein Node wird kontaktiert
• Auswahl des Nodes je nach Auslastung
• Gossip liefert Information über
Auslastung
32
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
48. • Beispiel: Lesen, Consistency Level = ONE
• Ein Node wird kontaktiert
• Auswahl des Nodes je nach Auslastung
• Gossip liefert Information über
Auslastung
32
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
4ms
Data
49. • Beispiel: Lesen, Consistency Level = QUORUM
• Mehrheit der Nodes wird kontaktiert
• Eine Daten Anfrage
• Rest sind Digest Anfragen
• Bei Inkonsistenz “read-repair”
33
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
50. • Beispiel: Lesen, Consistency Level = QUORUM
• Mehrheit der Nodes wird kontaktiert
• Eine Daten Anfrage
• Rest sind Digest Anfragen
• Bei Inkonsistenz “read-repair”
33
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
Digest Request
Data Request
51. • Beispiel: Lesen, Consistency Level = QUORUM
• Mehrheit der Nodes wird kontaktiert
• Eine Daten Anfrage
• Rest sind Digest Anfragen
• Bei Inkonsistenz “read-repair”
33
Konsistenz
Lesen
A
D B
C
Anfrage
Replica Set
10ms
Data
Digest Request
Data Request
Hash(Data)
6ms
56. • Authentifikation
• Wer darf sich zu einem Node verbinden
• Standardmäßig nicht aktiviert (AllowAllAuthenticator)
• Einfache Benutzer/Passwort Authentifikation konfigurierbar
(PasswordAuthenticator)
• Erweitert: Eigener Authentifikator (Erweiterung Interface IAuthenticator)
• Authorisierung
• Auf was (Keyspaces, Tabellen) darf man auf einem Node zugreifen
• Standardmäßig nicht aktiviert (AllowAllAuthorizer)
• “Object Permission” Authorisierung konfigurierbar (CassandraAuthorizer)
• Erweitert: Eigene Authorisierung (Erweiterung Interface IAuthorizer)
38
Sicherheit
57. • Client zu Node Verschlüsselung
• Standardmäßig deaktiviert
• Verschlüsselung über SSL konfigurierbar
• Voraussetzung (auch für Node zu Node):
• Erstellung von Zertifikaten auf allen Nodes
• Verteilung der öffentlich Schlüssel auf alle Nodes
• Client Unterstützung
• Node zu Node Verschlüsselung
• Standardmäßig deaktiviert
• Für verschiedene Ebenen konfigurierbar
• ALL, NONE, DC, RACK
39
Sicherheit