Προσέγγιση χωρίς διακομιστή για γρήγορη ανάπτυξη μιας υπηρεσίας βίντεο που λειτουργεί

Προσέγγιση χωρίς διακομιστή για γρήγορη ανάπτυξη μιας υπηρεσίας βίντεο που λειτουργεί

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

Δεδομένος: λογαριασμός root στο AWS, χωρίς περιορισμούς στην επιλογή στοίβας τεχνολογίας, ένα backend και έναν μήνα για ανάπτυξη.

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

Λύση

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

Η τυπική λύση για την εργασία με βίντεο είναι το FFmpeg, ένα βοηθητικό πρόγραμμα κονσόλας πολλαπλών πλατφορμών που, μέσω επιχειρημάτων, σας επιτρέπει να κόβετε και να υπερδιπλασιάζετε τον ήχο. Το μόνο που μένει να κάνετε είναι να γράψετε ένα περιτύλιγμα και να το απελευθερώσετε στη ζωή. Γράφουμε ένα πρωτότυπο που συρράπτει δύο βίντεο και... η διασκέδαση αρχίζει. Η βιβλιοθήκη βασίζεται στο .NET Core 2, θα πρέπει να τρέχει σε οποιαδήποτε εικονική μηχανή, οπότε παίρνουμε μια παρουσία AWS EC2 και όλα θα λειτουργήσουν

Κρυφό κείμενοόχι, δεν θα λειτουργήσει
.
Αν και το FFmpeg απλοποιεί την εργασία, για μια πραγματικά λειτουργική λύση πρέπει να δημιουργήσετε μια παρουσία EC2 και να σχεδιάσετε μια υποδομή δικτύου για αυτήν, συμπεριλαμβανομένου ενός Load Balancer. Το απλό έργο της ανάπτυξης από την αρχή γίνεται «λίγο» πιο περίπλοκο και η υποδομή αρχίζει να απαιτεί χρήματα αμέσως - κάθε ώρα το ποσό για το χρόνο εκτέλεσης αποσύρεται από τον λογαριασμό πελάτη.

Η υπηρεσία μας δεν περιλαμβάνει μακροχρόνιες διαδικασίες, δεν απαιτεί μεγάλη και λίγη σχεσιακή βάση δεδομένων και ταιριάζει απόλυτα σε μια αρχιτεκτονική που βασίζεται σε συμβάντα με μια αλυσίδα κλήσεων μικροϋπηρεσιών. Η λύση προτείνεται από μόνη της - μπορούμε να εγκαταλείψουμε το EC2 και να εφαρμόσουμε μια εφαρμογή χωρίς διακομιστή, όπως το τυπικό Image Resizer που βασίζεται στο AWS Lambda.

Παρεμπιπτόντως, παρά την προφανή αντιπάθεια των προγραμματιστών AWS για το .NET, υποστηρίζουν το .NET Core 2.1 ως χρόνο εκτέλεσης, το οποίο παρέχει ένα πλήρες φάσμα ευκαιριών ανάπτυξης.

Και το cherry on the cake - AWS παρέχει μια ξεχωριστή υπηρεσία για εργασία με αρχεία βίντεο - AWS Elemental MediaConvert.

Η ουσία της δουλειάς είναι απίστευτα απλή: παίρνουμε έναν σύνδεσμο S3 στο εξερχόμενο βίντεο, γράφουμε μέσω AWS Console, .NET SDK ή απλά JSON τι θέλουμε να κάνουμε με το βίντεο και καλούμε την υπηρεσία. Η ίδια υλοποιεί ουρές για την επεξεργασία των εισερχόμενων αιτημάτων, ανεβάζει το ίδιο το αποτέλεσμα στο S3 και, το πιο σημαντικό, δημιουργεί ένα συμβάν CloudWatch για κάθε αλλαγή κατάστασης. Αυτό μας επιτρέπει να εφαρμόσουμε ενεργοποιητές λάμδα για να ολοκληρώσουμε την επεξεργασία βίντεο.

Προσέγγιση χωρίς διακομιστή για γρήγορη ανάπτυξη μιας υπηρεσίας βίντεο που λειτουργεί
Έτσι φαίνεται η τελική αρχιτεκτονική:

Ολόκληρο το backend στεγάζεται σε δύο λάμδα. Ένα άλλο είναι για περιστρεφόμενα κατακόρυφα βίντεο, αφού τέτοια εργασία δεν μπορεί να γίνει με ένα πέρασμα.

Θα τοποθετήσουμε το μπροστινό μέρος με τη μορφή μιας εφαρμογής SPA γραμμένη σε JS και μεταγλωττισμένη μέσω pug σε έναν δημόσιο κάδο S3. Για να κατεβάσουμε τα ίδια τα βίντεο, δεν χρειαζόμαστε κώδικα διακομιστή - απλά πρέπει να ανοίξουμε τα τελικά σημεία REST που μας παρέχει το S3. Το μόνο πράγμα είναι μην ξεχάσετε να διαμορφώσετε τις πολιτικές και το CORS.

Παγίδες

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

Εύκολο παγοδρόμιο

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

Ο διακομιστής επιτρέπει τέλεια την εργασία με NoOps - μια προσέγγιση που προϋποθέτει την περιττή ύπαρξη μιας ξεχωριστής ομάδας υπεύθυνης για την υποδομή του έργου. Επομένως, ήταν ένα μικρό θέμα - αναπτύσσουμε τη λύση στο AWS χωρίς τη συμμετοχή διαχειριστών συστήματος, οι οποίοι έχουν πάντα κάτι να κάνουν ούτως ή άλλως.
Και για να επιταχύνουμε όλα αυτά, αυτοματοποιούμε όσο το δυνατόν περισσότερο το σενάριο ανάπτυξης στο AWS CloudFormation, το οποίο σας επιτρέπει να αναπτύξετε με ένα κουμπί απευθείας από το VS. Ως αποτέλεσμα, ένα αρχείο 200 γραμμών κώδικα σάς επιτρέπει να αναπτύξετε μια έτοιμη λύση, αν και η σύνταξη του CloudFormation μπορεί να είναι συγκλονιστική αν δεν την έχετε συνηθίσει.

Σε συνολικά

Ο διακομιστής δεν είναι πανάκεια. Αλλά θα κάνει τη ζωή πολύ πιο εύκολη σε καταστάσεις με τρία όρια: «περιορισμένους πόρους—βραχυπρόθεσμα—λίγα χρήματα».

Χαρακτηριστικά Εφαρμογών Κατάλληλες για Διακομιστές

  • χωρίς μακροχρόνιες διαδικασίες. Το σκληρό όριο API Gateway είναι 29 δευτερόλεπτα, το όριο σκληρού λάμδα είναι 5 λεπτά.
  • περιγράφεται από την αρχιτεκτονική με γνώμονα την εκδήλωση.
  • διασπάται σε χαλαρά συζευγμένα στοιχεία όπως το SOA.
  • δεν απαιτεί πολλή δουλειά με την κατάστασή σας.
  • γραμμένο σε .NET Core. Για να εργαστείτε με το .NET Framework, θα χρειαστείτε τουλάχιστον Docker με τον κατάλληλο χρόνο εκτέλεσης.

Πλεονεκτήματα της προσέγγισης χωρίς διακομιστή

  • μειώνει το κόστος υποδομής·
  • μειώνει το κόστος παράδοσης της λύσης·
  • αυτόματη επεκτασιμότητα.
  • ανάπτυξη στην αιχμή της τεχνολογικής προόδου.

Μειονεκτήματα, με συγκεκριμένο παράδειγμα

  • Κατανεμημένη ανίχνευση και καταγραφή - επιλύθηκε εν μέρει μέσω του AWS X-Ray και του AWS CloudWatch.
  • άβολο εντοπισμό σφαλμάτων?
  • Ψυχρή εκκίνηση όταν δεν υπάρχει φορτίο.
  • Το AWS user-hostile διεπαφή είναι ένα παγκόσμιο πρόβλημα :)

Πηγή: www.habr.com

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