Abstract : | In cloud computing, Elastic Scaling is defined as the ability of a system to dynamically handle changes in workload by adding or removing computing or networking infrastructure. In general, Elasticity allows a cluster to allocate computer resources, based on user’s specific demands. In our current work we used Kafka, which is a high-throughput, low-latency plat-form for handling real-time data feeds, as the underlying system and incorporated elasticity control over it. Kafka, up to now, does not support automatic expansion or decommission of the cluster so we came up with an algorithm based on the round-robin technique in order to make the Scaling Up or Down of the cluster possible. Then, we used two different Deep Reinforcement Learning Approaches in order to learn the optimal elasticity behaviour based on variations of predefined user demands. Deep Reinforcement Learning (Deep RL) is a sub-field of machine learning that combines Reinforcement Learning with Deep Learning and it is particularly useful when the number of possible states are infinite, as it is in our case. The Deep Reinforcement Learning Agents take as input the state of the Kafka cluster at defined timesteps, which is a Multi-dimensional vector consisting of different system metrics, and outputs a Scaling action. We support three Scaling actions. Scale Up: when adding a Broker to the Kafka Cluster, Scale Down: when removing a Broker from the Kafka Cluster and No Scaling: where the Kafka Cluster Operates as it is. Both Agents managed to converge to the optimal elastic policy after a finite amount of steps. More specifically, we used Deep Q Network, Double Deep Q Network architectures and compared their performance. We used Docker to develop and run our application. Every critical component in our implementation is running on a separate docker container. Together all docker containers operate as part of a cluster. This way Docker gives us the opportunity to simulate a real time environment. We used Docker Swarm as the tool to manage and scale our application across different physical machines. Στο cloud computing,τ ο Elastic Scaling ορίζεται ως η ικανότητα ενός συστήματος να χειρίζεται δυναμικά τις αλλαγές στον φόρτο εργασίας του προσθέτοντας ή αφαιρώντας υπολογιστική ή δικτυακή υποδομή. Σε γενικές γραμμές,η Ελαστικότητα επιτρέπει σε ένα cluster να κατανέμει πόρους υπολογιστών, με βάση τις συγκεκριμένες απαιτήσεις του χρήστη. Στην τρέχουσα εργασία μας χρησιμοποιήσαμε το Kafka, το οποίο είναι μια πλατφόρμα υψηλής απόδοσης και χαμηλής καθυστέρησης για χειρισμό streaming δεδομένων σε πραγματικό χρόνο, ως το υποκείμενο σύστημα και ενσωματώσαμε ελαστικότητα πάνω σε αυτό. Το Kafka, μέχρι τώρα, δεν υποστηρίζει την αυτόματη ενεργοποίηση/απενεργοποίηση επέκτασης του cluster, οπότε καταλήξαμε σε έναν αλγόριθμο που βασίζεται στην τεχνική round-robin για να καταστήσουμε δυνατή την κλιμάκωση προς τα πάνω ή προς τα κάτω. Στη συνέχεια, χρησιμοποιήσαμε δύο διαφορετικές προσεγγίσεις βαθιάς ενισχυμένης μάθησης για να μάθουμε τη βέλτιστη συμπεριφορά ελαστικότητας με βάση τις παραλλαγές των προκαθορισμένων απαιτήσεων του χρήστη. Το Deep Reinforcement Learning (Deep RL)είναι ένα υποπεδίο της μηχανικής μάθησης που συνδυάζει το Reinforcement Learning με το Deep Learning και είναι ιδιαίτερα χρήσιμο όταν ο αριθμός των πιθανών καταστάσεων είναι άπειρος, όπως είναι στην δικιά μας περίπτωση. Οι πράκτορες βαθιάς ενισχυμένης μάθησης, λαμβάνουν ως είσοδο την κατάσταση του Kafka cluster σε καθορισμένα χρονικά διαστήματα, το οποίο είναι ένα πολυδιάστατο διάνυσμα που αποτελείται από διάφορες μετρήσεις συστήματος και παράγει μια ενέργεια κλιμάκωσης. Υποστηρίζουμε τρεις ενέργειες. Scale Up: κατά την προσθήκη ενός Broker στο Kafka, Scale Down: κατά την κατάργηση ενός Broker από το Kafka και No Scaling: όπου το kafka cluster λειτουργεί όπως είναι. Και οι δύο πράκτορες κατάφεραν να συγκλίνουν στη βέλτιστη πολιτική μετα απο ένα πεπερασμένο αριθμό βημάτων. Ειδικότερα, χρησιμοποιήσαμε αρχιτεκτονικές Deep Q Network, Double Deep Q Network και συγκρίναμε την απόδοσή τους. Χρησιμοποιήσαμε το Docker για να αναπτύξουμε και να τρέξουμε την εφαρμογή μας. Κάθε κρίσιμο στοιχείο εκτελείται σε ξεχωριστό docker container. Μαζί όλα τα docker containers λειτουργούν ως μέρος ενός cluster. Με αυτόν τον τρόπο το Docker μας δίνει την ευκαιρία να προσομοιώσουμε ένα cluster σε πραγματικό χρόνο. Χρησιμοποιήσαμε το Docker Swarm ως εργαλείο για τη διαχείριση και κλιμάκωση της εφαρμογής μας σε διαφορετικά φυσικά μηχανήματα.
|
---|