NoSQL CGN: Riak (01/2012)

2.198 Aufrufe

Veröffentlicht am

Ein Big-Picture zu Riak am 4.1.2012 auf der NoSQL UG Cologne (nosql-cologne.org)

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
2.198
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
663
Aktionen
Geteilt
0
Downloads
8
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

NoSQL CGN: Riak (01/2012)

  1. 1. An 10,000’ overview of a Dynamo-style KV-Store Sebastian Cohnen @tisba / tisba.de
  2. 2. About Me• Freier Entwickler❤ Ruby/Rails & node.js❤ Performance & Scalability Engineering❤ Distributed Load Testing❤ CouchDB, Redis & Riakund ebenfalls interessiert an Erlang, AMQP, ...
  3. 3. What is Riak?Pronounced “REE-ack”A DatabaseA Data StoreA key/value storeA “NoSQL” databaseSchemaless and data-type agnostic Quelle: http://wiki.basho.com/What-is-Riak%3F.html
  4. 4. What (else) is Riak?As distributed as you want and need it to beScalableWritten (primarily) in ErlangUsed by Fortune 100 CompaniesUsed by startupsNot the best fit for every project and application Quelle: http://wiki.basho.com/What-is-Riak%3F.html
  5. 5. ...in short?verteilter KV-Store, horizontal skalierbarder Grad an C, A und P sind wählbaraustauschbare Storage Backends (pro Bucket)Zugriff via HTTP/REST oder Protocol Buffersagnostisch zum Inhalt
  6. 6. Basic Concepts
  7. 7. ClusteRRiak besteht aus einem Cluster von Nodesein Cluster bildet einen Keyspace / KeyRingjede Riak Node besteht aus einer Anzahl vonVNodes (virtual node)Consistant Hashing bestimmt die Positionen vonVNodes und Keys im Ring
  8. 8. http://wiki.basho.com/What-is-Riak%3F.html
  9. 9. NodeJede Node in Riak sind identisch, es gibt keine RollenJede Node in Riak darf ausfallenEine Node wird zum Koordinator, wenn ein Clienteine Anfrage an ihn richtetEs können jederzeit Nodes hinzugefügt oder entferntwerden
  10. 10. Bucketein Bucket ist eine logische Komponente, die wie einNamespace zu sehen istein Bucket kann Eigenschaften haben, z.B.Konfiguration für ein Backend und Default-Werte fürQuorenDer Name eines Buckets gehört mit zum Key einesObjektes in Riak
  11. 11. ConflictsLast-Write-Wins: basiert auf Timestamps undsorgt für ein “fire-and-forget” Verhalten(last_write_wins)Vector Clocks, wobei Riak alle Siblings zurVerfügung stellt (allow_mult)Mittels Read Repair kann Riak beim Lesen vonObjekten Konsitenz unter den Nodes erzeugen
  12. 12. what else?Ring Informationen werden mit einem GossipProtocol im Cluster verteilt (Ring Status, PendingChanges, Partition Ownership, ...)Hinted Handoff wird benutzt, um Daten von einer“Vertreter-Node” zu einer ehemals nicht verfügbarenNode zu übertragenPre- und Post-Commit HooksLinks & Link-walkingLuwak
  13. 13. Tuning CAP in Riak
  14. 14. Tuning RiakRiak erlaubt es Konsistenz,Verfügbarkeit undPartitionstolleranz zu einem gewissen Grad zukontrollierenDiese Einstellungen können auf Bucket oder Key/Objekt-Ebene stattfindenUnterschiedliche Daten können so mitunterschiedlichen Anforderungen im selben Clustergespeichert werden
  15. 15. QuorenKonfigurierbar pro Bucket oder pro ObjektN - Anzahl der ReplikasW - Write QuorumR - Read Quorum
  16. 16. Examplegeringer R-Wert, geringere Read-Latency, wenigerKonsistenzgeringer W-Wert, geringere Write-LatencyR + W > N, starke Konsistenz (z.B. 2 + 3 > 4 oder 4 +3 > 5)...
  17. 17. More QUorumsDW - Durable Write Quorum Mindestanzahl persistenter SchreiboperationenPW & PR - Primary Replica Write/Read Quorum Mindestanzahl von verfügbaren primären Replikas
  18. 18. Data Storage
  19. 19. Data StorageDie Keys von Objekten werden zusammen mit ihremBucketnamen gehasht, um ihre Position im Ringausfindig zu machen und zustände Nodes zu ermittelnWichtig: Buckets sind nur logische Einheiten undbilden einen Namensraum
  20. 20. Store an Object [1]1. Cluster mit 8 Nodes, 64 Partitionen2. POST oder PUT an NODE1/buckets/my_bucket[/ my_key] mit Parameter: N=3, W=2, DW=13. Node1 wird zum Koordinator und ermittelt, wer für die drei Replikas zuständig ist, leitet den Schreibrequest weiter und wartet auf Antwort
  21. 21. Store Object [2]4. Node 3, 5 und 8 erhält den Request Node 3 meldet Annahme des Requests an Node 1 Node 5 meldet erfolgreiche Persistierung an Node 15. Node 1 antwortet dem Client den Erfolg der Operation6. Node 8 beendet ebenfalls erfolgreich die Operation
  22. 22. Store an ObjectPOST oder PUT an /buckets/my_bucket[/my_key]Header Content-Type X-Riak-Vclock X-Riak-Meta-* X-Riak-Index-* Link
  23. 23. Fetch an ObjectGET NODE1/buckets/my_bucket/my_key mitParameter: R=2Node 1 ermittelt zuständige Nodes und leitet dieAnfrage weiterWenn mindestens zwei Nodes eine konsistenteAntwort geben, ist die Leseoperation erfolgreich
  24. 24. Querying Data
  25. 25. Querying DataEs gibt prinzipiell drei Möglichkeiten MapReduce Riak Serach Riak 2i
  26. 26. Map ReduceMap ReduceKey Filter (z.B. begins_with, between,Transformationen, ...)Abfragen in Erlang oder Javascript, vordefiniert oderzur Requestzeitgut für Datenanalyse
  27. 27. Riak SearchApache Lucene/Solr like VolltextsucheProgrammierbare Tokenizer, ...Ergebnis sind Keys, die z.B. als Input für MR genutztwerden könnenrelativ Ressourcen intensivIndex wird im Cluster gespeichert (Token-basiert)
  28. 28. Riak 2i2i = Secondary Indexsimpler, Nutzer-definierter lexikalischer IndexErgebniss ist ebenfalls als Input für MR verwendbarweniger Ressourcen intensiv, aber keine FTSIndex-Informationen werden zusammen mit demObjekt im Cluster gespeichert
  29. 29. ResourcesInfos zu Riak / Dokumentation: http://wiki.basho.com/Riak Handbook, Mathias Meyer (eBook)gute Videos,Vorträge, usw: http://basho.com/resources
  30. 30. Thanks! Q & A? ? Sebastian Cohnen @tisba

×