Firebase Cloud Functions: το μεγάλο, το meh και το άσχημο

Όταν εξέτασα το Firebase πέρυσι, παραπονέθηκα ότι δεν ήταν εντελώς χωρίς διακομιστές. Ένας διακομιστής κόμβων ήταν ακόμη απαραίτητος για κοινές λειτουργίες όπως η αποστολή email ή η δημιουργία μικρογραφιών.

Το Firebase Cloud Functions ανακοινώθηκε λίγους μήνες αργότερα. Η υπηρεσία είναι ακόμα σε έκδοση beta, αλλά την χρησιμοποιώ ευτυχώς για μερικούς μήνες στην παραγωγή.

Ας δούμε πώς είναι.

Τι είναι οι λειτουργίες του Firebase Cloud;

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

Σε πολλές περιπτώσεις, αυτό το νέο παράδειγμα μπορεί να απλοποιήσει τη σύνταξη, τη διατήρηση και την εκτέλεση κώδικα backend.

Το Firebase Cloud Functions ειδικότερα είναι σαν μπλοκ Lego που μπορείτε να συνδεθείτε σε οποιαδήποτε υπηρεσία Firebase. Για παράδειγμα, μια συνάρτηση μπορεί να ενεργοποιηθεί όταν μια εικόνα μεταφορτώνεται στο Firebase Storage για να δημιουργήσει μια μικρογραφία ή ίσως να καθαρίσει ορισμένα δεδομένα χρήστη όταν ένας κόμβος διαγράφεται στη βάση δεδομένων σε πραγματικό χρόνο. Σχεδόν οτιδήποτε ενδιαφέρον που συμβαίνει στο Firebase μπορεί να προκαλέσει μια λειτουργία.

Εάν αυτό δεν είναι αρκετό, μπορείτε επίσης να χρησιμοποιήσετε το HTTP για να ενεργοποιήσετε λειτουργίες με GET, POST κ.λπ. Δείτε αυτό το καταπληκτικό βίντεο σχετικά με τον τρόπο συνδυασμού του Firebase Hosting με το Cloud Functions για τη δημιουργία μιας πλήρους εφαρμογής Express:

Το σπουδαίο

Η υποδομή δεν γίνεται ευκολότερη από αυτό

Η υποδομή αφαιρείται εντελώς από εσάς, όπως και το υπόλοιπο του Firebase. Κάθε φορά που ενεργοποιείται μια λειτουργία, ένας νέος εικονικός διακομιστής ζωντανεύει, κάνει τη δουλειά του και επιστρέφει στο άκρο. Η μαγεία του Google Cloud θα συνεχίσει να ενεργοποιεί τις λειτουργίες και την κλίμακα της υποδομής σας ανάλογα με τον φόρτο εργασίας αυτόματα.

Τιμολόγηση

Οι λειτουργίες Cloud γενικά είναι πολύ αποδοτικές. Είναι δύσκολο να συγκρίνουμε τις τιμές των παρόχων cloud, αλλά μπορώ να πω ότι με βάση την εμπειρία μου, το Firebase Cloud Functions ήταν γελοία φθηνό. Είναι δύσκολο να πιστέψουμε ότι η Google βγάζει χρήματα από αυτό.

Εύχρηστος

Όπως συνήθως με το Firebase και το Google, τα έγγραφα είναι υπέροχα και δεν θα κάνετε διανοητικά ακροβατικά για να το αποκτήσετε . Υπάρχουν επίσης τόνοι δειγμάτων στο Github για να ξεκινήσετε. Η εντολή ανάπτυξης χειρίζεται το Firebase CLI, οπότε η ενεργοποίηση και η λειτουργία του γειά σου είναι κυριολεκτικά:

firebase init functionsfirebase deploy

Νομίζω ότι η απλότητα της χρήσης του Firebase και του Google Cloud γενικά είναι απίστευτη, ειδικά σε σύγκριση με τον ανταγωνισμό.

Εύκαμπτος

Όπως έγραψα προηγουμένως, αυτές οι λειτουργίες μπορούν να ενεργοποιηθούν από κάθε είδους γεγονότα. Σίγουρα δεν θα εξαντληθούν ιδέες για το πώς να τις ενσωματώσετε στο έργο Firebase ή ακόμα και στο υπόλοιπο stack σας.

Ακολουθούν ορισμένα από τα προβλήματα που επιλύσαμε χρησιμοποιώντας το Firebase Cloud Functions:

  • Δημιουργήστε PDF για μια υπηρεσία τιμολόγησης στο διαδίκτυο χρησιμοποιώντας το Phantom.js και υπογράψτε αυτά τα τιμολόγια με κάποια κυβερνητική υπηρεσία
  • Συνδέστε μια υπηρεσία Go με έναν τρίτο πάροχο SOAP (ugh)
  • Στείλτε email μέσω HTTP από οπουδήποτε στη στοίβα μας

Το Meh

Ξεκινά το κρύο

Η επεκτασιμότητα είναι μεγάλη, αλλά ο χρόνος εκτέλεσης μπορεί να κυμαίνεται άγρια. Μια απλή συνάρτηση hello world μπορεί να διαρκέσει 3ms για να κάνει τη δουλειά της, ή 100ms.

functions.https.onRequest((request, response) => { response.send(“Hello from Firebase!”);});

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

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

Δυστυχώς, οι κρύες εκκινήσεις είναι μια αναπόφευκτη πτυχή της αντιμετώπισης λειτουργιών cloud (από οποιονδήποτε πάροχο). Θα πρέπει να το λάβετε αυτό υπόψη όταν αποφασίζετε να χρησιμοποιήσετε μια λειτουργία cloud για να λύσετε κάτι.

Χωρίς χρονοδιάγραμμα (cron)

Οι λειτουργίες Cloud είναι ιδανικές για εργασίες με χαμηλή επισκεψιμότητα, όπως δημιουργία αναφορών ή δημιουργία περιοδικών αντιγράφων ασφαλείας στις 2 π.μ., αλλά με το Firebase ή το Google Cloud δεν υπάρχει εύκολος τρόπος για να ενεργοποιήσετε τις λειτουργίες σας με βάση ένα πρόγραμμα.

Η ομάδα του Firebase συνιστά τη δημιουργία ενός έργου App Engine για ενορχήστρωση αυτών των ενεργοποιήσεων. Η υπηρεσία πραγματικά ζητά κάτι σαν το Χρονοδιάγραμμα Heroku.

Μόνο JavaScript

Ε, είμαι εντάξει με το JavaScript, αλλά τόσο το Azure όσο και το AWS υποστηρίζουν πολλές ακόμη γλώσσες. Είναι ειρωνικό το ότι η Google δεν υποστηρίζει το Go στην υπηρεσία λειτουργίας cloud, αλλά το AWS το κάνει.

Κόμβος 6

Και πάλι, ο ανταγωνισμός κάνει καλύτερα. Τόσο οι λειτουργίες AWS Lambda όσο και οι λειτουργίες Azure εκτελούνται ήδη στον κόμβο 8. Το μεγαλύτερο μειονέκτημα εδώ είναι να επιστρέψουμε σε υποσχέσεις χωρίς συγχρονισμό / αναμονή ή να χρειαστεί να διαμορφώσετε το Babel στο έργο σας.

Ο άσχημος

Ροή εργασίας Dev

Με εξαίρεση τις λειτουργίες που ενεργοποιούνται από HTTP, δεν μπορείτε να εκτελέσετε τις λειτουργίες σας τοπικά. Οι λειτουργίες που ενεργοποιούνται από μια υπηρεσία Firebase πρέπει να αναπτυχθούν στο cloud.

Αυτό έχει πολλές άσχημες επιπτώσεις:

  • Μικρά λάθη καταλήγουν να κοστίζουν πολύ χρόνο, καθώς οι νέες λειτουργίες χρειάζονται μερικά λεπτά για να αρχίσουν να λειτουργούν.
  • Οι αναπτυσσόμενες συναρτήσεις δεν έχουν προφανείς εκδόσεις. Όλα τα αρχεία καταγραφής της ίδιας λειτουργίας φαίνεται να προέρχονται από την ίδια έκδοση. Δεν είναι ποτέ ξεκάθαρο πότε λειτουργούν πραγματικά οι νέες λειτουργίες, οπότε η μόνη σας επιλογή είναι να ενεργοποιήσετε χειροκίνητα τις λειτουργίες και το See-What-Happens ™.
  • Χωρίς επιστροφή

Περιβάλλοντα

Πέρα από τα προηγούμενα σημεία, η διαχείριση των περιβαλλόντων είναι… περίπλοκη.

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

Θα χρειαστείτε διαπιστευτήρια για να έχετε πρόσβαση σε σχεδόν οτιδήποτε έξω από το περιβάλλον δοκιμών του Firebase. Για άλλες υπηρεσίες Google Cloud, αυτά τα διαπιστευτήρια παρέχονται με τη μορφή .jsonαρχείων. Πολλαπλασιάστε αυτό με κάθε περιβάλλον (dev, παραγωγή, staging) και μπορείτε να καταλήξετε με ένα βασιλικό χάος.

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

Θα ήθελα πολύ να δω μια καρτέλα Περιβάλλον στο Firebase Console όπου θα μπορούσα εύκολα να διαχειριστώ αυτές τις ρυθμίσεις για ολόκληρο το έργο Firebase. Η εναλλαγή μεταξύ των περιβαλλόντων πρέπει να είναι τόσο εύκολη όσο firebase use production.

συμπέρασμα

Εκτός από κάποια τριβή κατά τη φάση dev, η εμπειρία μου με το Firebase Cloud Functions ήταν θετική. Μόλις αναπτυχθούν, αυτά τα πράγματα είναι αξιόπιστα και απαιτούν μηδενική συντήρηση όπως υποσχέθηκε. Ναι, το Firebase είναι τελικά εντελώς χωρίς διακομιστές. Ζήτω!

Εάν χρησιμοποιείτε ήδη το Firebase, δεν είναι πραγματικά εγκεφαλικό. Το Firebase Cloud Functions είναι ένα εξαιρετικό συμπλήρωμα για το έργο σας, ακόμα κι αν η υπηρεσία είναι ακόμα σε έκδοση beta.

Από την άλλη πλευρά, είναι δίκαιο να πούμε ότι ο ανταγωνισμός έχει ένα πιο ώριμο προϊόν. Εάν δεν έχετε επενδύσει στο Firebase ή στο Google Cloud και σκέφτεστε να χρησιμοποιήσετε λειτουργίες cloud στη στοίβα σας, πιθανότατα θα πρέπει να εξετάσετε τι έχουν να προσφέρουν και τα AWS ή Azure.

Για να είμαι απόλυτα ειλικρινής, ανησυχώ λίγο ότι η υπηρεσία είναι ακόμη σε έκδοση beta. Έχουν περάσει πάνω από ένα χρόνο από τότε που ανακοινώθηκε και η πρόοδος αισθάνεται οδυνηρά αργή. Ο ανταγωνισμός φαίνεται πολύ πιο αφοσιωμένος στα προϊόντα του cloud, ακόμη και αν, σύμφωνα με την Diane Greene, Διευθύνουσα Σύμβουλο για τις επιχειρήσεις cloud της Google, το Google Cloud είναι το «ταχύτερα αναπτυσσόμενο cloud».

Αυτό είναι όλο.

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