• Like
Cassandra - Eine Einführung
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Cassandra - Eine Einführung

  • 2,555 views
Published

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 …

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.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,555
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
16
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. TWIMPACT: twimpact.jpLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  • 22. TWIMPACT: twimpact.comLinuxTag Berlin, 13. 5. 2011 (c) 2011 by Mikio L. Braun @mikiobraun, blog.mikiobraun.de
  • 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. 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. 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. 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. 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. Ü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. 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. 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. 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. 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. 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. 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. 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