Πρέπει να χρησιμοποιείτε προβλεπόμενη ταυτόχρονη λειτουργία για τις λειτουργίες λάμδα του AWS;
Οι λειτουργίες Lambda είναι ένα κρίσιμο μέρος οποιασδήποτε ανάπτυξης χωρίς διακομιστή στις Υπηρεσίες Ιστού της
Amazon
. Ωστόσο, δεν είναι μαγικά και μπορεί να έχουν μερικά μειονεκτήματα, όπως οι κρύες εκκινήσεις, λόγω των φυσικών περιορισμών του υλικού. Η προβλεπόμενη ταυτόχρονη λειτουργία μπορεί να βοηθήσει στην ανακούφιση του προβλήματος.
Τι είναι τα «Cold Starts»;
Το “Cold Starts” είναι ένα μεγάλο θέμα για το Lambda, ειδικά όταν το εξετάζουμε για μια εφαρμογή ευαίσθητη σε καθυστέρηση. Ο όρος αναφέρεται στον χρόνο εκκίνησης που απαιτείται για να τεθεί σε λειτουργία το περιβάλλον εκτέλεσης μιας συνάρτησης Lambda από την αρχή.
Οι λειτουργίες λάμδα θα παραμείνουν «ζετές» για λίγο μετά την επίκλησή τους. Οι λειτουργίες που δεν είναι VPC θα είναι ζεστές για 5 λεπτά και οι λειτουργίες VPC θα είναι ζεστές για 15 λεπτά. Κατά τη διάρκεια αυτής της περιόδου, εάν η συνάρτηση κληθεί ξανά, θα ανταποκριθεί αμέσως. Αυτό είναι εξαιρετικό για υπηρεσίες που έχουν σταθερή, τακτική κίνηση.
Ωστόσο, εάν ο κώδικάς σας δεν έχει εκτελεστεί εδώ και αρκετό καιρό ή εάν χρειάζεται να κλιμακωθεί και να εκτελεστεί πολλές ταυτόχρονες λειτουργίες, θα ξεκινήσει από την αρχή. Σύμφωνα με ανάλυση από το AWS, οι ψυχρές εκκινήσεις συμβαίνουν σε λιγότερο από το 1% των αιτημάτων σε φόρτους εργασίας παραγωγής, κάτι που είναι αποδεκτό για πολλά σενάρια.
Ωστόσο, ανάλογα με το χρόνο εκτέλεσης που χρησιμοποιείτε (η Java και το .NET χρειάζονται λίγο χρόνο για τη μεταγλώττιση του JIT), μια ψυχρή εκκίνηση θα μπορούσε να καθυστερήσει την επίκληση της λειτουργίας κατά πολλά δευτερόλεπτα. Αυτό μπορεί να είναι απαράδεκτο για εφαρμογές ευαίσθητες σε καθυστέρηση.
Όχι άλλες κρύες εκκινήσεις
Η λειτουργία Provisioned Concurrency του Lambda μπορεί να βοηθήσει στην επίλυση αυτού του προβλήματος. Μπορείτε να το σκεφτείτε σαν δεσμευμένες περιπτώσεις για συναρτήσεις λάμδα — ουσιαστικά κρατάτε ένα συγκεκριμένο ποσό χωρητικότητας και μια συνάρτηση Λάμδα θα παραμείνει ζεστή για όλη την περίοδο.
Αυτό έχει σημαντικά πλεονεκτήματα, συμπεριλαμβανομένης της σχεδόν πλήρους κατάργησης του κόστους εκκίνησης. Στην πραγματικότητα δεν θα χρειαστεί να ανησυχείτε καθόλου για τη βελτιστοποίηση του κώδικα προετοιμασίας, καθώς θα εκτελεστεί μία φορά και θα παραμείνει σε λειτουργία. Αυτό είναι ένα σημαντικό πλεονέκτημα για τις μεταγλωττισμένες γλώσσες JIT όπως η Java και η C#/.NET, οι οποίες μπορούν να έχουν μεγάλα δυαδικά αρχεία και χρόνους εκκίνησης για τη φόρτωσή τους.
Σε σύγκριση με το προηγούμενο παράδειγμα, όπου οι λειτουργίες ξεκινούν κρύα, η προβλεπόμενη ταυτόχρονη λειτουργία τις ξεκινά όλες εκ των προτέρων και τις διατηρεί ζεστές. Όταν χρειάζεται μια επίκληση, το Lambda θα χρησιμοποιήσει τις συναρτήσεις θερμότητας για να την εκτελέσει.
Ωστόσο, έρχεται με τα δικά του μειονεκτήματα. Λόγω του τρόπου με τον οποίο το Lambda επιλέγει εκδόσεις για συναρτήσεις, η προβλεπόμενη ταυτόχρονη λειτουργία δεν λειτουργεί με την ετικέτα $LATEST. Θα χρειαστεί να δημιουργήσετε ένα νέο ψευδώνυμο, να παράσχετε συγχρονισμό για αυτό το ψευδώνυμο και, στη συνέχεια, να το ενημερώσετε όταν αλλάξει η έκδοση.
Είναι επίσης σημαντικό να κατανοήσετε ότι, παρά το γεγονός ότι η λειτουργία εκτελείται για μεγάλα χρονικά διαστήματα, η προβλεπόμενη ταυτόχρονη λειτουργία δεν καθιστά την αίτησή σας κατάσταση κατάστασης. Οι λειτουργίες λάμδα μπορούν και θα καταστραφούν και δεν πρέπει να τις αντιμετωπίζετε σαν διακομιστή EC2.
Πόσο κοστίζει η προβλεπόμενη συνδρομή;
Η απάντηση σε αυτό εξαρτάται από το πόσο συχνά εκτελείται η συνάρτησή σας και πόσο συχνά βλέπετε να δημιουργούνται πολλαπλά περιβάλλοντα εκτέλεσης για την κάλυψη της παράλληλης ζήτησης.
Ο κύριος αριθμός που πρέπει να ανησυχείτε για την προβλεπόμενη ταυτόχρονη λειτουργία είναι ο αριθμός των εκτελέσεων συναρτήσεων που εκτελούνται ταυτόχρονα. Για παράδειγμα, εάν έχετε μια συνάρτηση που καλείται δέκα φορές το δευτερόλεπτο και κάθε κλήση διαρκεί 500 ms, αυτή η συνάρτηση θα έχει κατά μέσο όρο 5 ταυτόχρονες εκτελέσεις ανά δευτερόλεπτο.
Συνολικά, η προβλεπόμενη ταυτόχρονη λειτουργία δεν κοστίζει πολύ περισσότερο από τις κανονικές λειτουργίες Λάμδα. Εσείς
μπορεί να χρησιμοποιήσει τον Υπολογιστή Τιμών της AWS
για να καταλάβετε πόσο θα σας κοστίσει προσωπικά. Για παράδειγμα, ένα Lambda που καλείται 10 φορές το δευτερόλεπτο, με χρόνο κλήσης 500 ms και 256 mb μνήμης θα κοστίζει 60 $ το μήνα για να λειτουργήσει.
Ωστόσο, η ίδια λειτουργία, αλλά με 10 προβλεπόμενες εκτελέσεις, βγαίνει λίγο περισσότερο στα 64,50 $ το μήνα. Συνολικά, είναι πιθανόν μια μικρή αύξηση 5-10% στο κόστος, ανάλογα με τη χρήση.
Ωστόσο, η προβλεπόμενη ταυτόχρονη λειτουργία είναι στην πραγματικότητα φθηνότερη ανά GB-δευτερόλεπτο χρήσης. Αυτό σημαίνει ότι εάν χρησιμοποιείτε σταθερά πολύ κοντά στο 100% της χρήσης, μπορεί να είναι φθηνότερο να κάνετε κράτηση συγχρονισμού από την κανονική τιμολόγηση Lambda. Αυτό οφείλεται σε μεγάλο βαθμό στο γεγονός ότι είναι συνολικά φθηνότερο να μειωθεί ο χρόνος που αφιερώνει το Lambda στον κώδικα προετοιμασίας.


