Η αλλαγή της αρχιτεκτονικής του client του League of Legends

Οι φήμες για μία ανακατασκευή του client του League of Legends έγιναν πλέον αληθινές, αφού το τμήμα σχεδιασμού και προγραμματισμού της Riot Games δημοσίευσε μία ανακοίνωση στην οποία εκθέτει τους λόγους για τους οποίους μία τέτοια ανακατασκευή είναι αναγκαία. Επιπλέον, ο υπεύθυνος αυτού του γιγάντιου project, ο αρχιτέκτονας λογισμικού (software architect) της Riot Andrew McVeigh επεξηγεί με σχεδόν κάθε λεπτομέρεια τα βήματα που θα οδηγήσουν στην υλοποίηση του. Στην επίσημη ανακοίνωση-που μπορείτε να βρείτε εδώ– ο Andrew παρουσιάζει το ιστορικό μίας τέτοιας απόφασης, καθώς εκθέτει τα όρια του τωρινού client του LoL.

Γιατί να αντικατασταθεί το client?

Ας αρχίσουμε πρώτα από τη μορφή που είχε το client όταν το παιχνίδι πρωτοκυκλοφόρησε, το 2008. Την εποχή εκείνη, η Riot ”έχτισε” το client της σύμφωνα με τις δυνατότητες που προσέφερε η τεχνολογία της Adobe AIR, η οποία χρησιμοποιεί το δικτυωμένο πρωτόκολλο του RTMP (Real Time Messaging Protocol), το οποίο έχει ως κύρια λειτουργία τη διαίρεση της ροής δεδομένων σε εικονοστοιχεία (fragments) ,των οποίων το μέγεθος καθορίζεται ανάμεσα στο client και στον server. Για την ακρίβεια, η πλατφόρμα αυτή προσέφερε ποικίλα πλεονεκτήματα, τα οποία δεν ήταν επιτρεπτά από το HTML (αρχικοποίηση του αγγλικού HyperText Markup Language) εκείνη την εποχή. Από τότε όμως, πολλά χρόνια πέρασαν και η Riot αποκάλυψε τον εντοπισμό 3 προβλημάτων με το AIR client:

Πρόβλημα Νο #1: Το απαρχαιωμένο HTML – η επιθυμία της Riot εισαγωγής του HTML5

Το HTML5 και το JavaScript έχουν γίνει πλέον βιώσιμες desktop τεχνολογίες για το client. Η εισαγωγή τέτοιων τεχνολογιών φέρνει πολλά πλεονεκτήματα όπως για παράδειγμα την τυποποίηση της ροής εργασιών και των εργαλείων προγραμματισμού. Ο Andrew δίνει έμφαση στην λειτουργικότητα της πλατφόρμας αυτής και επιμένει στην τεχνολογική ενσωμάτωση που επιτρέπει.

AIR CLIENT

Πηγή: Riot Games Engineering

Πρόβλημα Νο #2: Οι παίκτες θέλουν να μένουν συνδεδεμένοι εντός, αλλά και εκτός παιχνιδιού

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

φιλοι

Πηγή: Riot Games Engineering

Πρόβλημα Νο #3: Οι ομάδες προγραμματισμού της Riot πρέπει να δουλεύουν σε αρμονικό περιβάλλον

Από το 2008, το League of Legends, αλλά και η ίδια η Riot εξελίχθηκε πολύ. Η πρωταρχική βάση κώδικα (codebase) ήταν δομημένη γύρω από ένα μικρό ακόμα αριθμό προγραμματιστών. Η ανάπτυξη όμως της εταιρείας έφερε καινούργιες ομάδες προγραμματιστών, οι οποίοι ήθελαν να κάνουν πράξη τις ιδέες τους. Οι ομάδες αυτές λοιπόν πρέπει να συνεργάζονται συνεκτικά, έχοντας παράλληλα τον απαιτούμενο βαθμό αυτονομίας. Το πρόβλημα λοιπόν που δημιουργείται είναι η σύγκρουση των ομάδων κάθε φορά που ένα καινούργιο χαρακτηριστικό προστίθεται. Στόχος της Riot για την επίλυση αυτού του θέματος είναι η δημιουργία ενός πολλαπλών παχνιδιών studio, η οποία επιτρέπει πρώτα απ’ όλα την δημιουργία νέων ιδεών και ταυτόχρονα δοκιμασιών.

Riot Games Engineering

Πηγή: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

Ο δρόμος προς μία απίστευτη αρχιτεκτονική και η προσπάθεια επίλυσης των προβλημάτων

Τα προβλήματα που εκθέσαμε προηγουμένως είναι ένα από τις αιτίες ανακατασκευής του client. Όπως λέει και ο ίδιος ο Andrew η Riot αφιέρωσε πολύ χρόνο στην μεταποίηση του υπαρκτού κώδικα της τεχνολογίας AIR, προσπαθώντας παράλληλα να μείνει στο – απαρχαιωμένο- δίκτυο του browser AIR. Επομένως, παρ’ όλους τους κινδύνους που ενέχει η ολική τροποποίηση ενός κώδικα (τους οποίους μπορείτε να βρείτε αναλυτικά εδώ) , η Riot αποφάσισε ότι οι προσδοκίες των παικτών ξεπερνούν το ρίσκο. Προκειμένου να εισάγει τον browser HTML5, η εταιρεία αποφάσισε να χρησιμοποιήσει το Chromium Embedded Framework (CEF) , το οποίο πρόκειται στην ουσία για ένα πλαίσιο (framework) που εμφυτεύει μία μηχανή ελέγχου browser, βασισμένη στον πυρήνα του Chromium (φυλλομετρητή).

Ο Andrew παρουσιάζει τα 3 βήματα που οδήγησαν την ομάδα προγραμματισμού της Riot στη σύλληψη των καινούργιων ιδεών για την αρχιτεκτονική αλλαγή του client:

Βήμα Νο #1: Το JavaScript είναι το κλειδί για την ανάπτυξη του project

Πολλή έμφαση δόθηκε στο JavaScript, του οποίου η κωδικοποίηση παρουσιάζει τρομερές δυνατότητες. Πιο συγκεκριμένα, το JavaScript (JS) πρόκειται για διερμηνευμένη γλώσσα προγραμματισμού. Η χρήση αυτού απλοποιεί την αρχιτεκτονική, κρατώντας την ομότυπη. Ως αποτέλεσμα, η Riot ανέπτυξε μία πρότυπη βιβλιοθήκη C++, η οποία παρέχει στον προγραμματιστή γενικά κοντέινερ (containers) για τύπους δεδομένων και γενικά ροές δεδομένων (streams). Η βιβλιοθήκη αυτή θα έπρεπε στη θεωρία να επιτρέπει τη διαχείριση κλήσεων από πρωτόκολλο RTMP και τη διόρθωση ασυγχρώνιστων απαντήσεων. Όπως βλέπουμε στην παρακάτω εικόνα, η επιφάνεια εργασίας του παίκτη θα αποτελείται από το CEF, μαζί με το JavaScript των οποίων τα δεδομένα θα ρέουν μέσα από την πρότυπη βιβλιοθήκη C++ . Τα δύο αυτά ατομικά κομμάτια θα είναι ενιαίο μέρος της πλατφόρμας του LoL, τροφοδοτούμενη από το internet του RTMP.

Πηγή: Riot Games Engineering

Πηγή: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

Όσον αφορά την πράξη, διαφέρει από τη θεωρία. Για την ακρίβεια, σύμφωνα με τον Andrew το πρώτο βήμα λύνει το πρόβλημα της λειτουργικότητας της πλατφόρμας, το πρώτο λοιπόν παρ’ όλα αυτά δεν φαίνεται να προτείνει την επίλυση των 2 άλλων.

Βήμα Νο#2: Η δημιουργία διαδικτυακών εφαρμογών στην επιφάνεια εργασίας

Ο στόχος του 2ου βήματος ήταν η υποστήριξη της πρότυπης βιβλιοθήκης C++. Για να γίνει αυτό, ο Andrew και η ομάδα του εισήγαν ”μικρο-υπηρεσίες” (microservices), οι οποίες είναι μικροί επεξεργαστές που επικοινωνούν μεταξύ τους για να σχηματίσουν περίπλοκες εφαρμογές που χρησιμοποιούν language-agnostic API. Με άλλα λόγια, η ομάδα προγραμματισμού επιλέγει τη γλώσσα που θα χρησιμοποιήσει ανάλογα με την καταλληλότητά της για μία συγκεκριμένη εργασία για τη διασύνδεση του προγραμματισμού των εφαρμογών (API στα αγγλικά). Για τον σκοπό αυτό, η ομάδα δημιούργησε μία τέτοια μικρουπηρεσία για να υποστηρίξει το πρωτόκολλο του RTMP. Επιπλέον, χρησιμoποίησε websockets (τα οποία προσφέρουν περισσότερη αλληλεπίδραση ανάμεσα σε browser και ιστοσελίδα) για να διαχειριστεί τα γεγονότα του UI (user interface), δηλαδή το μέρος όπου συμβαίνουν οι αλληλεπιδράσεις μεταξύ ανθρώπου και μηχανής. Οι μικρο-υπηρεσίες αυτές ονομάστηκαν από τη Riot ”foundation”.

lcu_architecture_2

Πηγή: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

Η παρακάτω εικόνα δείχνει το Swagger UI, το πιο διάσημο framework για API. Η επιλογή αυτή επέτρεψε στην ομάδα της Riot να απλοποιήσει τον κώδικα του JavaScript.

swagger

Πήγη: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Βήμα Νο#3: Plug-ins και επεκτασιμότητα

Εδώ τα πράγματα γίνονται πολύ πιο περίπλοκα και ο ίδιος ο Andrew υποστηρίζει ότι η ομάδα του δούλεψε πολύ. Το πρόβλημα που παρέμενε ήταν αυτό του περιβάλλοντος των διάφορων ομάδων προγραμματισμού. Οι ομάδες πρόσθεταν τα δικά τους χαρακτηριστικά, τροποποιώντας συνεχώς τον κώδικα και τα frameworks. Για να αντιμετωπιστεί αυτό, μία πατέρνα έπρεπε να βρεθεί ώστε να διαχωρίσει την κάθε ομάδα, κρατώντας την ατομικότητα της. Για να γίνει αυτό, τα plug-ins ή αλλιώς αρθρώματα χρησιμοποιήθηκαν. Με την χρήση τους, 4 πράγματα διευκολύνονται:

α. η δυνατότητα άλλων ομάδων να προγραμματίσουν επιπλέον δυνατότητες κάποιας εφαρμογής
β. η υποστήριξη εύκολης πρόσθεσης νέων χαρακτηριστικών (τα λεγόμενα add-ons ή πρόσθετα)
γ. η μείωση του μεγέθους του πυρήνα μιας εφαρμογής και επομένως η μείωση του data usage
δ. ο διαχωρισμός του πηγαίου κώδικα από την εφαρμογή σε περίπτωση ασύμβατων αδειών (νομικά δικαιώματα)

Πηγή: Riot Games Engineering

Πηγή: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

Ο δρόμος για την τελική μορφή του client

Οι αποφάσεις και οι επιλογές που πάρθηκαν από τον Andrew και τους υπεύθυνους της ανακατασκευής του client αποτέλεσαν ένα βήμα προς την επίλυση των προβλημάτων που είδαμε πιο πάνω.

τελικη μορφη

Πηγή: Riot Games Engineering

 

 

 

 

 

 

 

 

 

 

 

 

Παρ’ όλα αυτά, αναπάντητες ερωτήσεις υπάρχουν ακόμα. Για παράδειγμα, πώς είναι δυνατό τα χαρακτηριστικά να προστίθενται ταυτοχόνως χωρίς να ”κολλάνε” ; Θα εξελιχθεί κι άλλο άραγε η ιδέα αυτή ή η παρούσα εικόνα του client ικανοποιεί την Riot; Το μόνο που ξέρουμε πάντως είναι ότι η Riot έχει στο μυαλό της σπουδαία πράγματα, τα οποία θα αλλάξουν ίσως τον τρόπο με τον οποίο παίζαμε League of Legends μέχρι τώρα.

 

 

 

 

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

Σχόλια

σχολιάστε