Πώς να βελτιστοποιήσετε τις λειτουργίες AWS Lambda με προβλεπόμενη ταυτόχρονη και αυτόματη κλιμάκωση

Οι λειτουργίες AWS Lambda είναι μια λύση χωρίς διακομιστή για την εκτέλεση κώδικα στο

χωρίς να ρυθμίσετε τους δικούς σας διακομιστές. Το κύριο μειονέκτημα είναι ότι οι χρόνοι προετοιμασίας μπορεί να είναι υψηλοί, οδηγώντας σε αυξημένη καθυστέρηση. Με το Provisioned Concurrency, μπορείτε να λύσετε αυτό το ζήτημα.

Τι είναι ο Προβλεπόμενος Συγχρονισμός;

Οι συναρτήσεις λάμδα εκτελούνται στα δικά τους “περιβάλλοντα εκτέλεσης”, τα οποία συνήθως ξεκινούν αυτόματα όταν υποβάλλεται ένα αίτημα. Μετά από μια κλήση συνάρτησης, το περιβάλλον θα παραμείνει «ζεστό» για περίπου 5-15 λεπτά και ο κωδικός προετοιμασίας δεν θα χρειαστεί να εκτελεστεί ξανά.

Ωστόσο, μετά από αυτήν την περίοδο ή εάν πρέπει να εξυπηρετηθούν ταυτόχρονα πολλαπλά αιτήματα, πρέπει να δημιουργηθεί ένα νέο περιβάλλον εκτέλεσης, οδηγώντας σε αυξανόμενους χρόνους εκκίνησης που ονομάζεται «ψυχρή εκκίνηση». Αυτό μπορεί να είναι ιδιαίτερα έντονο με γλώσσες που πρέπει να κάνουν μεγάλες ποσότητες μεταγλώττισης JIT κατά την εκκίνηση, όπως η Java και το .NET.

Για να το λύσει αυτό, το AWS διαθέτει μια δυνατότητα που ονομάζεται Προβλεπόμενη Συγχρονισμός, όπου μπορείτε ουσιαστικά να δεσμεύσετε έναν συγκεκριμένο αριθμό περιβαλλόντων εκτέλεσης για να είναι μόνιμα ζεστά όλη την ημέρα. Αυτό σημαίνει ότι όλος ο κώδικας προετοιμασίας εκτελείται εκ των προτέρων και δεν χρειάζεται να αντιμετωπίσετε ψυχρές εκκινήσεις.

Εάν βασίζεστε στο Lambda για την εξυπηρέτηση αιτημάτων που αντιμετωπίζουν οι χρήστες, ίσως θελήσετε να εξετάσετε το ενδεχόμενο προβλεπόμενης ταυτόχρονης λειτουργίας, ακόμη και αν τελικά κοστίσει λίγο περισσότερο. Παρόλο που οι κρύες εκκινήσεις συνήθως αντιπροσωπεύουν μόνο το 1% των αιτημάτων, αυτό το 1% μπορεί να είναι δευτερόλεπτα που ξοδεύετε περισσότερο σε αναμονή για τη φόρτωση μιας εφαρμογής—αν και αυτό θα εξαρτηθεί από το χρόνο εκτέλεσης και το μέγεθος του κώδικά σας.

Πόσο κοστίζει η προβλεπόμενη συνδρομή;

Σε αντίθεση με τις δεσμευμένες περιπτώσεις EC2, ο προβλεπόμενος ταυτόχρονος εξακολουθεί να είναι ως επί το πλείστον τιμολόγηση “πληρωμή για αυτό που χρησιμοποιείτε”, όπως το υπόλοιπο Lambda. Πληρώνετε ένα μικρό ποσό για κάθε ώρα που παρέχετε κάθε περιβάλλον και, στη συνέχεια, πληρώνετε για αιτήματα Lambda όπως συνήθως.

Ωστόσο, επειδή η επισκεψιμότητα είναι πιο προβλέψιμη στο τέλος του AWS και είναι φθηνότερο να μην χρειάζεται να εκτελείτε συνεχώς κώδικα προετοιμασίας, το κόστος υπολογισμού ανά συνάρτηση για αιτήματα που γίνονται με προβλεπόμενη συγχρονικότητα είναι στην πραγματικότητα χαμηλότερο. Δεν υπάρχει κανένα μειονέκτημα για την υπέρβαση του ορίου – απλώς θα χρεωθείτε τυπική τιμολόγηση ταυτόχρονης χρήσης.

Συνολικά, η προβλεπόμενη ταυτόχρονη λειτουργία μπορεί να είναι ελαφρώς φθηνότερη (περίπου 5-10%) εάν έχετε πολύ προβλέψιμη κίνηση και δεσμεύσετε ακριβώς τόση χωρητικότητα. Ωστόσο, μπορεί επίσης να είναι λίγο πιο ακριβό σε ορισμένες περιπτώσεις. Θα θελήσετε να ελέγξετε τα αναλυτικά στοιχεία σας και

συνδέστε τα στον Υπολογιστή Τιμών Lambda της AWS

να μάθω περισσότερα.

Ενεργοποίηση Προβλεπόμενης Συγχρονικότητας

Η ενεργοποίηση της προβλεπόμενης ταυτόχρονης λειτουργίας είναι αρκετά απλή, αλλά έχει ένα μειονέκτημα—δεν μπορεί να υποδείξει την προεπιλεγμένη $ΤΕΛΕΥΤΑΙΑ έκδοση. Αυτή η ετικέτα είναι ένα ψευδώνυμο που μπορεί να αλλάξει και δεν υποδεικνύει μια συγκεκριμένη έκδοση και η προβλεπόμενη ταυτόχρονη χρήση πρέπει να δεσμευτεί για μια συγκεκριμένη έκδοση. Επομένως, θα χρειαστεί να δημοσιεύσετε μια νέα έκδοση από το Lambda, αν δεν έχετε ήδη:

Στη συνέχεια, διαμορφώστε ένα ψευδώνυμο για να οδηγεί σε αυτήν την έκδοση. Αυτό το ψευδώνυμο μπορεί να ενημερωθεί, κάτι που θα ενεργοποιήσει μια ενημέρωση για τα παρεχόμενα περιβάλλοντα.

Μόλις ρυθμιστεί το ψευδώνυμό σας, μπορείτε να προσθέσετε μια νέα διαμόρφωση συγχρονισμού από τις ρυθμίσεις του Lambda, στην περιοχή Configuration > Concurrency. Μπορείτε επίσης να το διαμορφώσετε απευθείας από τις ρυθμίσεις ψευδωνύμου.

Οι ρυθμίσεις για την προβλεπόμενη συγχρονικότητα είναι απλές—επιλέξτε ένα ψευδώνυμο και εισαγάγετε ένα ποσό για την παροχή.

Μπορείτε επίσης να ορίσετε και να ενημερώσετε αυτήν την τιμή χρησιμοποιώντας το AWS API ή CLI, το οποίο μπορεί να χρησιμοποιηθεί για την αυτοματοποίησή του καθ’ όλη τη διάρκεια της ημέρας:

aws lambda put-provisioned-concurrency-config --function-name MyFunction 
--qualifier LatestProvisioned --provisioned-concurrent-executions 10

Autoscaling With Provisioned Concurrency

Εφόσον η προβλεπόμενη ταυτόχρονη λειτουργία μπορεί να προσαρμόζεται καθ’ όλη τη διάρκεια της ημέρας, μπορεί επίσης να συνδεθεί με την Αυτόματη Κλιμάκωση Εφαρμογών του AWS για να την προσαρμόσετε με βάση τη χρήση. Η σύνδεση αυτού είναι απλή και απαιτεί μόνο μερικές εντολές από το AWS CLI ή το API, καθώς δεν υπάρχει ακόμη κονσόλα διαχείρισης για αυτό.

Αρχικά, θα πρέπει να καταχωρίσετε τη συνάρτηση Lambda ως στόχο κλιμάκωσης. Εδώ, θα χρειαστεί να επεξεργαστείτε το όνομα της συνάρτησης (MyFunction) και το ψευδώνυμο (LatestProvisioned), καθώς και να προσαρμόσετε το εύρος ελάχιστης και μέγιστης χωρητικότητας.

aws application-autoscaling register-scalable-target ---namespace lambda 
--resource-id function:MyFunction:LatestProvisioned --min-capacity 2 --max-capacity 10 
--scalable-dimension lambda:function:ProvisionedConcurrency

Στη συνέχεια, μπορείτε να ενεργοποιήσετε μια πολιτική αυτόματης κλίμακας, χρησιμοποιώντας το όνομα της συνάρτησης και το ψευδώνυμο ως αναγνωριστικό πόρου και διαμορφώνοντάς την με μια πολιτική κλιμάκωσης JSON. Αυτό το παράδειγμα το ρυθμίζει να αυξάνεται και να μειώνεται όταν

LambdaProvisionedConcurrencyUtilization

πηγαίνει πάνω ή κάτω από το 70%.

aws application-autoscaling put-scaling-policy --service-namespace lambda 
--scalable-dimension lambda:function:ProvisionedConcurrency --resource-id function:MyFunction:LatestProvisioned 
--policy-name my-policy --policy-type TargetTrackingScaling 
--target-tracking-scaling-policy-configuration '{ "TargetValue": 0.7, "PredefinedMetricSpecification": { "PredefinedMetricType": "LambdaProvisionedConcurrencyUtilization" }}'

Αυτό δεν καλύπτει όλες τις περιπτώσεις, όπως γρήγορες ριπές χρήσης που δεν διαρκούν πολύ, αλλά λειτουργεί καλά για σταθερή κίνηση και θα σας εξοικονομήσει χρήματα το βράδυ όταν η κίνηση είναι χαμηλή.


HowToGeek.com



You might also like


Leave A Reply



Cancel Reply

Your email address will not be published.