Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες

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

Είναι ξεκάθαρο ότι ήταν ένα συναρπαστικό τρίμηνο. Αλλά από έξω δεν είναι εντελώς προφανές: τι είναι μια διαδικτυακή πλατφόρμα συνεδρίων; Από ποια μέρη αποτελείται; Ως εκ τούτου, στα τελευταία συνέδρια του καλοκαιριού DevOops, ρώτησα αυτούς που ήταν υπεύθυνοι για αυτήν την εργασία:

  • Nikolay Molchanov - τεχνικός διευθυντής του Ομίλου JUG Ru.
  • Ο Vladimir Krasilshchik είναι ένας ρεαλιστής προγραμματιστής Java που εργάζεται στο backend (μπορείτε επίσης να δείτε τις αναφορές του στα συνέδριά μας Java).
  • Ο Artyom Nikonov είναι υπεύθυνος για όλη τη ροή βίντεο μας.

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

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες

Μεγάλη εικόνα

— Ποια ήταν η σύνθεση της ομάδας;

Νικολάι Μολτσάνοφ: Έχουμε έναν αναλυτή, έναν σχεδιαστή, έναν ελεγκτή, τρία front-ender και ένα back-end. Και, φυσικά, ειδικός σε σχήμα Τ!

— Πώς φαινόταν γενικά η διαδικασία;

Νικολάι: Μέχρι τα μέσα Μαρτίου, δεν είχαμε τίποτα έτοιμο για online. Και στις 15 Μαρτίου, όλο το διαδικτυακό καρουσέλ άρχισε να γυρίζει. Δημιουργήσαμε πολλά αποθετήρια, σχεδιάσαμε, συζητήσαμε τη βασική αρχιτεκτονική και κάναμε τα πάντα σε τρεις μήνες.

Αυτό, φυσικά, πέρασε από τα κλασικά στάδια του σχεδιασμού, της αρχιτεκτονικής, της επιλογής χαρακτηριστικών, της ψηφοφορίας για αυτά τα χαρακτηριστικά, της πολιτικής για αυτά τα χαρακτηριστικά, του σχεδιασμού, της ανάπτυξης, της δοκιμής. Ως αποτέλεσμα, στις 6 Ιουνίου, κυκλοφορήσαμε τα πάντα στην παραγωγή. TechTrain. Υπήρχαν 90 μέρες για όλα.

— Καταφέραμε να πετύχουμε αυτό που δεσμευτήκαμε;

Νικολάι: Δεδομένου ότι τώρα συμμετέχουμε στο συνέδριο DevOops online, σημαίνει ότι λειτούργησε. Προσωπικά δεσμεύτηκα για το κύριο πράγμα: θα φέρω στους πελάτες ένα εργαλείο με το οποίο μπορούν να κάνουν μια διαδικτυακή διάσκεψη.

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

Όλος ο σχεδιασμός χωρίστηκε σε διάφορα στάδια και όλα τα χαρακτηριστικά (περίπου 30 παγκόσμια) χωρίστηκαν σε 4 κατηγορίες:

  • που σίγουρα θα κάνουμε (δεν μπορούμε να ζήσουμε χωρίς αυτά),
  • που θα κάνουμε δεύτερον,
  • που δεν θα κάνουμε ποτέ,
  • και που ποτέ μα ποτέ δεν θα κάνουμε.

Κατασκευάσαμε όλα τα χαρακτηριστικά από τις δύο πρώτες κατηγορίες.

— Γνωρίζω ότι δημιουργήθηκαν συνολικά 600 τεύχη JIRA. Σε τρεις μήνες έκανες 13 microservices και υποψιάζομαι ότι δεν γράφτηκαν μόνο σε Java. Χρησιμοποιήσατε διαφορετικές τεχνολογίες, έχετε δύο συμπλέγματα Kubernetes σε τρεις ζώνες διαθεσιμότητας και 5 ροές RTMP στο Amazon.

Ας δούμε τώρα κάθε στοιχείο του συστήματος ξεχωριστά.

Ροή

— Ας ξεκινήσουμε όταν έχουμε ήδη μια εικόνα βίντεο και μεταδίδεται σε ορισμένες υπηρεσίες. Artyom, πες μας πώς συμβαίνει αυτό το streaming;

Artyom Nikonov: Το γενικό μας σχήμα μοιάζει με αυτό: εικόνα από την κάμερα -> δωμάτιο ελέγχου μας -> τοπικός διακομιστής RTMP -> Amazon -> πρόγραμμα αναπαραγωγής βίντεο. Περισσότερες λεπτομέρειες έγραψε σχετικά στο Habré τον Ιούνιο.

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

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

Τα σήματα από αυτές τις συσκευές εισέρχονται σε υπολογιστές με κάρτες λήψης, κάρτες εισόδου/εξόδου και κάρτες ήχου. Εκεί τα σήματα αναμειγνύονται και συναρμολογούνται σε διατάξεις:

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες
Παράδειγμα διάταξης για 4 ηχεία

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες
Παράδειγμα διάταξης για 4 ηχεία

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

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

Στη συνέχεια, οι ροές από τους υπολογιστές πηγαίνουν σε έναν τοπικό διακομιστή, ο οποίος έχει δύο εργασίες: δρομολόγηση ροών RTMP και δημιουργία αντιγράφων ασφαλείας εγγραφής. Άρα έχουμε πολλαπλά σημεία ηχογράφησης. Στη συνέχεια, οι ροές βίντεο αποστέλλονται στο τμήμα του συστήματός μας που βασίζεται στις υπηρεσίες Amazon SaaS. Χρησιμοποιούμε MediaLive:,S3,CloudFront.

Νικολάι: Τι συμβαίνει εκεί πριν το βίντεο φτάσει στο κοινό; Πρέπει να το κόψεις με κάποιο τρόπο, σωστά;

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

— Χρησιμοποιούμε ανάλυση 1080p;

Artyom: Το πλάτος του βίντεό μας είναι το ίδιο με 1080p - 1920 pixel, και το ύψος είναι λίγο μικρότερο, η εικόνα είναι πιο επιμήκης - υπάρχουν λόγοι για αυτό.

Παίχτης

— Ο Artyom περιέγραψε πώς το βίντεο μπαίνει σε ροές, πώς διανέμεται σε διαφορετικές λίστες αναπαραγωγής για διαφορετικές αναλύσεις οθόνης, κόβεται σε κομμάτια και μπαίνει στη συσκευή αναπαραγωγής. Κόλια, πες μου τώρα τι είδους παίκτης είναι αυτός, πώς καταναλώνει το stream, γιατί HLS;

Νικολάι: Έχουμε ένα πρόγραμμα αναπαραγωγής που μπορούν να παρακολουθήσουν όλοι οι θεατές του συνεδρίου.

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες

Ουσιαστικά, αυτό είναι ένα περιτύλιγμα γύρω από τη βιβλιοθήκη hls.js, στο οποίο είναι γραμμένοι πολλοί άλλοι παίκτες. Χρειαζόμασταν όμως πολύ συγκεκριμένη λειτουργικότητα: επανατύλιξη και σήμανση του σημείου όπου βρίσκεται το άτομο, ποια αναφορά παρακολουθεί αυτήν τη στιγμή. Χρειαζόμασταν επίσης τις δικές μας διατάξεις, κάθε είδους λογότυπα και ό,τι άλλο ήταν ενσωματωμένο μαζί μας. Ως εκ τούτου, αποφασίσαμε να γράψουμε τη δική μας βιβλιοθήκη (ένα περιτύλιγμα πάνω από HLS) και να την ενσωματώσουμε στον ιστότοπο.

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

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

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες
Παράδειγμα χρονοδιαγράμματος

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

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

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

— Υπήρχαν τεχνικές δυσκολίες με αυτό;

Νικολάι: Είχαν μια μπάρα κύλισης στην οποία σημειώνονταν τα σημεία εκκίνησης διαφορετικών αναφορών.

— Τελικά, εφαρμόσατε αυτά τα σημάδια στη γραμμή κύλισης προτού το YouTube κάνει κάτι παρόμοιο;

Artyom: Το είχαν τότε σε beta. Φαίνεται ότι αυτό είναι ένα αρκετά περίπλοκο χαρακτηριστικό, επειδή το δοκίμασαν εν μέρει με χρήστες τον περασμένο χρόνο. Και τώρα έφτασε στην πώληση.

Νικολάι: Αλλά στην πραγματικότητα το πουλήσαμε πιο γρήγορα. Ειλικρινά, πίσω από αυτό το απλό χαρακτηριστικό υπάρχει ένας τεράστιος όγκος backend, frontend, υπολογισμών και μαθηματικών μέσα στη συσκευή αναπαραγωγής.

Frontend

— Ας μάθουμε πώς αυτό το περιεχόμενο που δείχνουμε (κάρτα ομιλίας, ηχεία, ιστότοπος, πρόγραμμα) φτάνει στο μπροστινό μέρος;

Vladimir Krasilshchik: Έχουμε πολλά εσωτερικά συστήματα πληροφορικής. Υπάρχει ένα σύστημα στο οποίο εισάγονται όλες οι αναφορές και όλοι οι ομιλητές. Υπάρχει μια διαδικασία με την οποία ένας ομιλητής συμμετέχει σε ένα συνέδριο. Ο ομιλητής υποβάλλει μια αίτηση, το σύστημα την καταγράφει και, στη συνέχεια, υπάρχει μια συγκεκριμένη γραμμή σύμφωνα με την οποία δημιουργείται η αναφορά.

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες
Έτσι βλέπει ο ομιλητής τον αγωγό

Αυτό το σύστημα είναι η εσωτερική μας ανάπτυξη.

Στη συνέχεια, πρέπει να δημιουργήσετε ένα χρονοδιάγραμμα από μεμονωμένες αναφορές. Όπως γνωρίζετε, αυτό είναι ένα NP-σκληρό πρόβλημα, αλλά με κάποιο τρόπο το λύνουμε. Για να γίνει αυτό, εκκινούμε ένα άλλο στοιχείο που δημιουργεί ένα χρονοδιάγραμμα και το ανεβάζει στην υπηρεσία cloud τρίτου μέρους Contentful. Εκεί, όλα μοιάζουν με ένα τραπέζι στο οποίο υπάρχουν ημέρες του συνεδρίου, τις ημέρες υπάρχουν χρονοθυρίδες και στις κουλοχέρηδες υπάρχουν αναφορές, διαλείμματα ή δραστηριότητες χορηγίας. Έτσι, το περιεχόμενο που βλέπουμε βρίσκεται σε μια υπηρεσία τρίτων. Και το καθήκον είναι να το μεταφέρετε στον ιστότοπο.

Φαίνεται ότι ο ιστότοπος είναι απλώς μια σελίδα με έναν παίκτη και δεν υπάρχει τίποτα περίπλοκο εδώ. Μόνο που δεν είναι. Το backend πίσω από αυτήν τη σελίδα πηγαίνει στο Contentful, παίρνει το χρονοδιάγραμμα από εκεί, δημιουργεί ορισμένα αντικείμενα και το στέλνει στο frontend. Χρησιμοποιώντας μια σύνδεση websocket, που κάνει κάθε πελάτης της πλατφόρμας μας, του στέλνουμε μια ενημέρωση του προγράμματος από το backend στο frontend.

Πραγματική περίπτωση: ο ομιλητής άλλαξε δουλειά ακριβώς κατά τη διάρκεια της διάσκεψης. Πρέπει να αλλάξουμε το σήμα της εργοδοτικής εταιρείας του. Πώς συμβαίνει αυτό από το backend; Μια ενημέρωση αποστέλλεται σε όλους τους πελάτες μέσω του websocket και, στη συνέχεια, το ίδιο το frontend σχεδιάζει ξανά τη γραμμή χρόνου. Όλα αυτά συμβαίνουν απρόσκοπτα. Ο συνδυασμός της υπηρεσίας cloud και πολλών από τα στοιχεία μας μας δίνει την ευκαιρία να δημιουργήσουμε όλο αυτό το περιεχόμενο και να το παρέχουμε στην πρώτη γραμμή.

Νικολάι: Είναι σημαντικό εδώ να διευκρινίσουμε ότι ο ιστότοπός μας δεν είναι μια κλασική εφαρμογή SPA. Αυτός είναι και ένας ιστότοπος που βασίζεται σε διάταξη και έχει αποδοθεί και ένα SPA. Η Google πραγματικά βλέπει αυτόν τον ιστότοπο ως αποδοθέν HTML. Αυτό είναι καλό για το SEO και για την παράδοση περιεχομένου στον χρήστη. Δεν περιμένει να φορτώσει 1,5 megabyte JavaScript πριν δει τη σελίδα, βλέπει αμέσως την ήδη αποδοθείσα σελίδα και το νιώθετε κάθε φορά που αλλάζετε την αναφορά. Όλα γίνονται σε μισό δευτερόλεπτο, αφού το περιεχόμενο είναι ήδη έτοιμο και αναρτημένο στο σωστό μέρος.

— Ας χαράξουμε μια γραμμή κάτω από όλα τα παραπάνω αναφέροντας τις τεχνολογίες. Η Tyoma είπε ότι έχουμε 5 ροές Amazon και παραδίδουμε βίντεο και ήχο εκεί. Έχουμε σενάρια bash εκεί, τα χρησιμοποιούμε για την εκκίνηση και τη διαμόρφωση...

Artyom: Αυτό συμβαίνει μέσω του API AWS, υπάρχουν πολλές περισσότερες τεχνικές πλαϊνές υπηρεσίες εκεί. Μοιραστήκαμε τις ευθύνες μας έτσι ώστε να παραδώσω CloudFront, και οι προγραμματιστές front-end και back-end το παίρνουν από εκεί. Έχουμε μια σειρά από δικές μας συνδέσεις για να απλοποιήσουμε τη διάταξη του περιεχομένου, τις οποίες στη συνέχεια κάνουμε σε 4K κ.λπ. Δεδομένου ότι οι προθεσμίες ήταν πολύ περιορισμένες, το κάναμε σχεδόν εξ ολοκλήρου στο AWS.

— Στη συνέχεια, όλα αυτά πηγαίνουν στη συσκευή αναπαραγωγής χρησιμοποιώντας το σύστημα υποστήριξης. Έχουμε TypeScript, React, Next.JS στο πρόγραμμα αναπαραγωγής μας. Και στο backend έχουμε αρκετές υπηρεσίες σε C#, Java, Spring Boot και Node.js. Όλα αυτά αναπτύσσονται χρησιμοποιώντας το Kubernetes χρησιμοποιώντας την υποδομή Yandex.Cloud.

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

Επιχειρηματικοί περιορισμοί και αναλύσεις

— Στοχεύσαμε 10 χρήστες με βάση τις επιχειρηματικές απαιτήσεις. Ήρθε η ώρα να μιλήσουμε για τους επιχειρηματικούς περιορισμούς που είχαμε. Έπρεπε να εξασφαλίσουμε υψηλό φόρτο εργασίας, να διασφαλίσουμε τη συμμόρφωση με τη νομοθεσία για τη διατήρηση των προσωπικών δεδομένων. Και τι άλλο?

Νικολάι: Αρχικά, ξεκινήσαμε από τις απαιτήσεις βίντεο. Το πιο σημαντικό πράγμα είναι η κατανεμημένη αποθήκευση βίντεο σε όλο τον κόσμο για γρήγορη παράδοση στον πελάτη. Άλλα περιλαμβάνουν ανάλυση 1080p, καθώς και επαναφορά, που πολλοί άλλοι δεν εφαρμόζουν σε λειτουργία ζωντανής λειτουργίας. Αργότερα προσθέσαμε τη δυνατότητα ενεργοποίησης της ταχύτητας 2x, με τη βοήθειά της μπορείτε να "προλάβετε" τα live και να συνεχίσετε να παρακολουθείτε τη διάσκεψη σε πραγματικό χρόνο. Και στην πορεία, εμφανίστηκε η λειτουργία σήμανσης χρονοδιαγράμματος. Επιπλέον, έπρεπε να είμαστε ανεκτικοί σε σφάλματα και να αντέξουμε το φορτίο των 10 συνδέσεων. Από την άποψη του backend, πρόκειται για περίπου 000 συνδέσεις πολλαπλασιαζόμενες επί 10 αιτήματα για κάθε ανανέωση σελίδας. Και αυτό είναι ήδη 000 RPS/sec. Αρκετά.

— Υπήρχαν άλλες απαιτήσεις για μια «εικονική έκθεση» με διαδικτυακά περίπτερα συνεργατών;

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

— Υπήρχαν επίσης απαιτήσεις για ανάλυση προβολών και στατιστικών σε πραγματικό χρόνο. Γνωρίζω ότι χρησιμοποιούμε τον Prometheus για αυτό, αλλά πείτε μας πιο αναλυτικά: ποιες απαιτήσεις πληρούμε για αναλυτικά στοιχεία και πώς εφαρμόζεται;

Νικολάι: Αρχικά, έχουμε απαιτήσεις μάρκετινγκ για τη συλλογή για δοκιμές A/B και τη συλλογή πληροφοριών, προκειμένου να κατανοήσουμε πώς να παρέχουμε σωστά το καλύτερο περιεχόμενο στον πελάτη στο μέλλον. Υπάρχουν επίσης απαιτήσεις για ορισμένα αναλυτικά στοιχεία σχετικά με τις δραστηριότητες συνεργατών και τα αναλυτικά στοιχεία που βλέπετε (μετρητής επισκέψεων). Όλες οι πληροφορίες συλλέγονται σε πραγματικό χρόνο.

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

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

Απάτη

— Έχουμε μηχανισμούς κατά της απάτης;

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

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

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

Βλαδίμηρος: Θα ήθελα να μιλήσω για αναλυτικά στοιχεία και στατιστικά στοιχεία, τα οποία στη συνέχεια αναλύουμε για την επιτυχία της αναφοράς ή μπορούμε να τα παρέχουμε στους συνεργάτες. Όλοι οι πελάτες συνδέονται μέσω μιας σύνδεσης websocket σε ένα συγκεκριμένο σύμπλεγμα backend. Στέκεται εκεί φουντουκιά. Κάθε πελάτης σε κάθε χρονική περίοδο στέλνει τι κάνει και τι κομμάτι παρακολουθεί. Στη συνέχεια, αυτές οι πληροφορίες συγκεντρώνονται χρησιμοποιώντας γρήγορες εργασίες Hazelcast και αποστέλλονται πίσω σε όλους όσους παρακολουθούν αυτά τα κομμάτια. Βλέπουμε στη γωνία πόσοι άνθρωποι είναι τώρα μαζί μας.

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες

Οι ίδιες πληροφορίες αποθηκεύονται σε Μόνγκο και πηγαίνει στη λίμνη δεδομένων μας, από την οποία έχουμε την ευκαιρία να φτιάξουμε ένα πιο ενδιαφέρον γράφημα. Τίθεται το ερώτημα: πόσοι μοναδικοί χρήστες είδαν αυτήν την αναφορά; Πάμε στο Postgres, υπάρχουν ping όλων των ατόμων που ήρθαν από το αναγνωριστικό αυτής της αναφοράς. Συλλέξαμε, συγκεντρώσαμε μοναδικές και τώρα μπορούμε να καταλάβουμε.

Νικολάι: Ταυτόχρονα όμως λαμβάνουμε και δεδομένα σε πραγματικό χρόνο από τον Προμηθέα. Τοποθετείται ενάντια σε όλες τις υπηρεσίες Kubernetes, ενάντια στην ίδια την Kubernetes. Συλλέγει απολύτως τα πάντα και με το Grafana μπορούμε να δημιουργήσουμε οποιαδήποτε γραφήματα σε πραγματικό χρόνο.

Βλαδίμηρος: Από τη μία πλευρά, το κατεβάζουμε για περαιτέρω επεξεργασία OLAP. Και για το OLTP, η εφαρμογή κατεβάζει το όλο θέμα στον Προμηθέα, στη Γραφάνα και τα γραφήματα μάλιστα συγκλίνουν!

- Αυτό συμβαίνει όταν τα γραφήματα συγκλίνουν.

Δυναμικές Αλλαγές

— Πείτε μας πώς αναπτύσσονται οι δυναμικές αλλαγές: εάν η αναφορά ακυρώθηκε 6 λεπτά πριν από την έναρξη, ποια είναι η αλυσίδα ενεργειών; Ποιος αγωγός λειτουργεί;

Βλαδίμηρος: Ο αγωγός είναι πολύ υπό όρους. Υπάρχουν αρκετές πιθανότητες. Το πρώτο είναι ότι το πρόγραμμα δημιουργίας χρονοδιαγράμματος λειτούργησε και άλλαξε το χρονοδιάγραμμα. Το τροποποιημένο πρόγραμμα μεταφορτώνεται στο Contentful. Μετά από αυτό, το backend κατανοεί ότι υπάρχουν αλλαγές για αυτό το συνέδριο στο Contentful, το παίρνει και το ξαναφτιάχνει. Όλα συλλέγονται και αποστέλλονται μέσω websocket.

Η δεύτερη πιθανότητα, όταν όλα συμβαίνουν με ιλιγγιώδεις ρυθμούς: ο επεξεργαστής αλλάζει χειροκίνητα τις πληροφορίες στο Contentful (σύνδεσμος στο Telegram, παρουσίαση του ομιλητή κ.λπ.) και η ίδια λογική λειτουργεί με την πρώτη φορά.

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

Βλαδίμηρος: Επίσης, υπάρχουν χρονικά όρια για την έναρξη των αναφορών στο χρονοδιάγραμμα. Στην αρχή δεν υπάρχει τίποτα. Και αν τοποθετήσετε το ποντίκι σας πάνω από την κόκκινη λωρίδα, τότε κάποια στιγμή, χάρη στον διευθυντή εκπομπής, θα εμφανιστούν αποκοπές. Ο σκηνοθέτης ορίζει τη σωστή έναρξη της μετάδοσης, το backend επιλέγει αυτήν την αλλαγή, υπολογίζει τους χρόνους έναρξης και λήξης των παρουσιάσεων ολόκληρου του κομματιού σύμφωνα με το πρόγραμμα του συνεδρίου, το στέλνει στους πελάτες μας και ο παίκτης τραβάει τα όρια. Τώρα ο χρήστης μπορεί εύκολα να πλοηγηθεί στην αρχή και στο τέλος της αναφοράς. Ήταν μια αυστηρή επιχειρηματική απαίτηση, πολύ βολική και χρήσιμη. Δεν χάνετε χρόνο βρίσκοντας την πραγματική ώρα έναρξης της αναφοράς. Και όταν κάνουμε μια προεπισκόπηση, θα είναι απολύτως υπέροχο.

Ανάπτυξη

— Θα ήθελα να ρωτήσω για την ανάπτυξη. Ο Κόλια και η ομάδα αφιέρωσαν πολύ χρόνο στην αρχή για να στήσουν ολόκληρη την υποδομή στην οποία ξετυλίγονται τα πάντα για εμάς. Πες μου, από τι αποτελείται όλο αυτό;

Νικολάι: Από τεχνικής άποψης, αρχικά είχαμε την απαίτηση το προϊόν να είναι όσο το δυνατόν πιο αφηρημένο από οποιονδήποτε προμηθευτή. Ελάτε στο AWS για να δημιουργήσετε σενάρια Terraform ειδικά από το AWS ή συγκεκριμένα από το Yandex ή από το Azure κ.λπ. δεν ταίριαζε πραγματικά. Κάποια στιγμή έπρεπε να μετακομίσουμε κάπου.

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

Έχουμε δύο συστάδες. Δοκιμή και παραγωγή. Είναι απολύτως πανομοιότυπα όσον αφορά το υλικό και τις ρυθμίσεις. Υλοποιούμε την υποδομή ως κώδικα. Όλες οι υπηρεσίες αναπτύσσονται αυτόματα σε τρία περιβάλλοντα από κλάδους χαρακτηριστικών, κύριους κλάδους, κλάδους δοκιμής και GitLab χρησιμοποιώντας μια αυτόματη διοχέτευση. Αυτό είναι στο μέγιστο ενσωματωμένο στο GitLab, στο μέγιστο ενσωματωμένο με το Elastic, Prometheus.

Έχουμε την ευκαιρία να παρουσιάσουμε γρήγορα (για το backend εντός 10 λεπτών, για το frontend εντός 5 λεπτών) τις αλλαγές σε οποιοδήποτε περιβάλλον με όλες τις δοκιμές, τις ενσωματώσεις, την εκτέλεση λειτουργικών δοκιμών, τις δοκιμές ενσωμάτωσης στο περιβάλλον, καθώς και τη δοκιμή με δοκιμές φορτίου σε ένα περιβάλλον δοκιμής περίπου το ίδιο πράγμα που θέλουμε να έχουμε στην παραγωγή.

Σχετικά με τις δοκιμές

— Δοκιμάζεις σχεδόν τα πάντα, είναι δύσκολο να πιστέψεις πώς τα έγραψες όλα. Μπορείτε να μας πείτε για τις δοκιμές υποστήριξης: πόσο καλύπτονται τα πάντα, ποιες δοκιμές;

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

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

Αυτή τη στιγμή έχω περίπου 70 δοκιμές εξαρτημάτων και περίπου 40 δοκιμές ολοκλήρωσης επί του σκάφους. Η κάλυψη είναι πολύ κοντά στο 95%. Αυτό είναι για τα συστατικά, λιγότερο για τα ενσωματωμένα, απλά δεν χρειάζονται τόσο πολλά. Λαμβάνοντας υπόψη ότι το έργο περιλαμβάνει όλα τα είδη δημιουργίας κώδικα, αυτός είναι ένας πολύ καλός δείκτης. Δεν υπήρχε άλλος τρόπος να κάνουμε αυτό που κάναμε σε τρεις μήνες. Διότι αν κάναμε τη δοκιμή χειροκίνητα, δίνοντας δυνατότητες στον ελεγκτή μας, και αυτός έβρισκε σφάλματα και μας τα επέστρεφε για επιδιορθώσεις, τότε αυτό το ταξίδι μετ' επιστροφής για τον εντοπισμό σφαλμάτων του κώδικα θα ήταν πολύ μεγάλο και δεν θα τηρούσαμε προθεσμίες.

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

Βλαδίμηρος: Επομένως, είναι μεγάλη επιτυχία που όταν υπολογίζω ένα χαρακτηριστικό, λέω ότι χρειάζομαι 4 ημέρες για δύο απλά στυλό και 1 πρίζα, ο Kolya το επιτρέπει. Είναι ήδη συνηθισμένος στο γεγονός ότι αυτές οι 4 ημέρες περιλαμβάνουν 2 τύπους εξετάσεων και μετά, πιθανότατα, θα λειτουργήσει.

Νικολάι: Έχω επίσης γραμμένα 140 τεστ: συστατικό + λειτουργικό, που κάνουν το ίδιο πράγμα. Όλα τα ίδια σενάρια δοκιμάζονται στην παραγωγή, στη δοκιμή και στην παραγωγή. Πρόσφατα προσθέσαμε επίσης λειτουργικές βασικές δοκιμές διεπαφής χρήστη. Με αυτόν τον τρόπο καλύπτουμε την πιο βασική λειτουργικότητα που μπορεί να καταρρεύσει.

Βλαδίμηρος: Φυσικά, αξίζει να μιλήσουμε για δοκιμές φορτίου. Ήταν απαραίτητο να δοκιμάσουμε την πλατφόρμα κάτω από ένα φορτίο κοντά στο πραγματικό για να καταλάβουμε πώς είναι όλα, τι συμβαίνει με το Rabbit, τι συμβαίνει με τα JVM, πόση μνήμη χρειάζεται πραγματικά.

— Δεν ξέρω με βεβαιότητα αν δοκιμάζουμε κάτι στην πλευρά της ροής, αλλά θυμάμαι ότι υπήρχαν προβλήματα με τους transcoders όταν κάναμε συναντήσεις. Έχουμε δοκιμάσει τις ροές;

Artyom: Δοκιμασμένο επαναληπτικά. Διοργάνωση συναντήσεων. Στη διαδικασία διοργάνωσης συναντήσεων, υπήρχαν περίπου 2300 εισιτήρια JIRA. Αυτά είναι απλώς γενικά πράγματα που έκαναν οι άνθρωποι για να κάνουν συναντήσεις. Πήραμε μέρη της πλατφόρμας σε μια ξεχωριστή σελίδα για συναντήσεις, την οποία διευθύνει ο Kirill Tolkachev (talkkv).

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

Κατά τη διάρκεια των συνεδρίων, έπρεπε να γράψω αρκετούς ακόμα εξαγωγείς για να καλύψω περισσότερο εξοπλισμό και υπηρεσίες. Σε ορισμένα μέρη έπρεπε να φτιάξω τα δικά μου ποδήλατα για λόγους μετρήσεων. Ο κόσμος του υλικού AV (ήχου-βίντεο) δεν είναι πολύ ρόδινος - έχετε κάποιο είδος "API" εξοπλισμού που απλά δεν μπορείτε να επηρεάσετε. Και απέχει πολύ από το γεγονός ότι θα μπορέσετε να λάβετε τις πληροφορίες που χρειάζεστε. Οι πωλητές υλικού είναι πολύ αργοί και είναι σχεδόν αδύνατο να αποκτήσετε αυτό που θέλετε από αυτούς. Συνολικά υπάρχουν περισσότερα από 100 κομμάτια υλικού, δεν σου δίνουν πίσω ό,τι χρειάζεσαι και γράφεις περίεργους και περιττούς εξαγωγείς, χάρη στους οποίους μπορείς τουλάχιστον με κάποιο τρόπο να διορθώσεις το σύστημα.

Оборудование

— Θυμάμαι πώς πριν από την έναρξη των συνεδρίων αγοράσαμε εν μέρει πρόσθετο εξοπλισμό.

Artyom: Αγοράσαμε υπολογιστές, φορητούς υπολογιστές και πακέτα μπαταριών. Αυτή τη στιγμή μπορούμε να ζήσουμε χωρίς ρεύμα για 40 λεπτά. Τον Ιούνιο υπήρξαν ισχυρές καταιγίδες στην Αγία Πετρούπολη - έτσι είχαμε ένα τέτοιο μπλακ άουτ. Ταυτόχρονα, αρκετοί πάροχοι έρχονται σε εμάς με οπτικούς συνδέσμους από διαφορετικά σημεία. Αυτό είναι πραγματικά 40 λεπτά χρόνου διακοπής του κτιρίου, κατά τη διάρκεια των οποίων θα έχουμε αναμμένα φώτα, ήχο, κάμερες κ.λπ.

— Έχουμε μια παρόμοια ιστορία με το Διαδίκτυο. Στο γραφείο όπου βρίσκονται τα στούντιο μας, σύραμε ένα άγριο δίχτυ ανάμεσα στους ορόφους.

Artyom: Έχουμε 20 Gbit ίνας μεταξύ των ορόφων. Πιο πέρα ​​κατά μήκος των ορόφων, κάπου υπάρχει οπτική, κάπου δεν υπάρχει οπτική, αλλά εξακολουθούν να υπάρχουν λιγότερα κανάλια από τα gigabit - τρέχουμε βίντεο σε αυτά μεταξύ των κομματιών του συνεδρίου. Γενικά, είναι πολύ βολικό να εργάζεστε στη δική σας υποδομή· σπάνια μπορείτε να το κάνετε αυτό σε συνέδρια εκτός σύνδεσης σε ιστότοπους.

— Πριν δουλέψω στον όμιλο JUG Ru, είδα πώς οι αίθουσες υλικού σε συνέδρια εκτός σύνδεσης δημιουργήθηκαν κατά τη διάρκεια της νύχτας, όπου υπήρχε μια μεγάλη οθόνη με όλες τις μετρήσεις που δημιουργείτε στο Grafana. Τώρα υπάρχει επίσης μια αίθουσα στα κεντρικά γραφεία στην οποία κάθεται η ομάδα ανάπτυξης, η οποία κατά τη διάρκεια του συνεδρίου διορθώνει ορισμένα σφάλματα και αναπτύσσει λειτουργίες. Παράλληλα, υπάρχει σύστημα παρακολούθησης που εμφανίζεται σε μεγάλη οθόνη. Ο Artyom, ο Kolya και άλλοι τύποι κάθονται και φροντίζουν να μην πέφτουν όλα και να λειτουργούν όμορφα.

Περιέργειες και προβλήματα

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

Με ενδιαφέρει να μάθω ποιες παραξενιές περιλαμβάνονταν στο να ξεκινήσει κάτι. Υπήρξαν περίεργες καταστάσεις όταν δημιουργούσατε ένα backend, frontend, βγήκε κάτι τρελό και δεν καταλάβατε τι να το κάνετε;

Βλαδίμηρος: Μου φαίνεται ότι αυτό συνέβη μόνο τους τελευταίους τρεις μήνες. Κάθε μέρα. Όπως μπορείτε να δείτε, μου έχουν τραβηχτεί όλα τα μαλλιά.

Αναπτύξτε μια πλατφόρμα βίντεο σε 90 ημέρες
Vladimir Krasilshchik μετά από 3 μήνες, όταν βγήκε κάποιο είδος παιχνιδιού και κανείς δεν κατάλαβε τι να το κάνει

Κάθε μέρα υπήρχε κάτι τέτοιο, όταν υπήρχε μια τέτοια στιγμή που το παίρνεις και σκίζεις τα μαλλιά σου ή συνειδητοποιείς ότι δεν υπάρχει κανένας άλλος και μόνο εσύ μπορείς να το κάνεις. Η πρώτη μας μεγάλη εκδήλωση ήταν το TechTrain. Στις 6 Ιουνίου, στις 2 τα ξημερώματα, δεν είχαμε ανοίξει ακόμα το περιβάλλον παραγωγής, ο Kolya το έβγαζε. Και ο προσωπικός λογαριασμός δεν λειτούργησε ως διακομιστής εξουσιοδότησης χρησιμοποιώντας το OAuth2.0. Το μετατρέψαμε σε πάροχο OAuth2.0 για να συνδέσουμε την πλατφόρμα με αυτό. Δούλευα για πιθανώς 18 ώρες συνεχόμενα, κοίταξα τον υπολογιστή και δεν είδα τίποτα, δεν καταλάβαινα γιατί δεν λειτουργούσε και ο Kolya κοίταξε τον κώδικά μου από απόσταση, έψαξε για ένα σφάλμα στη διαμόρφωση του Spring , το βρήκε και το LC λειτούργησε, και στην παραγωγή επίσης.

Νικολάι: Και μια ώρα πριν το TechTrain έγινε η κυκλοφορία.

Πολλά αστέρια ευθυγραμμίστηκαν εδώ. Ήμασταν εξαιρετικά τυχεροί γιατί είχαμε μια σούπερ ομάδα και όλοι εμπνεύστηκαν από την ιδέα να το κάνουμε online. Όλοι αυτοί οι τρεις μήνες μας οδηγούσε το γεγονός ότι «κάναμε το YouTube». Δεν επέτρεψα στον εαυτό μου να σκίσει τα μαλλιά μου, αλλά είπα σε όλους ότι όλα θα πάνε καλά, γιατί στην πραγματικότητα, όλα είχαν υπολογιστεί εδώ και πολύ καιρό.

Σχετικά με την απόδοση

— Μπορείτε να μου πείτε πόσα άτομα ήταν στον ιστότοπο σε ένα κομμάτι; Υπήρχαν προβλήματα απόδοσης;

Νικολάι: Δεν υπήρχαν προβλήματα απόδοσης, όπως είπαμε ήδη. Ο μέγιστος αριθμός ατόμων που παρακολούθησαν μια αναφορά ήταν 1300 άτομα, αυτό είναι στο Heisenbug.

— Υπήρξαν προβλήματα με την τοπική προβολή; Και είναι δυνατόν να έχουμε μια τεχνική περιγραφή με διαγράμματα για το πώς λειτουργούν όλα;

Νικολάι: Θα κάνουμε ένα άρθρο για αυτό αργότερα.

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

Βλαδίμηρος: Όπως καταλαβαίνω, οι προγραμματιστές του front-end δούλευαν τοπικά με μακέτες και, στη συνέχεια, καθώς ο χρόνος για την κυκλοφορία στους προγραμματιστές στο μπροστινό μέρος είναι επίσης σύντομος (5 λεπτά), δεν υπάρχουν προβλήματα με τον έλεγχο του τι συμβαίνει με τα πιστοποιητικά.

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

Βλαδίμηρος: Μπορείτε να το πάρετε και να το επαναλάβετε.

- Σε 3 μήνες.

Σύνολο

— Όλα όσα περιγράφονται μαζί ακούγονται ωραία, αν σκεφτεί κανείς ότι έγινε από μια μικρή ομάδα σε τρεις μήνες.

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

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

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

Και επίσης προσθήκη σε ολόκληρη την πλατφόρμα, εκτός από τη ροή και τη διάσκεψη, επίσης μια κατάσταση μετά τη διάσκεψη. Αυτές είναι λίστες αναπαραγωγής (συμπεριλαμβανομένων αυτών που έχουν δημιουργηθεί από χρήστες), πιθανώς περιεχόμενο από άλλα προηγούμενα συνέδρια, ενσωματωμένα, με ετικέτα, προσβάσιμα από τον χρήστη και επίσης διαθέσιμα για προβολή στον ιστότοπό μας (live.jugru.org).

— Παιδιά, ευχαριστώ πολύ για τις απαντήσεις σας!

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

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

Πηγή: www.habr.com

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