Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Ιωάννης Κωνσταντίνου. Φτιάχτηκε στο Facebook Αποθήκευε το Inbox μέχρι το 2010 (μετά γυρίσανε σε Hbase) Ο κώδικας ανοίχτηκε το 2008 Java Top Level Apache.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Ιωάννης Κωνσταντίνου. Φτιάχτηκε στο Facebook Αποθήκευε το Inbox μέχρι το 2010 (μετά γυρίσανε σε Hbase) Ο κώδικας ανοίχτηκε το 2008 Java Top Level Apache."— Μεταγράφημα παρουσίασης:

1 Ιωάννης Κωνσταντίνου

2 Φτιάχτηκε στο Facebook Αποθήκευε το Inbox μέχρι το 2010 (μετά γυρίσανε σε Hbase) Ο κώδικας ανοίχτηκε το 2008 Java Top Level Apache Project Συγγραφείς: Avinash Lakshman, Prashant Malik Lakshman → Επιρροές από Dynamo

3 Row store Απόλυτα κατανεμημένο Μοντέλο δεδομένων: παρόμοιο με ΒΔ Όχι όμως πλήρες σχεσιακό μοντέλο Υψηλή αντοχή σε αποτυχίες Μεγάλη κλιμακωσιμότητα (δεδομένων, όχι κόμβων)

4  Symmetric ◦ No single point of failure ◦ Linearly scalable ◦ Ease of administration  Flexible partitioning, replica placement  Automated provisioning  High availability (eventual consistency) 4

5  BigTable ◦ Strong consistency ◦ Sparse map data model ◦ GFS, Chubby, et al  Dynamo ◦ O(1) distributed hash table (DHT) ◦ BASE (aka eventual consistency) ◦ Client tunable consistency/availability 5

6  Consistent Hashing ◦ Routing, Load balancing, Replica placement  Vector Clocks ◦ Concurrent updates  Gossip Protocol  Hinted Handoffs ◦ Failure detection/recovery 6

7 7

8 Οργάνωση δεδομένων σε κελιά/στήλες και API για ανάγνωση/εγγραφή 8

9 Όπως του BigTable Μονάδα δεδομένων: στήλη (Column) Περιέχονται σε Οικογένεις στηλών (Column Families) – αντίστοιχο των πινάκων των ΣΒΔ Μπορούν να είναι και Υπερ-στήλες (περιέχουν άλλες στήλες μέσα) namevaluetimestamp

10  Οικογένειες στηλών: Περιέχουν στήλες Δυναμικές – δεν έχουν προκαθορισμένες στήλες Αραιές – αποθηκεύονται μόνο όσες στήλες υπάρχουν σε κάθε σειρά Ταξινόμηση στηλών: ως αριθμοί, ως αλφαριθμητικά κ.ο.κ. «Περιέχονται» μέσα στο πεδίο κλειδιών (keyspace)

11 Πεδίο κλειδιών – αντίστοιχο της ΒΔ, περιέχει ΟΣ (πίνακες), που περιέχουν Στήλες (τιμές) Κάθε κλειδί → μια σειρά από Στήλες σε διάφορες ΟΣ key CF1 column CF2

12 tom People CF “name”:“Tom”“job”:“serf”“height”:“average” “name”:“Dick”“breed”:“poodle” Dogs CFkey dick“name”:“Dick”“job”:“IT”“weight”:“heavy” harry“name”:“Harry”“job”:“OBG”“pay”:“2000” rex “name”:“Rex” “breed”:“German shepherd”

13 Απλό API, που θυμίζει DHT:  insert (keyspace, key, rowMutation) εισαγωγή τιμής  get (keyspace, key, columnName) ανάκτηση τιμής  delete (keyspace, key, columnName) διαγραφή τιμής Αιτήσεις γίνονται σε οποιοδήποτε κόμβο (που ονομάζεται συντονιστής) Μαζεύει τα αποτελέσματα και τα στέλνει στον πελάτη

14 Η υλοποίηση της Cassandra έχει προσθέσει λειτουργίες Range queries – και σε επίπεδο κλειδιών και σε επίπεδο στηλών list get_range_slices(column_parent, predicate, range, consistency_level) Multiget – λήψη δεδομένων από πολλές σειρές, όχι συνεχόμενες Ευρετήρια και select list get_indexed_slices(column_parent, index_clause, predicate, consistency_level) Προσθήκη/αφαίρεση ΟΣ

15  get(): retrieve by column name  multiget(): by column name for a set of keys  get slice(): by column name, or a range of names ◦ returning columns ◦ returning super columns  multiget slice(): a subset of columns for a set of keys  get count: number of columns or sub-columns  get range slice(): subset of columns for a range of keys 15

16 Consistent hashing, distributed hash table – like routing and replication and load balancing 16

17 17

18 Χωρισμός του πεδίου κλειδιών σε κόμβους Κάθε κόμβος: αναγνωριστικό Υπεύθυνος: ο διάδοχος ενός κλειδιού Δύο επιλογές:  RandomPartitioner  OrderPreservingPartitioner

19 RandomPartitioner  Αναγνωριστικό από Consistent Hash Function  Ισοκατανομή φόρτου OrderPreservingPartitioner  Αναγνωριστικό: string  Εξυπηρέτηση ερωτημάτων διαστήματος  Ωστόσο, κακή κατανομή φόρτου  Λύνεται με διάφορους τρόπους: Επιλογή σημείου εισαγωγής Χειροκίνητα Διαχωρισμό δεδομένων που χρειάζονται OP

20 20

21 21

22 22

23 23

24 Distributed Hash Table (Peer to Peer) Routing tables Getting B with 3 hops

25 25

26 26

27  insert(): add/update column (by key)  batch insert(): add/update multiple columns (by key)  remove(): remove a column  batch mutate(): like batch insert() but can also delete  (new for 0.6, deprecates batch insert())  Remove key range RSN 27

28 tomΣτήλες… dick Στήλες … harry Στήλες … rex Στήλες … ID κόμβου: “door” ID κόμβου: “wide” People CFkeyDogs CF Κάθε κόμβος αποθηκεύει όλες τις Στήλες που σχετίζονται με μια σειρά από κλειδιά sid Στήλες … Μια νέα σειρά θα αποθηκευθεί στον κατάλληλο κόμβο

29 Όλα γράφονται αρχικά στη μνήμη, ως ένα κατώφλι Όταν ξεπεραστεί, dump στο δίσκο σε μορφή SSTable  Για κάθε Οικογένεια στηλών: Bloom Filter Index Data  Ταξινομημένα κατά κλειδί Όταν τα SSTables ξεπεράσουν ένα πλήθος, συγχωνεύονται Όλα γράφονται πρώτα σε ένα commit log

30 Διατηρούνται Ν αντίγραφα Διάφορες στρατηγικές τοποθέτησης: SimpleSnitch Default N-1 successive nodes RackInferringSnitch Infers DC/rack from IP PropertyFileSnitch Configured w/ a properties file Την αντιγραφή αναλαμβάνει ο συντονιστής Κάθε κόμβος ξέρει την τοποθεσία των αντιγράφων οποιωνδήποτε δεδομένων

31 Rack unaware: απλή επιλογή των N-1 διαδόχων Rack/DC aware:  Τοποθέτηση του πρώτου αντιγράφου σε άλλο Rack/DataCenter  Άλλο ένα στο δικό μας DataCenter σε άλλο Rack Είναι επεκτάσιμη – οποιαδήποτε υλοποίηση (υπάρχει και μία με ορισμό τοπολογίας σε αρχείο)

32 Vector clocks και ρυθμιζόμενο επίπεδο συνέπειας 32

33 Εγγραφή:  Αίτηση σε οποιοδήποτε κόμβο (coordinator)  Γράφει το νέο δεδομένο στο commit log  Ο Διαμοιραστής (Partitioner) καθορίζει σε ποιον κόμβο θα πάει το αντικείμενο και τα αντίγραφά του  Οι κόμβοι το λαμβάνουν, το γράφουν σε MemTable (πίνακας στη μνήμη)  Εάν χρειαστεί, κάνουν εξαγωγή σε SSTable (πίνακας στο δίσκο)  Εάν κόμβος πεσμένος, Hinted Handoff

34 Ανάγνωση:  Αίτηση σε οποιονδήποτε κόμβο (coordinator)  Ο Διαμοιραστής επιστρέφει τους κόμβους όπου υπάρχει το αντικείμενο ή αντίγραφό του  Αιτήσεις για αριθμό αντιγράφων ανάλογα με το Consistency level (βλ. παρακάτω)  Read repair: εάν λήφθηκαν «μπαγιάτικες» (stale) απαντήσεις, ο κόμβος τους στέλνει την τελευταία έκδοση του δεδομένου

35

36 LevelBehavior ANYWritten to at least 1 node(including HH) ONE1 replica’s commit log and memory table QUORUMN/2+1 replicas LOCAL_QUORUMN/2+1 replicas within local D.C.(only with cross D.C. strategy) EACH_QUORUMN/2+1 replicas each D.C.(only with cross D.C. strategy) ALLWritten to all replicas

37 LevelBehavior ANYNot supported ONEReturns record returned by first replica to respond QUORUMReturns record with most recent timestamp once at least N/2+1 replicas reported. LOCAL_QUORUMReturns record with most recent timestamp once at least N/2+1 replicas reported within local D.C. EACH_QUORUMReturns record with most recent timestamp once at least N/2+1 replicas reported within each D.C. ALLReturns record with most recent timestamp once all replicas have responded.

38  Lamport clocks με παραπάνω counters  Initially all clocks are zero.  Each time a process experiences an internal event, it increments its own logical clock in the vector by one.  Each time a process prepares to send a message, it increments its own logical clock in the vector by one and then sends its entire vector along with the message being sent.  Each time a process receives a message, it increments its own logical clock in the vector by one and updates each element in its vector by taking the maximum of the value in its own vector clock and the value in the vector in the received message (for every element). 38

39 39

40 40

41  Vector Clocks ◦ Lamport clocks με παραπάνω counters 41

42 42

43  http://en.wikipedia.org/wiki/Apache_Cassan dra http://en.wikipedia.org/wiki/Apache_Cassan dra  Lakshman, A. and Malik, P. Cassandra - A Decentralized Structured Storage System. in ACM SIGOPS Operating Systems Review 2010  http://www.cs.cornell.edu/projects/ladis2009/pape rs/lakshman-ladis2009.pdf http://www.cs.cornell.edu/projects/ladis2009/pape rs/lakshman-ladis2009.pdf

44  http://en.wikipedia.org/wiki/Dynamo_(storage_sys tem) http://en.wikipedia.org/wiki/Dynamo_(storage_sys tem)  Giuseppe de Candia et al. Dynamo: amazon’s highly available key-value store. In SIGOPS, pp 205–220. ACM, 2007.  http://www.allthingsdistributed.com/files/amazon- dynamo-sosp2007.pdf http://www.allthingsdistributed.com/files/amazon- dynamo-sosp2007.pdf  Distributed Hash Tables και Consistent hashing  Balakrishnan, H. and Kaashoek, M.F. and Karger, D. and Morris, R. and Stoica, I. Looking up data in P2P systems in Communications of the ACM, 2003  http://www.nms.lcs.mit.edu/papers/p43- balakrishnan.pdf http://www.nms.lcs.mit.edu/papers/p43- balakrishnan.pdf  http://en.wikipedia.org/wiki/Consistent_hashing http://en.wikipedia.org/wiki/Consistent_hashing  Vector Clocks  http://en.wikipedia.org/wiki/Vector_clock http://en.wikipedia.org/wiki/Vector_clock

45


Κατέβασμα ppt "Ιωάννης Κωνσταντίνου. Φτιάχτηκε στο Facebook Αποθήκευε το Inbox μέχρι το 2010 (μετά γυρίσανε σε Hbase) Ο κώδικας ανοίχτηκε το 2008 Java Top Level Apache."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google