Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

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

Είχαμε λοιπόν την τιμή να δημιουργήσουμε μια πλατφόρμα cloud και για αυτό χρειαζόταν να «πείσουμε» μερικά υποσυστήματα να συνεργαστούν μαζί μας. Ευτυχώς, έχουμε μια "γλώσσα API", άμεσα χέρια και πολύ ενθουσιασμό.

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

Καλώς ήρθατε στο cat.

Ξεκινώντας από ένα ταξίδι

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

Υπήρχαν επίσης μια σειρά από απαιτήσεις:

  • η υπηρεσία χρειάζεται έναν βολικό προσωπικό λογαριασμό.
  • η πλατφόρμα πρέπει να ενσωματωθεί στο υπάρχον σύστημα τιμολόγησης·
  • λογισμικό και υλικό: OpenStack + Tungsten Fabric (Open Contrail), το οποίο οι μηχανικοί μας έχουν μάθει να «μαγειρεύουν» αρκετά καλά.

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

  • Python + Flask + Swagger + SQLAlchemy - ένα εντελώς τυπικό σύνολο Python.
  • Vue.js για frontend.
  • Αποφασίσαμε να κάνουμε την αλληλεπίδραση μεταξύ στοιχείων και υπηρεσιών χρησιμοποιώντας το Celery μέσω AMQP.

Προβλέποντας ερωτήσεις σχετικά με την επιλογή της Python, θα εξηγήσω. Η γλώσσα έχει βρει τη θέση της στην εταιρεία μας και γύρω της έχει αναπτυχθεί μια μικρή, αλλά ακόμα κουλτούρα. Ως εκ τούτου, αποφασίστηκε να ξεκινήσει η κατασκευή της υπηρεσίας σε αυτό. Επιπλέον, η ταχύτητα ανάπτυξης σε τέτοια προβλήματα είναι συχνά καθοριστική.

Λοιπόν, ας ξεκινήσουμε τη γνωριμία μας.

Silent Bill - τιμολόγηση

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Το Billing είναι το πρώτο σύστημα με το οποίο προσπαθήσαμε να κάνουμε φίλους. Και η πρώτη δυσκολία που συναντήσαμε ήταν κατά την επεξεργασία των υπηρεσιών.

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Κρίνοντας από την περιγραφή του API λογισμικού, εξακολουθεί να είναι δυνατή η επίλυση αυτού του προβλήματος, αλλά δεν είχαμε χρόνο να κάνουμε αντίστροφη μηχανική, οπότε βγάλαμε τη λογική και οργανώσαμε μια ουρά εργασιών πάνω από το RabbitMQ. Μια λειτουργία σε μια υπηρεσία ξεκινά από τον πελάτη από τον προσωπικό του λογαριασμό, μετατρέπεται σε "εργασία" Celery στο backend και εκτελείται στην πλευρά χρέωσης και OpenStack. Το σέλινο καθιστά αρκετά βολικό τη διαχείριση εργασιών, την οργάνωση επαναλήψεων και την παρακολούθηση της κατάστασης. Μπορείτε να διαβάσετε περισσότερα για το «σέλινο», για παράδειγμα, εδώ.

Επίσης, η τιμολόγηση δεν σταμάτησε ένα έργο που ξέμεινε από χρήματα. Επικοινωνώντας με τους προγραμματιστές, ανακαλύψαμε ότι κατά τον υπολογισμό των στατιστικών (και πρέπει να εφαρμόσουμε ακριβώς αυτό το είδος λογικής), υπάρχει μια περίπλοκη αλληλεπίδραση κανόνων διακοπής. Αλλά αυτά τα μοντέλα δεν ταιριάζουν καλά με την πραγματικότητά μας. Το εφαρμόσαμε επίσης μέσω εργασιών στο Celery, μεταφέροντας τη λογική διαχείρισης υπηρεσιών στην πλευρά του backend.

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

Ένα άλλο πρόβλημα είναι η σιωπή.

Ο Billy απαντά σιωπηλά "Ok" σε ορισμένα αιτήματα API. Αυτό συνέβαινε, για παράδειγμα, όταν κάναμε πληρωμές υποσχεμένων πληρωμών κατά τη διάρκεια της δοκιμής (περισσότερα για αυτό αργότερα). Τα αιτήματα εκτελέστηκαν σωστά και δεν είδαμε σφάλματα.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

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

Γενικά, παρά τα κενά στην τεκμηρίωση και τα μικρά ελαττώματα του API, όλα πήγαν αρκετά καλά. Τα αρχεία καταγραφής μπορούν να διαβαστούν ακόμη και κάτω από μεγάλο φορτίο, εάν κατανοείτε πώς είναι δομημένα και τι πρέπει να αναζητήσετε. Η δομή της βάσης δεδομένων είναι περίτεχνη, αλλά αρκετά λογική και κατά κάποιο τρόπο ακόμη και ελκυστική.

Έτσι, για να συνοψίσουμε, τα κύρια προβλήματα που αντιμετωπίσαμε στο στάδιο της αλληλεπίδρασης σχετίζονται με τα χαρακτηριστικά υλοποίησης ενός συγκεκριμένου συστήματος:

  • μη τεκμηριωμένα «χαρακτηριστικά» που μας επηρέασαν με τον ένα ή τον άλλο τρόπο.
  • κλειστού κώδικα (η χρέωση είναι γραμμένη σε C++), ως αποτέλεσμα - είναι αδύνατο να λυθεί το πρόβλημα 1 με οποιονδήποτε άλλο τρόπο εκτός από "δοκιμή και σφάλμα".

Ευτυχώς, το προϊόν διαθέτει ένα αρκετά εκτεταμένο API και έχουμε ενσωματώσει τα ακόλουθα υποσυστήματα στον προσωπικό μας λογαριασμό:

  • ενότητα τεχνικής υποστήριξης - τα αιτήματα από τον προσωπικό σας λογαριασμό «διοχετεύονται» με διαφανή χρέωση για πελάτες υπηρεσιών.
  • οικονομική ενότητα - σας επιτρέπει να εκδίδετε τιμολόγια σε τρέχοντες πελάτες, να κάνετε διαγραφές και να δημιουργείτε έγγραφα πληρωμής.
  • μονάδα ελέγχου υπηρεσίας - για αυτό έπρεπε να εφαρμόσουμε τον δικό μας χειριστή. Η επεκτασιμότητα του συστήματος έπαιξε στα χέρια μας και «διδάξαμε» στον Billy ένα νέο είδος υπηρεσίας.
    Ήταν λίγη ταλαιπωρία, αλλά με τον ένα ή τον άλλο τρόπο, νομίζω ότι με τον Μπίλι θα τα πάμε καλά.

Περπάτημα μέσα από χωράφια βολφραμίου – Ύφασμα βολφραμίου

Πεδία βολφραμίου διάστικτα με εκατοντάδες καλώδια, περνώντας χιλιάδες κομμάτια πληροφοριών μέσα από αυτά. Οι πληροφορίες συλλέγονται σε «πακέτα», αναλύονται, δημιουργώντας περίπλοκες διαδρομές, ως δια μαγείας.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Αυτός είναι ο τομέας του δεύτερου συστήματος με το οποίο έπρεπε να κάνουμε φίλους - το Tungsten Fabric (TF), πρώην OpenContrail. Το καθήκον του είναι να διαχειρίζεται τον εξοπλισμό δικτύου, παρέχοντας μια αφαίρεση λογισμικού σε εμάς ως χρήστες. TF - SDN, ενσωματώνει τη σύνθετη λογική της εργασίας με εξοπλισμό δικτύου. Υπάρχει ένα καλό άρθρο για την ίδια την τεχνολογία, για παράδειγμα, εδώ.

Το σύστημα είναι ενσωματωμένο με το OpenStack (αναφέρεται παρακάτω) μέσω της προσθήκης Neutron.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk
Αλληλεπίδραση των υπηρεσιών OpenStack.

Τα παιδιά από το τμήμα επιχειρήσεων μας μύησαν σε αυτό το σύστημα. Χρησιμοποιούμε το API του συστήματος για τη διαχείριση της στοίβας δικτύου των υπηρεσιών μας. Δεν μας έχει προκαλέσει ακόμη σοβαρά προβλήματα ή ενοχλήσεις (δεν μπορώ να μιλήσω για τα παιδιά από την ΟΕ), αλλά υπήρξαν κάποιες παραξενιές στην αλληλεπίδραση.

Η πρώτη φαινόταν κάπως έτσι: οι εντολές που απαιτούσαν την έξοδο μεγάλου όγκου δεδομένων στην κονσόλα παρουσίας κατά τη σύνδεση μέσω SSH απλώς «έκλεισαν» τη σύνδεση, ενώ μέσω VNC όλα λειτουργούσαν σωστά.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Για όσους δεν είναι εξοικειωμένοι με το πρόβλημα, φαίνεται αρκετά αστείο: το ls /root λειτουργεί σωστά, ενώ, για παράδειγμα, το top «παγώνει» εντελώς. Ευτυχώς, έχουμε αντιμετωπίσει παρόμοια προβλήματα στο παρελθόν. Αποφασίστηκε συντονίζοντας το MTU στη διαδρομή από τους κόμβους υπολογιστών στους δρομολογητές. Παρεμπιπτόντως, αυτό δεν είναι πρόβλημα TF.

Το επόμενο πρόβλημα ήταν προ των πυλών. Σε μια «όμορφη» στιγμή, η μαγεία της δρομολόγησης εξαφανίστηκε, έτσι ακριβώς. Η TF έχει σταματήσει να διαχειρίζεται τη δρομολόγηση στον εξοπλισμό.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Δουλέψαμε με το Openstack από το επίπεδο διαχειριστή και μετά μεταβήκαμε στο απαιτούμενο επίπεδο χρήστη. Το SDN φαίνεται να "πειρατεύει" το εύρος του χρήστη από τον οποίο εκτελούνται οι ενέργειες. Το γεγονός είναι ότι ο ίδιος λογαριασμός διαχειριστή χρησιμοποιείται για τη σύνδεση TF και OpenStack. Στο βήμα της μετάβασης στον χρήστη, η «μαγεία» εξαφανίστηκε. Αποφασίστηκε να δημιουργηθεί ένας ξεχωριστός λογαριασμός για εργασία με το σύστημα. Αυτό μας επέτρεψε να εργαζόμαστε χωρίς να παραβιάζουμε τη λειτουργία ενσωμάτωσης.

Silicon Lifeforms - OpenStack

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Το OpenStack είναι ο πυρήνας της πλατφόρμας μας.

Το OpenStack έχει πολλά υποσυστήματα, από τα οποία επί του παρόντος χρησιμοποιούμε πιο ενεργά τα Nova, Glance και Cinder. Κάθε ένα από αυτά έχει το δικό του API. Η Nova είναι υπεύθυνη για τους υπολογιστικούς πόρους και τη δημιουργία παρουσιών, η Cinder είναι υπεύθυνη για τη διαχείριση τόμων και των στιγμιότυπών τους, η Glance είναι μια υπηρεσία εικόνας που διαχειρίζεται πρότυπα λειτουργικού συστήματος και μεταπληροφορίες σε αυτά.

Κάθε υπηρεσία εκτελείται σε ένα κοντέινερ και ο μεσίτης μηνυμάτων είναι το "λευκό κουνέλι" - RabbitMQ.

Αυτό το σύστημα μας δημιούργησε το πιο απροσδόκητο πρόβλημα.

Και το πρώτο πρόβλημα δεν άργησε να εμφανιστεί όταν προσπαθήσαμε να συνδέσουμε έναν επιπλέον τόμο στον διακομιστή. Το Cinder API αρνήθηκε κατηγορηματικά να εκτελέσει αυτήν την εργασία. Πιο συγκεκριμένα, εάν πιστεύετε ότι το ίδιο το OpenStack, η σύνδεση έχει δημιουργηθεί, αλλά δεν υπάρχει συσκευή δίσκου μέσα στον εικονικό διακομιστή.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

Αποφασίσαμε να κάνουμε μια παράκαμψη και ζητήσαμε την ίδια ενέργεια από το Nova API. Το αποτέλεσμα είναι ότι η συσκευή συνδέεται σωστά και είναι προσβάσιμη στον διακομιστή. Φαίνεται ότι το πρόβλημα παρουσιάζεται όταν η αποθήκευση μπλοκ δεν ανταποκρίνεται στο Cinder.

Μια άλλη δυσκολία μας περίμενε όταν δουλεύαμε με δίσκους. Δεν ήταν δυνατή η αποσύνδεση του τόμου συστήματος από τον διακομιστή.

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

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

Το OpenStack είναι ένα αρκετά περίπλοκο σύνολο συστημάτων με τη δική του λογική αλληλεπίδρασης και περίτεχνο API. Μας βοηθά η αρκετά λεπτομερής τεκμηρίωση και, φυσικά, η δοκιμή και το λάθος (που θα ήμασταν χωρίς αυτό).

Δοκιμαστικό τρέξιμο

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

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

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

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

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

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk

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

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

Για να συνεχιστεί

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

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

Ήδη καταφέραμε να πείσουμε τα συστήματα. Ο Bill χειρίζεται με υπευθυνότητα την καταμέτρηση, τη χρέωση και τα αιτήματα των χρηστών στην ντουλάπα του. Η «μαγεία» των πεδίων βολφραμίου μας παρέχει σταθερή επικοινωνία. Και μόνο το OpenStack μερικές φορές γίνεται ιδιότροπο, φωνάζοντας κάτι σαν ""Το WSREP δεν έχει ακόμη προετοιμάσει τον κόμβο για χρήση εφαρμογής." Αλλά αυτή είναι μια εντελώς διαφορετική ιστορία...

Ξεκινήσαμε πρόσφατα την υπηρεσία.
Μπορείτε να μάθετε όλες τις λεπτομέρειες στο δικό μας Σε απευθείας σύνδεση.

Η ιστορία της δημιουργίας μιας υπηρεσίας cloud, με γεύση cyberpunk
Ομάδα ανάπτυξης CLO

χρήσιμοι σύνδεσμοι

OpenStack

Ύφασμα βολφραμίου

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο