
Γιατί μεταφέραμε τις λειτουργίες πραγματικού χρόνου του Cliqer εκτός Cloudflare (και γιατί παραμένουμε θαυμαστές της)

Στις 24 Σεπτεμβρίου 2026, στις 18:42 UTC, μεταφέραμε κάθε ζωντανή σύνδεση του Cliqer από τα Cloudflare Workers και τα Durable Objects στους δικούς μας αποκλειστικούς διακομιστές. Δοκιμάσαμε το edge και, αυτή τη φορά, απέτυχε. Αν χρησιμοποιείτε το Cliqer, τίποτα δεν αλλάζει στον τρόπο που δουλεύετε. Αυτό που αλλάζει είναι όσα συμβαίνουν από κάτω: τα δωμάτιά σας δεν επανεκκινούνται πλέον για λόγους που κανείς δεν μπορεί να εξηγήσει.
Αυτό το άρθρο είναι η ειλικρινής εκδοχή του γιατί. Είναι επίσης ένα ευχαριστώ, γιατί παραμένουμε πελάτες της Cloudflare και γνήσιοι θαυμαστές όσων δημιουργεί.
- Για τέσσερις μήνες, κάθε δωμάτιο του Cliqer έτρεχε σε Cloudflare Durable Objects. Η ιδέα ήταν υπέροχη: κάθε δωμάτιο αποκτά τον δικό του μικροσκοπικό διακομιστή στο edge, πάντα σε λειτουργία.
- Στην πράξη, τα δωμάτια του Cliqer επανεκκινούνταν ερήμην μας αρκετές φορές την ημέρα, χωρίς να έχει ξεπεραστεί κανένα όριο μνήμης, κανένα όριο CPU, χωρίς σφάλμα στον κώδικά μας και χωρίς deploy. Κάθε επανεκκίνηση έριχνε κάθε σύνδεση στο συγκεκριμένο δωμάτιο.
- Φτιάξαμε περίπου 18 διαφορετικούς μηχανισμούς για να κρύψουμε αυτές τις επανεκκινήσεις από εσάς. Κάποιοι λειτούργησαν. Η ίδια η πολυπλοκότητα άρχισε να προκαλεί νέα σφάλματα.
- Οι λειτουργίες πραγματικού χρόνου του Cliqer τρέχουν πλέον στους δικούς μας αποκλειστικούς διακομιστές, πάντα πίσω από το δίκτυο της Cloudflare. Καμία αιφνίδια επανεκκίνηση, καμία επαναφορά αποθήκευσης, καμία λοταρία τοποθέτησης.
- Είναι και ταχύτερο: οι έλεγχοι εκκίνησης της εφαρμογής υπολογιστή απαντούν έως και 17 φορές ταχύτερα και μια αδρανής σύνδεση ανοίγει σε 0,14 δευτερόλεπτα αντί για 1,2.
- Αν μια σύνδεση πέσει τώρα, η αιτία είναι γνωστή: το δίκτυό σας, μια προγραμματισμένη ενημέρωση που σας επανασυνδέει σε περίπου ένα δευτερόλεπτο ή ανωτέρα βία. Δεν είναι πια μυστήριο.
Τι προσπαθούσαμε να φτιάξουμε
Το Cliqer είναι ένα εργαλείο για ζωντανή χρήση. Ένας ομιλητής πατά το τηλέφωνό του και μια διαφάνεια προχωρά σε μια οθόνη που μπορεί να βρίσκεται σε άλλη ήπειρο. Καλεσμένοι μπαίνουν σε μια εκπομπή, οι οικοδεσπότες αλλάζουν πηγές, χρονόμετρα μετρούν αντίστροφα στη σκηνή. Όλα αυτά βασίζονται σε WebSockets: συνδέσεις μεγάλης διάρκειας που δεν επιτρέπεται να τρεμοπαίξουν, γιατί όταν συμβαίνει, συμβαίνει μπροστά στο κοινό.
Τα Durable Objects έμοιαζαν ιδανική επιλογή. Κάθε δωμάτιο αποκτά ένα μονονηματικό αντικείμενο που κρατά τα δικά του sockets και τη δική του αποθήκευση και τρέχει στο δίκτυο της Cloudflare. Χωρίς διακομιστές προς διαχείριση, χωρίς σχεδιασμό κλιμάκωσης. Μέχρι τα τέλη Μαΐου κάθε δωμάτιο έτρεχε σε αυτά και τον Ιούνιο προστέθηκε και η παλαιότερη γέφυρα Cliqer v1.
Τι πήγε στραβά

Επανεκκινήσεις που δεν μπορούσαμε να εξηγήσουμε
Ένα Durable Object μπορεί να επανεκκινηθεί από την πλατφόρμα οποιαδήποτε στιγμή και, όταν επανεκκινείται, κλείνει κάθε WebSocket που κρατά. Σε ένα 24ωρο παράθυρο καταγραφών το ελέγξαμε ειδικά: κανένα socket δεν επέζησε από επανεκκίνηση. Ούτε ένα.
Αυτό δεν θα ήταν πρόβλημα αν οι επανεκκινήσεις ήταν σπάνιες. Δεν ήταν:
- 21 επανεκκινήσεις σε 5 ημέρες για το αντικείμενο στη Λισαβόνα που φιλοξενούσε όλα τα δωμάτια, οι 4 μέσα σε μία μόνο ώρα. Καμία εξάντληση μνήμης, κανένα όριο CPU, ελάχιστα εσωτερικά σφάλματα της πλατφόρμας και κανένα deploy από εμάς.
- Το μετακινήσαμε. Τα Durable Objects μένουν εκεί όπου δημιουργούνται αρχικά, οπότε η μετακίνηση σημαίνει να το δημιουργήσεις ξανά και να ελπίζεις ότι θα καταλήξει κάπου καλύτερα. Η πρώτη προσπάθεια κατέληξε στη Μαδρίτη, η επόμενη στο Άμστερνταμ.
- Στο Άμστερνταμ οι επανεκκινήσεις συνεχίστηκαν, κάθε 2 έως 16 ώρες, κατά μέσο όρο περίπου κάθε 8,7 ώρες.
- Τον Σεπτέμβριο, το αντικείμενο που εξυπηρετούσε τα παλαιότερα δωμάτια εξακολουθούσε να επανεκκινείται 2 έως 5 φορές την ημέρα, χωρίς καμία αφορμή. Στις 8 Σεπτεμβρίου στις 18:53 όλες οι παλαιότερες συνδέσεις έκλεισαν μέσα στο ίδιο χιλιοστό του δευτερολέπτου. Κανένα deploy, κανένα περιστατικό στη σελίδα κατάστασης.
Για εσάς, κάθε μία από αυτές ήταν μια στιγμή όπου το τηλεχειριστήριο παρουσιάσεων σταματούσε να ανταποκρίνεται, ένας καλεσμένος εξαφανιζόταν ή η εφαρμογή έλεγε ότι επανασυνδέεται στη μέση μιας εκπομπής.
Αποθήκευση που έληγε και επανέφερε το δωμάτιο
Μεταξύ 7 και 10 Σεπτεμβρίου είδαμε το μήνυμα σφάλματος «Durable Object storage operation exceeded timeout which caused object to be reset» 8 φορές σε 4 αντικείμενα. Μια προσπάθεια επανασύνδεσης περίμενε 44,5 δευτερόλεπτα πριν αποτύχει. Μια ανάγνωση από την αποθήκευση που θα έπρεπε να διαρκεί χιλιοστά του δευτερολέπτου έριχνε μαζί της ολόκληρο το δωμάτιο.
Κάθε deploy επανεκκινούσε κάθε δωμάτιο
Αυτό είναι τεκμηριωμένο και δίκαιο: η κυκλοφορία μιας νέας έκδοσης ενός Worker επανεκκινεί τα Durable Objects του και η επανεκκίνησή τους κλείνει τις συνδέσεις τους. Μεταξύ 19 και 21 Αυγούστου, το 44% των επανασυνδέσεων σε ζωντανά δωμάτια πελατών ήρθε σε συγχρονισμένα κύματα, ενώ τρεις δικές μας εκδόσεις μέσα σε μία ημέρα έριξαν όλα τα δωμάτια, η μία στη μέση εκπομπής.
Γι' αυτό μεταφέραμε τα sockets σε δικό τους Worker και φτιάξαμε ένα εργαλείο που εξέταζε κάθε αλλαγμένο αρχείο και αποφάσιζε ποια deploys επιτρεπόταν να αγγίξουν τα δωμάτια. Αυτό λειτούργησε: η επόμενη έκδοση του ιστότοπου κυκλοφόρησε με πέντε ζωντανούς οικοδεσπότες και μηδέν συμβάντα στα δωμάτια. Σήμαινε όμως επίσης ότι κάθε αλλαγή στον κώδικα πραγματικού χρόνου εξακολουθούσε να επανεκκινεί τους πάντες.
Ανεπαίσθητες συμπεριφορές που μας πλήγωσαν σε ζωντανές εκπομπές
- Μια σιωπή 16 λεπτών. Στις 4 Αυγούστου, 43 sockets έμειναν συνδεδεμένα ενώ δεν παραδόθηκε κανένα μήνυμα σε κανένα δωμάτιο. Το edge συνέχιζε να απαντά στα heartbeats εκ μέρους του δωματίου, οπότε κανένας client δεν κατάλαβε ότι κάτι δεν πήγαινε καλά και κανείς δεν επανασυνδέθηκε. Αυτό προήλθε από μια λειτουργία της πλατφόρμας που μόλις είχαμε υιοθετήσει, σε συνδυασμό με τη δική μας τήρηση κατάστασης. Την αναιρέσαμε την ίδια εβδομάδα.
- Οικοδεσπότες φαντάσματα. Τα συμβάντα κλεισίματος δεν είναι εγγυημένο ότι φτάνουν σε ένα αντικείμενο σε αδράνεια, οπότε ένας οικοδεσπότης που είχε αποχωρήσει μπορούσε να φαίνεται συνδεδεμένος για ώρες.
- Ένα URL κολλημένο στην cache για τέσσερις ώρες. Τον Αύγουστο, ένα επίπεδο cache μπροστά από τον Worker μας κόλλησε στο μοναδικό URL που ελέγχει η εφαρμογή υπολογιστή κατά την εκκίνηση. Η εφαρμογή δεν μπορούσε να ξεκινήσει. Το ίδιο URL με μια τυχαία παράμετρο απαντούσε σε ένα δευτερόλεπτο.
Τι φτιάξαμε για να τα βγάλουμε πέρα
Μέσα σε αυτούς τους τέσσερις μήνες φτιάξαμε περίπου 18 ξεχωριστούς μηχανισμούς για να κρύψουμε την πλατφόρμα από εσάς: ταχύτερα heartbeats, σαρώσεις για οικοδεσπότες φαντάσματα, μητρώα που ξαναχτίζονταν από την αποθήκευση σε κάθε αφύπνιση, ταυτότητες που επιβιώνουν από μια επανεκκίνηση ώστε οι εφαρμογές σας να συνεχίζουν, ξεχωριστό Worker για τα sockets, έναν ταξινομητή deploy που κάλυπτε 161 αρχεία, νέες απόπειρες τοποθέτησης, έναν φύλακα για το relay, sharding ανά δωμάτιο και, μαζί του, ένα καθολικό θέσεων μεταξύ shards.
Τρεις από αυτούς τους διαγράψαμε αργότερα, γιατί προκαλούσαν περισσότερα προβλήματα από όσα έλυναν. Και κάθε λύση παράκαμψης πρόσθετε κινούμενα μέρη. Το sharding των δωματίων σε πολλά αντικείμενα μάς έφερε ένα ανεξέλεγκτο δωμάτιο που απαντούσε για λάθος shard, έναν θεατή κολλημένο σε βρόχο μετεγκατάστασης και ένα όριο θέσεων που μπορούσε να παρακαμφθεί μεταξύ shards. Όλα διορθώθηκαν, αλλά ξοδεύαμε τον χρόνο μας φτιάχνοντας λύσεις γύρω από την πλατφόρμα αντί να χτίζουμε το Cliqer.
Για να είμαστε δίκαιοι
Δεν οφειλόταν κάθε πεσμένη σύνδεση εκείνους τους μήνες στην Cloudflare. Το ελέγξαμε:
- Το 86% των μεμονωμένων επανασυνδέσεων αφορούσε μεμονωμένες συσκευές που έπεσαν λόγω του δικού τους δικτύου: εταιρικοί proxy, Wi-Fi χώρων εκδηλώσεων, firewall που δεν συμπαθούν τις μακροχρόνιες συνδέσεις. Γι' αυτό τον Αύγουστο προσθέσαμε στην εφαρμογή υπολογιστή υποστήριξη εταιρικών δικτύων.
- Κάποια κύματα οφείλονταν στα δικά μας deploys και μερικά σε δικά μας εργαλεία αποσφαλμάτωσης.
- Δεν ανοίξαμε ποτέ αίτημα υποστήριξης για τις επανεκκινήσεις. Αυτό είναι δική μας ευθύνη.
Τα Durable Objects είναι ένα εξαιρετικό δείγμα μηχανικής και για πολλά φορτία εργασίας είναι ακριβώς η σωστή επιλογή. Ένα δωμάτιο που δεν επιτρέπεται ποτέ να τρεμοπαίξει, μπροστά σε ζωντανό κοινό, αποδείχθηκε το χειρότερο σενάριο για μια πλατφόρμα που μπορεί να το επανεκκινήσει οποιαδήποτε στιγμή. Δοκιμάσαμε το edge για λειτουργίες πραγματικού χρόνου και, αυτή τη φορά, απέτυχε. Αυτή είναι ετυμηγορία για το συγκεκριμένο φορτίο εργασίας, όχι για το edge.
Τι τρέχει πλέον τα δωμάτιά σας

Οι λειτουργίες πραγματικού χρόνου του Cliqer τρέχουν πλέον στους δικούς μας αποκλειστικούς διακομιστές. Εξυπηρετούν τον ιστότοπο, το API και κάθε WebSocket και φιλοξενούν απευθείας κάθε δωμάτιο, με την υποστήριξη μιας τοπικής βάσης δεδομένων. Η κίνηση εξακολουθεί να περνά από το δίκτυο της Cloudflare, οπότε διατηρείτε την ίδια προστασία και τις ίδιες διευθύνσεις.
Τι εξαφανίστηκε:
- Καμία επανεκκίνηση ερήμην μας. Η διεργασία τρέχει μέχρι να αποφασίσουμε εμείς διαφορετικά.
- Καμία λοταρία τοποθέτησης και κανένα χρονικό όριο αποθήκευσης που επαναφέρει δωμάτια.
- Κανένα sharding. Ένα δωμάτιο, ένα σημείο, μία πηγή αλήθειας.
Πού παραμένουμε ειλικρινείς:
- Όταν κυκλοφορούμε μια ενημέρωση, η σύνδεσή σας επανασυνδέεται μία φορά. Η νέα έκδοση ξεκινά δίπλα στην παλιά και αναλαμβάνει σχεδόν αμέσως. Οι εφαρμογές σας επανασυνδέονται σε περίπου ένα δευτερόλεπτο με την ίδια ταυτότητα και συνεχίζουν από εκεί που ήταν. Στη δοκιμή μας, 4.757 αιτήματα web πέρασαν από τη μετάβαση και κανένα δεν απέτυχε.
- Οι διακομιστές μας βρίσκονται στην Ευρώπη. Προτιμούμε να τρέχουμε μηχανήματα που κατανοούμε πλήρως παρά εκατοντάδες σημεία στα οποία δεν έχουμε καμία ορατότητα.
Και ταχύτερα
Καταγράφουμε πόσο διαρκεί κάθε αίτημα API από τη δική μας πλευρά, οπότε μπορούμε να συγκρίνουμε την εβδομάδα πριν από τη μετάβαση με τις ημέρες μετά, με πραγματική κίνηση και όχι με εργαστηριακή δοκιμή.
17x
ταχύτερος έλεγχος διεπαφής της εφαρμογής υπολογιστή
10x
ταχύτερος έλεγχος νέας έκδοσης
0.14 s
για το άνοιγμα αδρανούς σύνδεσης, από 1,2 s
4x
ταχύτερα στατιστικά στον πίνακα ελέγχου της ομάδας
| Τι κάνει η εφαρμογή | Πριν (διάμεσος) | Μετά (διάμεσος) | Ταχύτερα κατά |
|---|---|---|---|
| Η εφαρμογή υπολογιστή ελέγχει για ενημέρωση της διεπαφής της | 178 ms | 10 ms | 17x |
| Η εφαρμογή υπολογιστή ελέγχει για νέα έκδοση | 344 ms | 32 ms | 10x |
| Λήψη διαπιστευτηρίων relay για βίντεο | 210 ms | 56 ms | 3,8x |
| Φόρτωση των στατιστικών στον πίνακα ελέγχου της ομάδας σας | 973 ms | 240 ms | 4x |
| Έλεγχος της άδειας και του προγράμματός σας | 268 ms | 119 ms | 2,3x |
Τα πιο αργά αιτήματα βελτιώθηκαν ακόμη περισσότερο. Το χειρότερο δέκατο των φορτώσεων branding στον πίνακα ελέγχου έπεσε από 1,7 δευτερόλεπτα σε λιγότερο από μισό δευτερόλεπτο, ενώ οι χειρότερες λήψεις διαπιστευτηρίων relay έγιναν 7 φορές ταχύτερες.
Η μεγαλύτερη αλλαγή είναι αυτή που νιώθετε πρώτη. Μια σύνδεση πραγματικού χρόνου που είχε μείνει αδρανής στην παλιά πλατφόρμα χρειαζόταν περίπου 1,2 δευτερόλεπτα για να ανοίξει, όσο «ξυπνούσε». Στον δικό μας διακομιστή ανοίγει σε περίπου 0,14 δευτερόλεπτα, κάθε φορά. Η ανεξάρτητη υπηρεσία παρακολούθησης διαθεσιμότητας που χρησιμοποιούμε, η οποία ελέγχει το cliqer.io κάθε λεπτό από τη Βόρεια Αμερική, δείχνει το ίδιο: περίπου 750 ms ανά έλεγχο πριν από τη μετάβαση, περίπου 380 ms μετά.
Μέσα σε ένα δωμάτιο, τα κλικ ήταν ήδη γρήγορα και εξακολουθούν να είναι. Αυτό που άλλαξε είναι όλα όσα τα περιβάλλουν: το άνοιγμα της εφαρμογής, η φόρτωση της σελίδας του ομιλητή, η ανάκτηση του λογαριασμού σας. Όλα απαντούν ταχύτερα, και με τον ίδιο τρόπο κάθε φορά.
Τι κάνει ακόμη η Cloudflare για εμάς
Πολλά, και με χαρά:
DNS
Για κάθε domain του Cliqer.
Proxy, CDN και firewall
Μπροστά από το cliqer.io, μαζί με τα WebSockets, με μόνο το edge της Cloudflare να έχει πρόσβαση στους διακομιστές μας.
Τα εργαλεία παρατηρησιμότητας και ανάλυσης που προσφέρει έκαναν επίσης δυνατό το μεγαλύτερο μέρος της διάγνωσης σε αυτό το άρθρο. Παραμένουμε πελάτες και εξακολουθούμε να την προτείνουμε.
Καθυστέρηση τηλεχειριστηρίου παρουσιάσεων: γιατί μετράνε τα χιλιοστά του δευτερολέπτου
Τι πραγματικά συμβαίνει από τη στιγμή που πατάτε μέχρι να αλλάξει η διαφάνεια.
Πώς κάναμε την κοινή χρήση οθόνης τέσσερις φορές ταχύτερη
Η άλλη μεγάλη ιστορία επιδόσεων αυτού του καλοκαιριού.
Αν κάτι πέσει, πείτε μας
Η υπόσχεσή μας είναι απλή: όταν μια σύνδεση πέφτει πλέον, υπάρχει λόγος που μπορούμε να βρούμε. Αν δείτε ποτέ το Cliqer να επανασυνδέεται στη μέση μιας εκπομπής (και εδώ θα βρείτε τι να κάνετε όταν οι διαφάνειες παγώνουν εκείνη τη στιγμή), απαντήστε σε οποιοδήποτε email μας ή ανοίξτε μια συνομιλία από την εφαρμογή. Διαβάζουμε κάθε μήνυμα και πλέον μπορούμε πραγματικά να σας πούμε γιατί.
Τηλεχειρισμός για Prezi και LibreOffice Impress
Πώς να ρυθμίσετε αξιόπιστο τηλεχειρισμό για τον καμβά με ζουμ του Prezi και το LibreOffice Impress, από οποιοδήποτε τηλέφωνο στην αίθουσα.
Cliqer Studio: ένας μίκτης εικόνας ζωντανής παραγωγής για Mac και Windows
Το Cliqer Studio είναι ένας μίκτης εικόνας ζωντανής παραγωγής με multiview, μεταβάσεις, μίκτη ήχου, replay και NDI, σε Mac και Windows.
Οργανώστε την επόμενη εκδήλωσή σας με το Cliqer
Συνεχίστε την ανάγνωση
Περισσότεροι νέα προϊόντος για την επόμενη εκδήλωσή σας


Cliqer vs Ecamm Live: ποιο στούντιο ζωντανής μετάδοσης ταιριάζει στην παραγωγή σας;

Cliqer vs vMix: Δίκαιη σύγκριση του Studio, και τι κάνει καλύτερα το vMix
Λάβετε τον επόμενο οδηγό πριν από την επόμενη εκδήλωσή σας
Πρακτικοί οδηγοί για ομιλητές, τεχνικά συνεργεία AV και ομάδες εκδηλώσεων, μαζί με τις εκδόσεις του Cliqer που έχουν σημασία. Χωρίς spam, διαγραφή με ένα κλικ.