NoSQL CGN: Riak (01/2012)

download NoSQL CGN: Riak (01/2012)

If you can't read please download the document

  • date post

    05-Dec-2014
  • Category

    Technology

  • view

    1.683
  • download

    2

Embed Size (px)

description

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

Transcript of NoSQL CGN: Riak (01/2012)

  • 1. An 10,000 overview of a Dynamo-styleKV-StoreSebastian Cohnen @tisba / tisba.de

2. About Me Freier Entwickler Ruby/Rails & node.js Performance & Scalability Engineering Distributed Load Testing CouchDB, Redis & Riakund ebenfalls interessiert an Erlang, AMQP, ... 3. What is Riak?Pronounced REE-ackA DatabaseA Data StoreA key/value storeA NoSQL databaseSchemaless and data-type agnosticQuelle: http://wiki.basho.com/What-is-Riak%3F.html 4. What (else) isRiak?As distributed as you want and need it to beScalableWritten (primarily) in ErlangUsed by Fortune 100 CompaniesUsed by startupsNot the best t for every project and applicationQuelle: http://wiki.basho.com/What-is-Riak%3F.html 5. ...in short?verteilter KV-Store, horizontal skalierbarder Grad an C, A und P sind whlbaraustauschbare Storage Backends (pro Bucket)Zugriff via HTTP/REST oder Protocol Buffersagnostisch zum Inhalt 6. Basic Concepts 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. http://wiki.basho.com/What-is-Riak%3F.html 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 knnen jederzeit Nodes hinzugefgt oder entferntwerden 10. Bucketein Bucket ist eine logische Komponente, die wie einNamespace zu sehen istein Bucket kann Eigenschaften haben, z.B.Konguration fr ein Backend und Default-Werte frQuorenDer Name eines Buckets gehrt mit zum Key einesObjektes in Riak 11. ConflictsLast-Write-Wins: basiert auf Timestamps undsorgt fr ein re-and-forget Verhalten(last_write_wins)Vector Clocks, wobei Riak alle Siblings zurVerfgung stellt (allow_mult)Mittels Read Repair kann Riak beim Lesen vonObjekten Konsitenz unter den Nodes erzeugen 12. what else?Ring Informationen werden mit einem GossipProtocol im Cluster verteilt (Ring Status, PendingChanges, Partition Ownership, ...)Hinted Handoff wird benutzt, um Daten von einerVertreter-Node zu einer ehemals nicht verfgbarenNode zu bertragenPre- und Post-Commit HooksLinks & Link-walkingLuwak 13. Tuning CAP in Riak 14. Tuning RiakRiak erlaubt es Konsistenz,Verfgbarkeit undPartitionstolleranz zu einem gewissen Grad zukontrollierenDiese Einstellungen knnen auf Bucket oder Key/Objekt-Ebene stattndenUnterschiedliche Daten knnen so mitunterschiedlichen Anforderungen im selben Clustergespeichert werden 15. QuorenKongurierbar pro Bucket oder pro ObjektN - Anzahl der ReplikasW - Write QuorumR - Read Quorum 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. More QUorumsDW - Durable Write QuorumMindestanzahl persistenter SchreiboperationenPW & PR - Primary Replica Write/Read QuorumMindestanzahl von verfgbaren primren Replikas 18. Data Storage 19. Data StorageDie Keys von Objekten werden zusammen mit ihremBucketnamen gehasht, um ihre Position im Ringausndig zu machen und zustnde Nodes zu ermittelnWichtig: Buckets sind nur logische Einheiten undbilden einen Namensraum 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 fr die drei Replikas zustndig ist, leitet den Schreibrequest weiter und wartet auf Antwort 21. Store Object [2]4. Node 3, 5 und 8 erhlt 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. Store an ObjectPOST oder PUT an /buckets/my_bucket[/my_key]HeaderContent-TypeX-Riak-VclockX-Riak-Meta-*X-Riak-Index-*Link 23. Fetch an ObjectGET NODE1/buckets/my_bucket/my_key mitParameter: R=2Node 1 ermittelt zustndige Nodes und leitet dieAnfrage weiterWenn mindestens zwei Nodes eine konsistenteAntwort geben, ist die Leseoperation erfolgreich 24. Querying Data 25. Querying DataEs gibt prinzipiell drei Mglichkeiten MapReduce Riak Serach Riak 2i 26. Map ReduceMap ReduceKey Filter (z.B. begins_with, between,Transformationen, ...)Abfragen in Erlang oder Javascript, vordeniert oderzur Requestzeitgut fr Datenanalyse 27. Riak SearchApache Lucene/Solr like VolltextsucheProgrammierbare Tokenizer, ...Ergebnis sind Keys, die z.B. als Input fr MR genutztwerden knnenrelativ Ressourcen intensivIndex wird im Cluster gespeichert (Token-basiert) 28. Riak 2i2i = Secondary Indexsimpler, Nutzer-denierter lexikalischer IndexErgebniss ist ebenfalls als Input fr MR verwendbarweniger Ressourcen intensiv, aber keine FTSIndex-Informationen werden zusammen mit demObjekt im Cluster gespeichert 29. ResourcesInfos zu Riak / Dokumentation: http://wiki.basho.com/Riak Handbook, Mathias Meyer (eBook)gute Videos,Vortrge, usw: http://basho.com/resources 30. Thanks! Q & A? ? Sebastian Cohnen@tisba