Έκδοση Memcached 1.6.0 με ενεργοποιημένη την υποστήριξη εξωτερικού χώρου αποθήκευσης

πήρε θέση σημαντική απελευθέρωση του συστήματος προσωρινής αποθήκευσης δεδομένων στη μνήμη Memcached 1.6.0, το οποίο λειτουργεί σε δεδομένα σε μορφή κλειδιού/τιμής και είναι εύκολο στη χρήση. Το Memcached χρησιμοποιείται συνήθως ως μια ελαφριά λύση για την επιτάχυνση τοποθεσιών υψηλού φορτίου μέσω προσωρινής αποθήκευσης πρόσβασης στο DBMS και στα ενδιάμεσα δεδομένα. Κώδικας παρέχονται υπό την άδεια BSD.

Η νέα έκδοση σταθεροποιεί την εφαρμογή της αποθήκευσης "extstore", το οποίο είναι πλέον χτισμένο από προεπιλογή (για απενεργοποίηση στο σενάριο διαμόρφωσης, παρέχεται η επιλογή "-disable-extstore"), αλλά απαιτεί ρητή ενεργοποίηση κατά την εκκίνηση (οι παλιές εγκαταστάσεις θα συνεχίσουν να λειτουργούν χωρίς αλλαγές μετά την ενημέρωση). Παρόλο που το extstore θεωρείται γενικά σταθερό, συνιστάται προσοχή κατά την εφαρμογή του σε πολύ μεγάλα συστήματα.

Το Extstore σάς επιτρέπει να χρησιμοποιείτε μονάδες SSD/Flash για να επεκτείνετε το μέγεθος της προσωρινής μνήμης. Όπως και με τη μνήμη RAM, ο χώρος αποθήκευσης Flash δεν είναι μόνιμος και επαναφέρεται κατά την επανεκκίνηση. Ο σκοπός της νέας λειτουργίας είναι να διασφαλίσει αποτελεσματική προσωρινή αποθήκευση μεγάλων δεδομένων. Όταν χρησιμοποιείτε το "extstore", τα κλειδιά και τα μεταδεδομένα αποθηκεύονται, όπως και πριν, μόνο στη μνήμη RAM, αλλά μεγάλα δεδομένα που σχετίζονται με κλειδιά, το μέγεθος των οποίων υπερβαίνει ένα καθορισμένο όριο, αποθηκεύονται σε εξωτερικό χώρο αποθήκευσης και μόνο ο δείκτης παραμένει στη μνήμη RAM.

Εάν το κλειδί σχετίζεται με μικρά δεδομένα, τότε το Memcached λειτουργεί ως συνήθως, διατηρεί τα δεδομένα στη μνήμη και δεν έχει πρόσβαση σε εξωτερικό χώρο αποθήκευσης. Εάν υπάρχει πολλή ελεύθερη μνήμη, τότε τα πιο απαραίτητα δεδομένα μπορούν επιπλέον να εντοπιστούν πλήρως στην κρυφή μνήμη της μνήμης RAM (για παράδειγμα, μπορείτε να καθορίσετε ότι μόνο αντικείμενα μεγαλύτερα από 1024 byte στα οποία δεν έχει γίνει πρόσβαση για 3600 δευτερόλεπτα επαναφέρονται στο Flash ).

Η υλοποίηση είναι βελτιστοποιημένη για να εξασφαλίζει μέγιστη απόδοση και ελάχιστο φορτίο CPU, σε βάρος της απόδοσης αποθήκευσης (υψηλό επίπεδο κατακερματισμού). Για να παραταθεί η διάρκεια ζωής των μονάδων Flash, τα δεδομένα αποθηκεύονται στην προσωρινή μνήμη και ξεπλένονται στην αποθήκευση διαδοχικά. Για να αποθηκεύσετε την κατάσταση της προσωρινής μνήμης μεταξύ των επανεκκινήσεων, μπορείτε να χρησιμοποιήσετε την ικανότητα που εμφανίστηκε στην έκδοση 1.5.18 για να αποθέσετε μια ένδειξη προσωρινής αποθήκευσης σε ένα αρχείο. Κατά την επόμενη εκκίνηση, μπορείτε να επαναφέρετε τη μνήμη cache από αυτό το αρχείο για να εξαλείψετε τις κορυφές του φορτίου στους επεξεργαστές περιεχομένου λόγω της άδειας της προσωρινής μνήμης (η κρυφή μνήμη γίνεται αμέσως "ζεστή").

Η δεύτερη σημαντική αλλαγή στο Memcached 1.6 ήταν η επανεπεξεργασία του κώδικα επικοινωνίας δικτύου, ο οποίος είναι προσαρμοσμένος για να επεξεργάζεται αυτόματα αιτήματα δέσμης σε μία μόνο κλήση συστήματος. Προηγουμένως, κατά την αποστολή πολλαπλών εντολών GET σε ένα μόνο πακέτο TCP, το memcached έστελνε τα αποτελέσματα με ξεχωριστές κλήσεις συστήματος. Στο Memcached 1.6, οι απαντήσεις συγκεντρώνονται και επιστρέφονται στέλνοντας μία κλήση συστήματος. Ως αποτέλεσμα, υπάρχει πλέον κατά μέσο όρο 1.5 πλήκτρα ανά κλήση συστήματος, κάτι που σε δοκιμές δείχνει μείωση του φορτίου της CPU έως και 25% και μείωση της καθυστέρησης κατά αρκετά τοις εκατό.

Ο επανασχεδιασμός του υποσυστήματος δικτύου κατέστησε επίσης δυνατή τη μετάβαση στη δυναμική κατανομή των buffer ανάλογα με τις ανάγκες, αντί της στατικής εκχώρησης buffers. Αυτή η βελτιστοποίηση μείωσε την κατανάλωση μνήμης κατά την αναμονή για νέες εντολές μέσω μιας σύνδεσης που έχει δημιουργηθεί από τον πελάτη από 4.5 KB σε 400-500 byte και κατέστησε επίσης δυνατή την απαλλαγή από πολλές κλήσεις προς malloc, realloc και δωρεάν, που οδηγούν σε περιττό κατακερματισμό της μνήμης στο συστήματα με μεγάλο αριθμό συνδέσεων. Κάθε νήμα εργαζόμενου χειρίζεται τώρα τη δική του ομάδα buffer ανάγνωσης και εγγραφής για ενεργές συνδέσεις πελατών. Για να προσαρμόσετε το μέγεθος αυτών των buffer
παρέχονται οι επιλογές "-o resp_obj_mem_limit=N" και "-o read_buf_mem_limt=N".

Ο κλάδος 1.6 ανακοίνωσε επίσης την κατάργηση του δυαδικό πρωτόκολλο αλληλεπίδραση με τον διακομιστή. Η συντήρηση του δυαδικού πρωτοκόλλου και οι διορθώσεις σφαλμάτων θα συνεχιστούν, αλλά οι νέες δυνατότητες και οι ενημερώσεις σε υπάρχουσες λειτουργίες δεν θα μεταφερθούν. Πρωτόκολλο κειμένου θα συνεχίσει να αναπτύσσεται χωρίς αλλαγές. Το δυαδικό πρωτόκολλο έχει αντικατασταθεί από ένα νέο πρωτόκολλο μετα (μια έκδοση κειμένου του πρωτοκόλλου με συμπαγείς μετα-εντολές), που δείχνει τον βέλτιστο συνδυασμό απόδοσης και αξιοπιστίας. Το νέο πρωτόκολλο καλύπτει όλες τις λειτουργίες που ήταν προηγουμένως διαθέσιμες μέσω κειμένου και δυαδικών πρωτοκόλλων.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο