FastComments.com Blog

Wed Apr 01 2026
...

Το Αυτόματο Σύστημα Μεταφοράς Διανομής FastComments

Εισαγωγή

Το Αυτόματο Σύστημα Μεταφοράς Διανομής FastComments (FARTS) είναι η υπηρεσία μεταφοράς και υπηρεσίας μας. Το FARTS βοηθά με τη συμφόρηση, δρομολογώντας την κυκλοφορία με βάση την τοποθεσία του χρήστη και πιθανώς το φορτίο στο μέλλον. Αποτελείται από διάφορα διαφορετικά συστήματα, μια γεω-ευαίσθητη στρώση DNS, έναν proxy DB, αναπαραγωγή DB, διαχείριση πιστοποίησης SSL, αντίστροφο proxy και CDN που χρησιμοποιεί μια on-disk LRU cache για να αποθηκεύει περιουσιακά στοιχεία στην άκρη.

Ενεργό-Ενεργό

Η τελευταία έκδοση του FART περιέχει έναν ενσωματωμένο proxy και στρώμα αναπαραγωγής για την βάση δεδομένων μας. Αυτό επιτρέπει στο FastComments να είναι Ενεργό-Ενεργό με παγκόσμια διαθεσιμότητα εγγραφών, που εξασφαλίζει ότι τα FARTS μας είναι τελικά συνεπή. Περισσότερες λεπτομέρειες εδώ.

Μια προσέγγιση που πήραμε νωρίς ήταν το αν μπορούμε να δημιουργήσουμε ένα ενεργό-ενεργό fork του MongoDB. Ένας από τους μηχανικούς μας (Sloperators) ήταν σε θέση να το επιτύχει με το Opus 4.6, ωστόσο, αποφασίσαμε ότι ο κίνδυνος να το κάνουμε ήταν μεγαλύτερος από το να χτίσουμε το δικό μας απομονωμένο σύστημα.

Rust σε Κλίμακα

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

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

Το Rust αποδείχθηκε πραγματικά εξαιρετικό για κώδικα που σχετίζεται με το δίκτυο και χρησιμοποιεί κοινές σωρούς και κλειδώματα. Ωστόσο, δεν είναι ανθεκτικό σε προβλήματα χρόνου εκτέλεσης. Ίσως αξίζει να αναφέρουμε ότι ο κώδικας που γράφεται από LLMs σε Rust είναι αρκετά επιρρεπής σε deadlocks, και ένας τρόπος για να το αποφύγουμε είναι να σχεδιάσουμε συστήματα ως ευκολότερες να κατανοηθούν μηχανές κατάστασης, αντί απλά να είναι σωροί async/await.

Ο Αρχηγός FART

Κάθε ανάπτυξη περιέχει τον δικό της Αρχηγό FART. Ο αρχηγός είναι υπεύθυνος για την οργάνωση των crons, webhooks, και ούτω καθεξής.

Επίδραση στον Πελάτη

Το σύστημα FART είναι σε παραγωγή εδώ και περίπου έναν χρόνο. Μόνο πρόσφατα κάναμε τη μετάβαση στην Ενεργό-Ενεργό ανάπτυξη. Υπάρχει κάποια επίδραση για την ανάγνωση των δικών σας εγγραφών σε διάφορες περιοχές, η οποία καλύπτεται στο παραπάνω συνδεδεμένο blog post και στα έγγραφα.

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

Αναπτύξεις

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

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

Στο Συμπέρασμα

Λένε ότι το διαδίκτυο είναι μια σειρά σωλήνων, αλλά στην πραγματικότητα είναι μια σειρά τσικλισμάτων.

Όπως όλες οι μεγάλες εκδόσεις, είμαστε ευτυχείς που μπορέσαμε να αφιερώσουμε χρόνο για να βελτιστοποιήσουμε, να δοκιμάσουμε και να απελευθερώσουμε σωστά αυτή την αλλαγή. Είμαστε ενθουσιασμένοι με αυτά που έρχονται. Το FastComments θα πρέπει να κλιμακώνει καλύτερα και να έχει καλύτερη διαθεσιμότητα μακροπρόθεσμα με αυτή τη δουλειά. Όπως λέει το runbook του FART: "Αν μυρίζεις κάτι, πες κάτι". Ενημέρωσέ μας παρακάτω αν ανακαλύψεις οποιαδήποτε προβλήματα.