Σε μια multi-tenant πλατφόρμα SaaS, μία εφαρμογή εξυπηρετεί πολλούς πελάτες και τα δεδομένα του καθενός μένουν αόρατα στους υπόλοιπους. Ο βασικός κίνδυνος είναι η διαρροή ανάμεσα σε πελάτες. Στην κατασκευή SaaS πλατφόρμας τον αντιμετωπίζουμε μέσα στη βάση δεδομένων, όχι μόνο στις οθόνες.
Τι περιλαμβάνει η κατασκευή SaaS πλατφόρμας;
Ένα προϊόν SaaS δεν είναι μια εφαρμογή με σελίδα σύνδεσης. Από την αρχή σχεδιάζουμε τα εξής.
- Πελάτες (tenants) και χρήστες, με ρόλους και προσκλήσεις.
- Απομόνωση δεδομένων ανάμεσα στους πελάτες.
- Εργασίες παρασκηνίου για ό,τι δεν πρέπει να καθυστερεί μια σελίδα.
- Αποθήκευση αρχείων για uploads και έγγραφα που παράγονται.
- Τιμολόγηση και συνδρομές.
- Φιλοξενία, αντίγραφα ασφαλείας και παρακολούθηση.
Πώς κρατάμε τα δεδομένα κάθε πελάτη χωριστά;
Η συνηθισμένη λύση φιλτράρει κάθε ερώτημα με το αναγνωριστικό του πελάτη μέσα στον κώδικα. Δουλεύει, μέχρι να ξεχάσει ένα ερώτημα το φίλτρο. Τότε έχουμε διαρροή δεδομένων, και είναι εύκολο να γραφτεί κατά λάθος.
Προσθέτουμε δεύτερο επίπεδο. Στο Forkly και στο Mesito την απομόνωση την επιβάλλει η ίδια η βάση, με row-level security της PostgreSQL. Κάθε αίτημα δηλώνει στη βάση για ποιον πελάτη ενεργεί, και η βάση επιστρέφει μόνο τις γραμμές αυτού του πελάτη, ακόμη και αν ένα ερώτημα είναι λάθος.
Αυτό ισχύει μόνο για το Forkly και το Mesito. Το Kommo είναι αγορά με διαφορετικό μοντέλο δεδομένων και δεν κάνουμε τέτοιον ισχυρισμό γι’ αυτό.
| Προσέγγιση | Πλεονέκτημα | Κόστος |
|---|---|---|
| Φίλτρο ανά πελάτη μόνο στον κώδικα | Απλή | Ένα φίλτρο που λείπει διαρρέει δεδομένα |
| Κοινή βάση με row-level security | Ισχυρή και οικονομική στη λειτουργία | Θέλει προσεκτικό σχεδιασμό και tests |
| Ξεχωριστή βάση ανά πελάτη | Ο ισχυρότερος διαχωρισμός | Περισσότερα να λειτουργήσετε, να αναβαθμίσετε και να αντιγράψετε |
Για τις περισσότερες επιχειρησιακές πλατφόρμες η μεσαία επιλογή είναι η σωστή ισορροπία. Αν έχετε πελάτη με αυστηρές συμβατικές απαιτήσεις, μπορούμε να συζητήσουμε την τρίτη.
Πώς δουλεύουν οι εργασίες παρασκηνίου;
Email, εισαγωγές, ειδοποιήσεις και αναφορές τρέχουν σε workers, έξω από το αίτημα του χρήστη. Τα προϊόντα μας χρησιμοποιούν ουρές πάνω σε PostgreSQL (pg-boss) ή σε Redis (BullMQ). Οι προγραμματισμένες εργασίες γράφονται έτσι ώστε, αν τρέχουν δύο αντίγραφα ταυτόχρονα, τίποτα να μην εκτελείται δύο φορές. Αυτό μετράει τη μέρα που θα προστεθεί δεύτερος server.
Πού πηγαίνουν τα αρχεία;
Τα uploads, τα έγγραφα και τα PDF που παράγονται πηγαίνουν σε object storage συμβατό με S3, όχι στον δίσκο του server της εφαρμογής. Ο ίδιος κώδικας δουλεύει σήμερα με το Garage και μπορεί να δουλέψει με άλλον πάροχο S3 αλλάζοντας ρυθμίσεις. Το Kommo τρέχει επιπλέον pipeline επεξεργασίας βίντεο πάνω σε αυτή τη βάση.
Τι γίνεται με την τιμολόγηση και τις συνδρομές;
Το Forkly έχει ενσωματωμένες συνδρομές και τιμολόγηση, οπότε το ίδιο το προϊόν χειρίζεται επαναλαμβανόμενα πακέτα και τιμολόγια. Η τιμολόγηση είναι εκεί όπου οι απαιτήσεις διαφέρουν περισσότερο: πακέτα, δοκιμαστικές περίοδοι, φορολογικοί κανόνες, μορφές τιμολογίων και πάροχος πληρωμών. Τα ορίζουμε στο στάδιο του σχεδιασμού, πριν γραφτεί κώδικας.
Πώς φιλοξενούμε και παρακολουθούμε την πλατφόρμα;
Τα δικά μας προϊόντα τρέχουν σε containers, με αυτόματα αντίγραφα ασφαλείας και παρακολούθηση, και προσφέρουμε το ίδιο για πλατφόρμες πελατών. Οι εικόνες χτίζονται μία φορά και ανεβαίνουν ανά έκδοση, οπότε μια αναβάθμιση μπορεί να γυρίσει πίσω.
Το Forkly είναι δημόσια προεπισκόπηση με δοκιμαστικά καταστήματα, όχι προϊόν σε πλήρη λειτουργία. Το γράφουμε και στη σελίδα του.
Πού να πάτε στη συνέχεια
Δείτε την ευρύτερη υπηρεσία λογισμικού ή την πλευρά των web εφαρμογών της ίδιας δουλειάς. Για να συζητήσουμε μια πλατφόρμα, επικοινωνήστε μαζί μας.