Optimizing Write Performance in the Etcd Distributed Key-Value Store Via Integration of the Rocksdb Storage Engine
Total Page:16
File Type:pdf, Size:1020Kb
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Βελτιστοποίηση Επίδοσης Εγγραφών στο Κατανεμημένο Σύστημα Αποθήκευσης Κλειδιού-Τιμής etcd μέσω Ενσωμάτωσης του Αποθηκευτικού Μηχανισμού RocksDB ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Γεωργία Μ. Κοκκίνου Εργαστήριο Υπολογιστικών Συστημάτων Αθήνα, Μάρτιος 2018 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Βελτιστοποίηση Επίδοσης Εγγραφών στο Κατανεμημένο Σύστημα Αποθήκευσης Κλειδιού-Τιμής etcd μέσω Ενσωμάτωσης του Αποθηκευτικού Μηχανισμού RocksDB ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Γεωργία Μ. Κοκκίνου Επιβλέπων Καθηγητής: Νεκτάριος Κοζύρης Καθηγητής ΕΜΠ Εγκρίθηκε από την τριμελή εξεταστική επιτροπή την 8η Μαρτίου 2018. :::::::::::: :::::::::::: :::::::::::: Νεκτάριος Κοζύρης Νικόλαος Παπασπύρου Γεώργιος Γκούμας Καθηγητής ΕΜΠ Αν. Καθηγητής ΕΜΠ Επ. Καθηγητής ΕΜΠ Εργαστήριο Υπολογιστικών Συστημάτων Αθήνα, Μάρτιος 2018 N T U A S E C E D C S Optimizing Write Performance in the etcd Distributed Key-Value Store via Integration of the RocksDB Storage Engine DIPLOMA THESIS Georgia M. Kokkinou Computing Systems Laboratory Athens, March 2018 :::::::::::: Γεωργία Μ. Κοκκίνου Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ Copyright © Γεωργία Μ. Κοκκίνου, 2018 Με επιφύλαξη παντός δικαιώματος. All rights reserved. Απαγορεύεται η αντιγραφή, αποθήκευση και διανομή της παρούσας εργασίας, εξ ολοκλήρου ή τμήματος αυτής, για εμπορικό σκοπό. Επιτρέπεται η ανατύπωση, αποθήκευση και διανομή για σκοπό μη κερδοσκοπικό, εκπαιδευτικής ή ερευνητικής φύσης, υπό την προϋπόθεση να αναφέ- ρεται η πηγή προέλευσης και να διατηρείται το παρόν μήνυμα. Ερωτήματα που αφορούν τη χρήση της εργασίας για κερδοσκοπικό σκοπό πρέπει να απευθύνονται προς την συγγραφέα. Οι απόψεις και τα συμπεράσματα που περιέχονται σε αυτό το έγγραφο εκφράζουν την συγ- γραφέα και δεν πρέπει να ερμηνευθεί ότι αντιπροσωπεύουν τις επίσημες θέσεις του Εθνικού Μετσόβιου Πολυτεχνείου. iii Περίληψη Ο etcd είναι ένα αξιόπιστο κατανεμημένο σύστημα αποθήκευσης κλειδιού-τιμής ανοι- χτού κώδικα. Σχεδιάστηκε πρωτίστως για αποθήκευση μεταδεδομένων και χρησιμο- ποιείται συνήθως για εντοπισμό υπηρεσιών, κοινόχρηστη ρύθμιση παραμέτρων και κατανεμημένα κλειδώματα. Ωστόσο, η υψηλή του διαθεσιμότητα, η απλότητα και οι αξιοσημείωτες επιδόσεις, σε συνδυασμό με το ότι υποστηρίζεται από μια μεγάλη και δραστήρια κοινότητα προγραμματιστών, τον καθιστούν ελκυστική επιλογή και για άλλα είδη εφαρμογών. Ο τρέχων αποθηκευτικός μηχανισμός του etcd είναι η BoltDB, μια ενσωματωμένη βάση δεδομένων που στηρίζεται στα Β+ δέντρα και είναι βελτι- στοποιημένη για αναγνώσεις. Στην εποχή των κατανεμημένων συστημάτων, υπάρ- χει ένα ευρύ φάσμα εφαρμογών με έμφαση στις εγγραφές που θα επωφελούνταν από έναν αξιόπιστο τρόπο αποθήκευσης δεδομένων σε μια συστοιχία υπολογιστών. Πα- ραδείγματα τέτοιων εφαρμογών αποτελούν οι διαδικτυακές υπηρεσίες αντιγράφων ασφαλείας, η συλλογή δεδομένων από αισθητήρες, οι εξυπηρετητές ηλεκτρονικού τα- χυδρομείου και οι ιστότοποι κοινωνικής δικτύωσης. Έτσι, σε αυτήν την εργασία σχε- διάζουμε και υλοποιούμε την αντικατάσταση της BoltDB με την RocksDB, μια υψηλών επιδόσεων βάση δεδομένων που εσωτερικά χρησιμοποιεί ένα LSM-δέντρο, με σκοπό να βελτιστοποιήσουμε τον etcd για περιπτώσεις χρήσης συχνών εγγραφών. Αυτό το καταφέρνουμε αναπτύσσοντας ένα πακέτο κώδικα σε γλώσσα Go που μεταφράζει συναρτήσεις και έννοιες από την προγραμματιστική διεπαφή (API) της BoltDB στις αντίστοιχες της RocksDB, τροποποιώντας τον κώδικα του ίδιου του etcd μόνο στα σημεία που είναι απαραίτητο. Κατά τη διάρκεια της διαδικασίας αυτής, υλοποιούμε κάποιες δυνατότητες που δεν υπήρχαν ήδη στα εμπλεκόμενα προγράμματα, κάνο- ντας και τις αντίστοιχες συνεισφορές λογισμικού. Στη συνέχεια, επαληθεύουμε την ορθότητα και την ευρωστία της υλοποίησής μας, με χρήση της πλατφόρμας λειτουρ- γικού ελέγχου του etcd μεταξύ άλλων εργαλείων. Επιπλέον, δημιουργούμε μια συ- στοιχία εικονικών μηχανών σε περιβάλλον νέφους, ώστε να αξιολογήσουμε μέσω του ενσωματωμένου εργαλείου benchmark την επίδοση του etcd στην περίπτωση χρήσης της RocksDB ως αποθηκευτικό μηχανισμό και να την συγκρίνουμε με την επίδοση στην περίπτωση χρήσης της BoltDB. Έπειτα, εφαρμόζουμε σταδιακά κάποιες βελτι- στοποιήσεις, εξετάζουμε την επίδραση ενός συνόλου παραμέτρων στα αποτελέσματα, και σχολιάζουμε τα πλεονεκτήματα και μειονεκτήματα των δύο προσεγγίσεων. Τέλος, σκιαγραφούμε ιδέες για βελτίωση και περαιτέρω έρευνα πάνω στο θέμα. iv Λέξεις-Κλειδιά σύστημα αποθήκευσης κλειδιού-τιμής, κατανεμημένη αποθήκευση, μηχανισμός απο- θήκευσης, δομές δεδομένων, Β+ δέντρο, LSM-δέντρο, etcd, BoltDB, RocksDB v Abstract Etcd is an open-source, distributed key-value store with a focus on reliability. It was primarily designed to store metadata and is oen used for service discovery, shared configuration and distributed locking. However, its numerous good qualities, such as its high-availability, simplicity and notable performance, in conjunction with the fact that it is an actively maintained project backed by a large developer community, render it an attractive option for other usecases as well. Etcd currently uses BoltDB, a read- optimized persistence solution based on B+ trees, as its storage engine. In the era of distributed computing, there is a wide range of write-intensive applications that would benefit from having a reliable way to store data across a cluster of machines. Examples of such applications include cloud backup services, sensor data collection, mail servers and social media websites. To that end, in this thesis we design and implement the replacement of BoltDB with RocksDB, a high-performance embedded database that internally uses a log-structured merge-tree (LSM-tree), in order to optimize etcd for write-heavy workloads. We achieve this by developing a Go wrapper that maps BoltDB API functions and concepts to their RocksDB counterparts, modifying core etcd code only where necessary. During this process, we make soware contributions to some of the projects involved, implementing features that we needed but were missing. Fur- thermore, we verify the functionality and robustness of our implementation, using the functional test suite of etcd, among other tools. In addition, we set up a cluster of virtual machines on a cloud platform, in order to evaluate the performance of etcd with RocksDB as its storage engine using the built-in benchmark tool, and compare it to that of BoltDB-backed etcd. en, we gradually apply a number of optimizations upon our initial implementation, examine the impact of a set of parameters on the results, and comment on the trade-offs of both approaches. Finally, we suggest some improvements and outline directions for further investigation on this topic. Keywords key-value store, distributed storage, storage engine, data structures, B+ tree, LSM-tree, etcd, BoltDB, RocksDB vi Αντί Προλόγου Στο σημείο αυτό θα ήθελα να εκφράσω την ευγνωμοσύνη μου προς τους ανθρώπους που συνέδραμαν στην ολοκλήρωση αυτής της διπλωματικής εργασίας, αλλά και στην ευρύτερη ακαδημαϊκή μου πορεία. Αρχικά, θα ήθελα να ευχαριστήσω τον επιβλέπο- ντα καθηγητή μου κ. Νεκτάριο Κοζύρη, που μέσα από τις διαλέξεις του καλλιέργησε το ενδιαφέρον μου για τον τομέα των Υπολογιστικών Συστημάτων. Επίσης, ευχαρι- στώ θερμά τον διδάκτορα Βαγγέλη Κούκη για την εμπιστοσύνη που μου έδειξε, για τον μεταδοτικό ενθουσιασμό του και τις πολύτιμες γνώσεις που αποκόμισα κατά τη διάρκεια της εκπόνησης αυτής της εργασίας χάρη στη βοήθειά του. Ακόμη, θέλω να ευχαριστήσω τον Χρήστο Σταυρακάκη, που είναι και ο εμπνευστής του θέματος αυτής της διπλωματικής, για την ουσιαστική συμβολή του στην αντιμετώπιση τόσο τεχνικών όσο και θεωρητικών ζητημάτων, καθώς και τον συμφοιτητή μου Χρήστο Κατσακιώρη για τις ιδιαίτερα εποικοδομητικές συζητήσεις μας γύρω από το αντικείμενο των Κα- τανεμημένων Συστημάτων Αποθήκευσης. Επιπλέον, θέλω να εκφράσω την ευγνωμο- σύνη μου προς όσες και όσους υποστηρίζουν έμπρακτα την ελεύθερη και δωρεάν δια- κίνηση της γνώσης, αναφέροντας χαρακτηριστικά τους προγραμματιστές ελεύθερου λογισμικού. Τέλος, ευχαριστώ από καρδιάς την οικογένειά μου και τους αγαπημένους μου φίλους για τη στήριξη, την κατανόηση και την ανεκτίμητη συντροφιά τους. Γεωργία Κοκκίνου Μάρτιος 2018 vii viii Contents Περίληψη iii Abstract v Αντί Προλόγου vii List of figures xiii List of tables xiv Βελτιστοποίηση Εγγραφών στον etcd μέσω Ενσωμάτωσης της RocksDB 1 1 Εισαγωγή ................................. 1 1.1 Σκοπός & Κίνητρο ........................ 1 1.2 Υπάρχουσες Προσεγγίσεις ................... 2 2 Υπόβαθρο ................................. 3 2.1 Το Σύστημα Αποθήκευσης Κλειδιού-Τιμής etcd ........ 3 2.2 Ο Αποθηκευτικός Μηχανισμός BoltDB ............ 9 2.3 Ο Αποθηκευτικός Μηχανισμός RocksDB ........... 16 3 Σχεδιασμός ................................ 24 3.1 Αρχιτεκτονική & Σχεδιαστικές Επιλογές ............ 24 3.2 Αντιστοίχιση Εννοιών & Δομών ................ 29 4 Υλοποίηση ................................ 32 4.1 Η Βιβλιοθήκη Περιτύλιξης της RocksDB στην BoltDB .... 32 4.2 Τροποποιήσεις στον Κώδικα του etcd ............. 35 ix x 4.3 Βελτιστοποιήσεις ........................ 38 4.4 Εξωτερικές Συνεισφορές .................... 44 4.5 Έλεγχος Ορθότητας ....................... 45 5 Πειραματική Αξιολόγηση ........................ 47 5.1 Εργαλεία, Μεθοδολογία & Περιβάλλον ............ 47 5.2 Αποτελέσματα .......................... 48 6 Επίλογος ................................. 56 6.1 Συμπεράσματα .......................... 56 6.2 Μελλοντικές