Το Backend as a Service (BaaS), είναι ένα μοντέλο υπηρεσίας που παρέχει στους προγραμματιστές web και mobile εφαρμογών έναν εύκολο τρόπο για να ρυθμίσουν και να αναπτύξουν γρήγορα το backend της εφαρμογής τους. Συνήθως προσφέρουν υπηρεσίες όπως βάσεις δεδομένων, αυθεντικοποίηση, αποθήκευση αρχείων, serverless functions, μεταξύ άλλων.
Πριν από την άνοδο του BaaS, οι προγραμματιστές έπρεπε να καταφεύγουν μόνο σε custom backends, τα οποία έπρεπε να υλοποιήσουν από την αρχή. Αυτό περιλαμβάνει το στήσιμο των servers και την ανάπτυξη του backend λογισμικού, το οποίο πρέπει να είναι εύρωστο για να εξασφαλίζεται η ασφάλεια και η επεκτασιμότητα της εφαρμογής. Αν και αυτό προσφέρει καλύτερο έλεγχο στο backend, είναι χρονοβόρο, απαιτεί μεγαλύτερη εξειδίκευση και μπορεί να είναι πιο ακριβό.
Χρησιμοποιώντας BaaS, οι προγραμματιστές μπορούν να εξαλείψουν την πολυπλοκότητα που παρουσιάζουν τα custom backends, προσφέροντας προκατασκευασμένες υπηρεσίες που έχουν δοκιμαστεί από μεγάλο αριθμό προγραμματιστών για πολλές διαφορετικές λύσεις, και επίσης τους επιτρέπει να τις ενσωματώσουν γρήγορα στις εφαρμογές τους χρησιμοποιώντας APIs.
Πλεονεκτήματα και Μειονεκτήματα και των δύο προσεγγίσεων
Παραδοσιακή Προσέγγιση
Χρησιμοποιώντας την παραδοσιακή προσέγγιση, οι προγραμματιστές αποκτούν περισσότερο έλεγχο πάνω στη τεχνολογική τους στοίβα, το οποίο είναι ένα μεγάλο πλεονέκτημα, καθώς κάθε εφαρμογή μπορεί να έχει πολύ συγκεκριμένες ανάγκες που μπορούν να αντιμετωπιστούν προσαρμόζοντας το backend ώστε να ευθυγραμμίζεται τέλεια με αυτές τις απαιτήσεις.
Ένα άλλο πλεονέκτημα της χρήσης ενός custom backend είναι ότι, σε περίπτωση που το backend αποτύχει, οι προγραμματιστές μπορούν να είναι βέβαιοι ότι το πρόβλημα είναι δικό τους και μόνο, εξαλείφοντας έτσι την αβεβαιότητα που συνοδεύει μια λύση BaaS, η οποία θα μπορούσε να αφήσει τους προγραμματιστές να αναρωτιούνται αν το πρόβλημα βρίσκεται στη δική τους πλευρά ή στην πλευρά του παρόχου υπηρεσιών, κάτι που θα μπορούσε να καταναλώσει πολύτιμο χρόνο από τη διαδικασία ανάπτυξης της εφαρμογής, αναζητώντας ανεπίσημη τεκμηρίωση σε φόρουμ, σε περίπτωση που το παρουσιαζόμενο ζήτημα δεν έχει αναγνωριστεί από τον πάροχο.
Από την άλλη πλευρά, η παραδοσιακή προσέγγιση θα μπορούσε να δυσκολέψει ορισμένους προγραμματιστές, καθώς η εφαρμογή της απαιτεί μη αμελητέο χρόνο. Αυτό είναι ιδιαίτερα σημαντικό για startups, καθώς τις περισσότερες φορές δεν έχουν αρκετά μεγάλο προϋπολογισμό για να επιτρέψουν την εκτεταμένη ανάπτυξη ενός παραδοσιακού backend. Επιπλέον, η συντήρηση του backend τόσο από την πλευρά του λογισμικού όσο και από την πλευρά του υλικού είναι μια εργασία που απαιτεί πόρους, η οποία θα μπορούσε να απαιτεί κάποιον όπως έναν system administrator για να αντιμετωπίσει αυτά τα ζητήματα οποιαδήποτε στιγμή παρουσιαστούν. Αν λάβουμε υπόψη το επιπρόσθετο κόστος για τη δημιουργία της υποδομής, είναι σαφές ότι ένα custom backend μπορεί να αποδειχθεί αρκετά ακριβό.
Backend as a Service
Μια λύση BaaS μπορεί να επιλύσει τα περισσότερα από τα ζητήματα που συνοδεύουν την παραδοσιακή προσέγγιση, αλλά δεν είναι χωρίς προβλήματα.
Πρώτον, χρησιμοποιώντας ένα BaaS, οι προγραμματιστές μπορούν να αναπτύξουν γρήγορα το backend τους, καθώς το εκτεταμένο σύνολο δυνατοτήτων των περισσότερων λύσεων BaaS καλύπτει τις πιο κοινές λειτουργικότητες των σύγχρονων εφαρμογών. Το μόνο που χρειάζεται να κάνουν οι προγραμματιστές είναι να διαβάσουν την τεκμηρίωση που παρέχεται από κάθε υπηρεσία, η οποία τις περισσότερες φορές συνοδεύεται από αποσπάσματα κώδικα για πολλές διαφορετικές γλώσσες προγραμματισμού. Ακολουθώντας την τεκμηρίωση, οι προγραμματιστές μπορούν να δοκιμάσουν γρήγορα νέες δυνατότητες, απλώς αντιγράφοντας και επικολλώντας τα παρεχόμενα αποσπάσματα και προσαρμόζοντάς τα στις συγκεκριμένες ανάγκες τους.
Το BaaS λύνει επίσης το πρόβλημα της συντήρησης και της υποδομής που αναφέραμε για το custom backend, καθώς η επίλυση αυτών των ζητημάτων αφήνεται σχεδόν εξ ολοκλήρου στον πάροχο υπηρεσιών. Κάποια BaaS δίνουν στους προγραμματιστές τη δυνατότητα να αναπτύξουν το backend τους στον δικό τους server χρησιμοποιώντας docker, οπότε μπορεί ακόμα να απαιτηθεί να δημιουργήσουν κάποια στοιχειώδη υποδομή για τον server τους. Ωστόσο, εάν ο πάροχος BaaS έχει γράψει λεπτομερή τεκμηρίωση για τη διαδικασία ανάπτυξης, τότε η διαδικασία αυτή είναι εύκολη.
Βλέπουμε ότι το BaaS είναι μια πιο οικονομική επιλογή, καθώς, στις περισσότερες περιπτώσεις, εξαλείφει την ανάγκη για κάποιον όπως έναν system administrator και δεν απαιτεί την υλοποίηση πολύπλοκων λειτουργιών όπως η αυθεντικοποίηση χρηστών. Πολλά BaaS παρέχουν δωρεάν πλάνο, το οποίο συνήθως επιτρέπει μια πιο περιορισμένη έκδοση των υπηρεσιών τους, όπως επιτρέποντας μικρότερο αριθμό request ή παρέχοντας λιγότερο χώρο αποθήκευσης από τα επί πληρωμή πλάνα, κάτι που είναι ιδανικό για το στάδιο ανάπτυξης. Ακόμα και όταν οι προγραμματιστές χρειάζονται περισσότερους πόρους, τα επί πληρωμή πλάνα κοστίζουν λιγότερο από την παραδοσιακή προσέγγιση.
Ωστόσο, το BaaS μπορεί μερικές φορές να εμποδίσει τη διαδικασία ανάπτυξης της εφαρμογής, σε περιπτώσεις όπου προκύπτει η ανάγκη για μια συγκεκριμένη λειτουργία, η οποία δεν υποστηρίζεται από το BaaS. Σε τέτοιες περιπτώσεις, ο προγραμματιστής μπορεί είτε να επιλέξει να εγκαταλείψει αυτήν τη λειτουργία εντελώς, είτε να μεταβεί σε άλλο BaaS. Εάν ο προγραμματιστής επιλέξει να μεταβεί σε αλλο BaaS, μπορεί να αντιμετωπίσει άλλο ένα ζήτημα, όπου δύο διαφορετικές λύσεις BaaS μπορεί να έχουν εντελώς διαφορετικές υλοποιήσεις. Για παράδειγμα, ένα BaaS μπορεί να έχει υλοποίηση SQL για την υπηρεσία βάσης δεδομένων τους, ενώ άλλο μπορεί να χρησιμοποιεί προσέγγιση noSQL. Αν ισχύει αυτό, ο προγραμματιστής θα πρέπει να μετατρέψει ολόκληρη τη βάση δεδομένων του σε έναν εντελώς διαφορετικό τύπο, κάτι που με τη σειρά του θα απαιτήσει αλλαγές στο σχήμα της βάσης δεδομένων, και μερικές φορές ακόμη και αλλαγές σε ήδη υλοποιημένες δυνατότητες. Όλα αυτά μπορούν να γίνουν κουραστικά και χρονοβόρα.
Ένα άλλο πρόβλημα με την προσέγγιση BaaS μπορεί να είναι η έλλειψη λεπτομερούς τεκμηρίωσης. Αυτό δεν αποτελεί πρόβλημα για όλες τις λύσεις BaaS, αλλά σε ορισμένες περιπτώσεις η παρεχόμενη τεκμηρίωση μπορεί να βασίζεται σε μια πολύ συγκεκριμένη περίπτωση χρήσης, η οποία θα αναγκάσει τον προγραμματιστή είτε να συμμορφωθεί με την περίπτωση χρήσης του παραδείγματος είτε να αναζητήσει φόρουμ τρίτων, τα οποία μπορεί να είναι ξεπερασμένα και να σπαταλήσουν τον χρόνο του προγραμματιστή. Αυτό δεν θα συνέβαινε με την παραδοσιακή προσέγγιση, καθώς επιτρέπει στον προγραμματιστή να προσαρμόζει κάθε υπηρεσία ακριβώς στην περίπτωση χρήσης του.
Συμπέρασμα
Τελικά, κάθε λύση έχει τόσο πλεονεκτήματα όσο και μειονεκτήματα που θα πρέπει να ληφθούν υπόψη κατά τη διαδικασία σχεδιασμού. Η επιλογή της χρήσης ενός custom backend θα μπορούσε να οδηγήσει στη δημιουργία μιας πιο εύρωστης εφαρμογής που επιτρέπει στον προγραμματιστή να γνωρίζει ακριβώς τι συμβαίνει με αυτήν σε περίπτωση που παρουσιαστεί κάποιο πρόβλημα, ενώ θυσιάζει πολύτιμους πόρους για την υλοποίηση και συντήρησή της. Η επιλογή της χρήσης ενός BaaS μπορεί να επιτρέψει στον προγραμματιστή να ρυθμίσει γρήγορα το backend του και να του προσφέρει ηρεμία όσον αφορά τη συντήρησή του, αλλά τον αναγκάζει να ακολουθήσει ένα πιο αυστηρό σύνολο λειτουργιών που ακολουθούν τις παρεχόμενες υπηρεσίες, ενώ μπορεί να προκαλέσει προβλήματα σε περίπτωση που θελήσει να μεταβεί σε άλλη λύση.