Cassandra – Eine Einführung                                  Mikio L. Braun                                    Leo Jugel  ...
Was ist NoSQL? ●   Für viele Webanwendungen sind “klassische     Datenbanken” nicht die richtige Wahl:      ●   Datenbank ...
NoSQL im VergleichKlassische Datenbanken                           NoSQLMächtige Querysprache                            S...
Brewers CAP Theorem ●   CAP: Consistency, Availability, Partition     Tolerance      ●   Consistency: Man erhält keine ver...
Homepage                       http://cassandra.apache.orgProgrammiersprache JavaGeschichte                     ● Bei Face...
Version 0.6.x und 0.7.x ●   Wichtigsten Änderungen in 0.7.x      ●   Konfigurationsdateien in YAML statt XML      ●   Sche...
Inspirationen für Cassandra ●   Amazon Dynamo      ●   Cluster ohne dezidierte Masterknoten      ●   Peer-to-Peer Erkennun...
Installation ●   tar.gz von     http://cassandra.apache.org/download/     herunterladen ●   In Verzeichnis auspacken ●   ....
Konfiguration ●   Datenbank      ●   Version 0.6.x: conf/storage-conf.xml      ●   Version 0.7.x: conf/cassandra.yaml ●   ...
Cassandras DatenmodellKeyspace (= Datenbank)                                     Bytearrays  Column Family (= Tabelle) Row...
Beispiel: Einfacher Objektspeicher   class Person {       long id;       String name;       String affiliation;   }       ...
Beispiel: Index   class Page {       long id;       …                                                                  Dat...
Benötigt man                    SuperColumnFamilies? ●   Meistens kann man SuperColumnFamilies     durch mehrere ColumnFam...
Cassandras Architektur                             MemTable                                Leseoperation                  ...
Cassandras API  ●   THRIFT-basierte APILeseoperationen                                          Schreiboperationenget     ...
Cassandra im Cluster ●   Völlig gleichberechtigte Knoten ●   Zum Bootstrappen ein Seed nötig            “Storage Proxy”   ...
Konsistenzstufen und                        Replikationsfaktor●Replikationsfaktor: Auf wie vielen Knoten werdendie Daten g...
Verhalten bei Ausfall●   Solange Anforderungen der Konsistenzstufe erfüllt    werden können, ist alles in Ordnung.●   Hint...
BibliothekenPython        Pycassa: http://github.com/pycassa/pycass              Telephus: http://github.com/driftx/Teleph...
TWIMPACT: Eine Anwendung ●   Echtzeitanalyse von Twitter ●   Trendanalyse basierend auf Retweets ●   Sehr hohes Datenaufko...
TWIMPACT: twimpact.jpLinuxTag Berlin, 13. 5. 2011   (c) 2011 by Mikio L. Braun   @mikiobraun, blog.mikiobraun.de
TWIMPACT: twimpact.comLinuxTag Berlin, 13. 5. 2011   (c) 2011 by Mikio L. Braun   @mikiobraun, blog.mikiobraun.de
Anwendungsprofil ●   Informationen über Tweets, User, Retweets ●   Textmatching für nicht-API-Retweets ●   Retweetshäufigk...
Praktische Erfahrungen mit                      Cassandra ●   Sehr stabiler Betrieb ●   Leseoperationen verhältnismäßig te...
Performance durch Multithreading ●   Multithreading bringt erheblich mehr     Performance. ●   Multithreading ohne Transak...
Performance durch Multithreading ●   Multithreading bringt erheblich mehr     Performance. ●   Multithreading ohne Transak...
Cassandra Tuning ●   Tuningmöglichkeiten:      ●   Größe der Memtables, Thresholds für Flushes      ●   Größe des JVM Heap...
Übersicht über die GC der JVM                                                                     Old Generation          ...
Cassandras Speicherverhalten            Flush                                              Memtables,                     ...
Cassandras Speicherverhalten●   Memtables überleben extrem lange (mehrere    Stunden)      ●   Landen in der Old Generatio...
Die Auswirkungen von GC und                Compaction                                                       Große         ...
Cluster und Einzelknoten●   Im Vergleich:    ●   1 Cluster mit six-core CPU und RAID 5 aus 6 Festplatten    ●   4 Cluster ...
Alternativen ●   MongoDB, CouchDB, redis, sogar     memcached... . ●   Persistenz: Festplatte oder RAM? ●   Replikation: M...
Fazit: Cassandra ●   Gut skalierende Plattform ●   Aktive Benutzer- und Entwicklercommunity ●   Leseoperationen relativ te...
Links●   Apache Cassandra http://cassandra.apache.org●   Apache Cassandra Wiki    http://wiki.apache.org/cassandra/FrontPa...
Nächste SlideShare
Wird geladen in …5
×

Cassandra - Eine Einführung

3.520 Aufrufe

Veröffentlicht am

Mein Talk, den ich auf dem LinuxTag 2011 gegeben habe. Ich geben ein Übersicht über Cassandra und erzähle von Erfahrungen, die wir mit Cassandra gemacht haben, als wir es zur Echtzeitanalyse von Twitterdaten verwendet haben.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.520
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
263
Aktionen
Geteilt
0
Downloads
24
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Cassandra - Eine Einführung

  1. 1. Cassandra – Eine Einführung Mikio L. Braun Leo Jugel TU Berlin, twimpact LinuxTag Berlin 13. Mai 2011LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  2. 2. Was ist NoSQL? ● Für viele Webanwendungen sind “klassische Datenbanken” nicht die richtige Wahl: ● Datenbank im Wesentlichen nur Speicher für Objekte ● Konsistenz nicht unbedingt erforderlich ● Viele gleichzeitige ZugriffeLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  3. 3. NoSQL im VergleichKlassische Datenbanken NoSQLMächtige Querysprache Sehr einfache QueryspracheSkaliert durch größere Server Skaliert auf einem Cluster(“Scaling Up”) (“Scaling Out”)Änderungen des Datenbankschemas Kein festes DatenbankschemaaufwendigACID: Atomicity, Consistency, Isolation, In der Regel nur “eventually consistent”.DurabilityTransaktionen, Locking, etc. In der Regel keine Unterstützung für Transaktionen o.ä.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  4. 4. Brewers CAP Theorem ● CAP: Consistency, Availability, Partition Tolerance ● Consistency: Man erhält keine veralteten Daten. ● Availability: Lese/Schreiboperationen sind immer möglich. ● Partition Tolerance: Bei Netzwerk oder Rechnerausfällen bleiben die restlichen Garantien erhalten. ● Man kann nur jeweils zwei davon garantieren!Gilbert, Lynch, Brewers conjecture and the feasibility of consistent, available, partition-tolerant web services, ACM SIGACT News, Volume 33, Issue 2, June 2002LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  5. 5. Homepage http://cassandra.apache.orgProgrammiersprache JavaGeschichte ● Bei Facebook zur Indexsuche entwickelt, im Juli 2008 als Open Source freigegeben ● Seit März 2009 Apache Incubator ● Seit Februar 2010 Apache Top-LevelHaupteigenschaften ● strukturierter Key-Value-Store ● “eventually consistent” ● völlig gleichberechtigte Knoten ● Cluster ohne Neustart modifizierbarSupport DataStax (http://datastax.com)Lizenz Apache 2.0LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  6. 6. Version 0.6.x und 0.7.x ● Wichtigsten Änderungen in 0.7.x ● Konfigurationsdateien in YAML statt XML ● Schemamodifikationen (ColumnFamilies) im laufenden Betrieb ● Erste Ansätze für Sekundärindexe. ● Allerdings auch anfängliche StabilitätsproblemeLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  7. 7. Inspirationen für Cassandra ● Amazon Dynamo ● Cluster ohne dezidierte Masterknoten ● Peer-to-Peer Erkennung, HintedHintoff, etc. ● Google BigTable ● Datenmodell ● Benötigt zentrale Masterknoten ● Bietet wesentlich mehr Möglichkeiten der Kontrolle: – welche Daten gemeinsam gespeichert werden sollten – On-the-fly Kompression, etc.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  8. 8. Installation ● tar.gz von http://cassandra.apache.org/download/ herunterladen ● In Verzeichnis auspacken ● ./conf enthält Konfigurationsdateien ● ./bin/cassandra -f startet Cassandra, Ctrl-C zum stoppenLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  9. 9. Konfiguration ● Datenbank ● Version 0.6.x: conf/storage-conf.xml ● Version 0.7.x: conf/cassandra.yaml ● JVM Parameter ● Version 0.6.x: bin/cassandra.in.sh ● Version 0.7.x: conf/cassandra-env.shLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  10. 10. Cassandras DatenmodellKeyspace (= Datenbank) Bytearrays Column Family (= Tabelle) Row key {name1: value1, name2: value2, name3: value3, ...} Column Strings Sortiert nach Namen! Sortierung hängt vom Partitioner ab! Super Column Family key key {name1: value1, ...}LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  11. 11. Beispiel: Einfacher Objektspeicher class Person { long id; String name; String affiliation; } Felder in Bytearrays umwandeln Keyspace “MyDatabase”: ColumnFamily “Person”: “1”: {“id”: “1”, “name”: “Mikio Braun, “affiliation”: “TU Berlin”}LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  12. 12. Beispiel: Index class Page { long id; … Datenfelder der Objekte List<Links> links; } Keyspace “MyDatabase” ColumnFamily “Pages” class Link { “3”: {“id”: 3, …} long id; “4”: {“id”: 4, …} ... Sowohl für die Verlinkung, int numberOfHits; ColumnFamily “Links” als auch zum Indizieren! } “1”: {“id”: 1, “url”: …} “17”. {“id”: 17, “url”: …} ColumnFamily “LinksPerPageByNumberOfHits” “3”: { “00000132:00000001”, “000025: 00000017”: …} “4”: { “00000044:00000024”, … } Hier wird ausgenutzt, dass Columns nach Namen sortiert werden! Natürlich alles auf Bytearrayebene!LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  13. 13. Benötigt man SuperColumnFamilies? ● Meistens kann man SuperColumnFamilies durch mehrere ColumnFamilies ersetzen. ● Da die SuperColumnFamilies die Implementation und das Protokol verkomplizieren gibt es auch Stimmen, die sie ganz abschaffen wollen... .LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  14. 14. Cassandras Architektur MemTable Leseoperation Flush Speicher FestplatteSchreiboperation Commit Log SSTable SSTable SSTable Compaction! LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  15. 15. Cassandras API ● THRIFT-basierte APILeseoperationen Schreiboperationenget Einzelne Column insert Einzelne Columnget_slice Reihe von Columns batch_mutate Mehrere Columns inmultiget_slice Reihe von Columns in verschiedenen verschiedenen Rows Rowsget_count Anzahl von Columns remove Einzelne Columnget_range_slice Reihe von Columns in truncate Ganze Column einer Reihe von Rows Familyget_indexed_slices Reihe von Columns mit IndexSonstigelogin, describe_*, add/drop column family/keyspace erst in 0.7.x LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  16. 16. Cassandra im Cluster ● Völlig gleichberechtigte Knoten ● Zum Bootstrappen ein Seed nötig “Storage Proxy” Knoten Knoten Knoten Liest/schreibt gemäß Konsistenzstufe AnfrageLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  17. 17. Konsistenzstufen und Replikationsfaktor●Replikationsfaktor: Auf wie vielen Knoten werdendie Daten gespeichert?● Konsistenzstufen:KonsistenzlevelANY Ein Knoten hat die Operation bekommen, selbst im Fall von HintedHandoffONE Auf einem Knoten wurde die Operation ausgeführt.QUORUM Operation für die Mehrzahl der Knoten ausgeführt / Neuestes Resultat wird zurückgegebenLOCAL_QUORUM QUORUM im lokalen DatenzentrumGLOBAL_QUORUM QUORUM im globalen DatenzentrumALL Warte, bis alle Knoten die Operation ausgeführt haben.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  18. 18. Verhalten bei Ausfall● Solange Anforderungen der Konsistenzstufe erfüllt werden können, ist alles in Ordnung.● Hinted Handoff: ● Eine Schreiboperations für einen ausgefallenen Knoten wird auf einem anderen Knoten gemerkt. ● Diese Daten sind anschließend nicht lesbar!● Read Repair: ● Selbst nachdem die Leseoperation abgeschlossen ist, werden die Daten überprüft und ggf. aktualisiert.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  19. 19. BibliothekenPython Pycassa: http://github.com/pycassa/pycass Telephus: http://github.com/driftx/TelephusJava Datanucleus JDO:http://github.com/tnine/Datanucleus-Cassandra-Plugin Hector: http://github.com/rantav/hector Kundera http://code.google.com/p/kundera/ Pelops: http://github.com/s7/scale7-pelopsGrails grails-cassandra: https://github.com/wolpert/grails-cassandra.NET Aquiles: http://aquiles.codeplex.com/ FluentCassandra: http://github.com/managedfusion/fluentcassandraRuby Cassandra: http://github.com/fauna/cassandraPHP phpcassa: http://github.com/thobbs/phpcassa SimpleCassie: http://code.google.com/p/simpletools-php/wiki/SimpleCassieOder was selbstgebautes direkt auf THRIFT http://thrift.apache.org/ :)LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  20. 20. TWIMPACT: Eine Anwendung ● Echtzeitanalyse von Twitter ● Trendanalyse basierend auf Retweets ● Sehr hohes Datenaufkommen (mehrere Millionen Tweets am Tag, ca. 50/s)LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  21. 21. TWIMPACT: twimpact.jpLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  22. 22. TWIMPACT: twimpact.comLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  23. 23. Anwendungsprofil ● Informationen über Tweets, User, Retweets ● Textmatching für nicht-API-Retweets ● Retweetshäufigkeiten und Userimpact ● Operationsprofil: get_slice get get_slice batch_mutate insert batch_mutate remove (alle) (Bereich) (eine Row) Anteil 50.1% 6.0% 0.1% 14.9% 21.5% 6.8% 0.8% Dauer 1.1ms 1.7ms 0.8ms 0.9ms 1.1ms 0.8ms 1.2msLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  24. 24. Praktische Erfahrungen mit Cassandra ● Sehr stabiler Betrieb ● Leseoperationen verhältnismäßig teuer ● Multithreading bringt große Performanceverbesserung ● Relativ aufwendiges Tuning erforderlich ● Clusterbetrieb bringt nicht unbedingt Verbesserung ● Compaction führt zu bis zu 50% PerformanceeinbruchLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  25. 25. Performance durch Multithreading ● Multithreading bringt erheblich mehr Performance. ● Multithreading ohne Transaktionen/Locking? 64 32 16 8 4 2 1 Core i7, 4 cores (2 + 2 HT)LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  26. 26. Performance durch Multithreading ● Multithreading bringt erheblich mehr Performance. ● Multithreading ohne Transaktionen/Locking?LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  27. 27. Cassandra Tuning ● Tuningmöglichkeiten: ● Größe der Memtables, Thresholds für Flushes ● Größe des JVM Heaps ● Häufigkeit, Tiefe der Compaction ● Wo? ● MemTableThresholds etc. in conf/cassandra.yaml ● JVM Parameter in conf/cassandra-env.shLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  28. 28. Übersicht über die GC der JVM Old Generation Young Generation CMSInitiatingOccupancyFraction “Eden” “Survivors” Zusätzlicher Speicherverbrauch bis zu ein paar hundert MB Dutzende GB während der GCLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  29. 29. Cassandras Speicherverhalten Flush Memtables, Indices, etc.Memtablegröße: 128M, JVM Heap: 3G, #CF: 12 Compaction LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  30. 30. Cassandras Speicherverhalten● Memtables überleben extrem lange (mehrere Stunden) ● Landen in der Old Generation ● Bei GC müssen mehrere Dutzend GB aufgeräumt werden. ● Heap zu klein, oder GC zu spät ausgelöst  “GC storm”● Tradeoff: ● I/O Last vs. Speicherbrauch● Compaction nicht vernachlässigen!LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  31. 31. Die Auswirkungen von GC und Compaction Große GC CompactionLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  32. 32. Cluster und Einzelknoten● Im Vergleich: ● 1 Cluster mit six-core CPU und RAID 5 aus 6 Festplatten ● 4 Cluster mit six-core CPU mit RAID 0 aus 2 Festplatten● Einzelcluster lieferte konsistent 1,5-3 Mal mehr Performance.● Gründe: ● Overhead durch Netzwerkkommunikation/Konsistenzstufen, etc. ● Festplattenperformance ausschlaggebend. ● Cluster noch zu klein● Effektiv verfügbarer Plattenplatz: ● 1 Cluster: 6 * 500 GB = 3TB bei RAID 5 = 2.5 TB (83%) ● 4 Cluster: 4 * 1TB = 4TB bei Replikationsfaktor 2 = 2TB (50%)LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  33. 33. Alternativen ● MongoDB, CouchDB, redis, sogar memcached... . ● Persistenz: Festplatte oder RAM? ● Replikation: Master/Slave oder Peer-to-Peer? ● Sharding? ● Trend zu komplexeren Querysprachen (Javascript), Map-Reduce Operationen, etc.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  34. 34. Fazit: Cassandra ● Gut skalierende Plattform ● Aktive Benutzer- und Entwicklercommunity ● Leseoperationen relativ teuer ● Für optimale Leistung detailliertes Tuning nötig ● Je nach Anwendung “eventually consistent” und fehlende Transaktionen/Locking problematisch.LinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  35. 35. Links● Apache Cassandra http://cassandra.apache.org● Apache Cassandra Wiki http://wiki.apache.org/cassandra/FrontPage● DataStax Dokumentation für Cassandra http://www.datastax.com/docs/0.7/index● Mein Blog: http://blog.mikiobraun.de● Twimpact: http://beta.twimpact.comLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de

×