Πίνακας περιεχομένων[Κρύβω][Προβολή]
Το WhatsApp είναι ένα πρόγραμμα ανταλλαγής μηνυμάτων κοινωνικής δικτύωσης που επιτρέπει στους χρήστες να ανταλλάσσουν μηνύματα μεταξύ τους.
Έχετε σκεφτεί ποτέ πώς λειτουργεί το WhatsApp;
Ποιες είναι οι έννοιες που στηρίζουν τη δημιουργία και τη λειτουργία του;
Αυτό το άρθρο θα εξετάσει τα βασικά του WhatsApp σχεδιασμός συστήματος.
Θα εξετάσουμε επίσης τη γενική αρχιτεκτονική του WhatsApp, η οποία μπορεί να χρησιμοποιηθεί για τη δημιουργία οποιουδήποτε είδους λογισμικού συνομιλίας.
Έτσι, χωρίς άλλη καθυστέρηση, ας ρίξουμε μια ματιά στον σχεδιασμό του συστήματος του WhatsApp!
1. Βασικές Απαιτήσεις
Το WhatsApp είναι μια τεχνολογία υψηλής κλιμάκωσης που χρησιμοποιείται από πολλούς ανθρώπους σε όλο τον κόσμο. Ως αποτέλεσμα, θα πρέπει να είναι καλά σχεδιασμένο ώστε να είναι σχεδόν πάντα αξιόπιστο και λειτουργικό.
Ως αποτέλεσμα, ο καθορισμός των κρίσιμων αναγκών του συστήματος είναι κρίσιμος.
Αυτές είναι οι ελάχιστες απαιτήσεις για το WhatsApp messenger:
- Ικανότητα να διευκολύνει τις αλληλεπιδράσεις ένας προς έναν.
- Η επιβεβαίωση μηνύματος και η τελευταία επίσκεψη είναι δυνατές (Απεσταλμένο, Παράδοση και Ανάγνωση).
- Να επιτρέπεται η κρυπτογράφηση από άκρο σε άκρο και η υποστήριξη πολυμέσων (εικόνες/βίντεο).
Ας μάθουμε πόση χωρητικότητα απαιτεί η απαραίτητη υπηρεσία μας.
2. Εκτίμηση χωρητικότητας
Στόχος μας είναι να δημιουργήσουμε μια πλατφόρμα ικανή να χειρίζεται μεγάλο όγκο επισκεψιμότητας. Ας υποθέσουμε ότι αποστέλλονται 10 δισεκατομμύρια SMS την ημέρα. Εχουμε:
- Κάθε μέρα, 10 δισεκατομμύρια SMS αποστέλλονται από ένα δισεκατομμύριο ανθρώπους.
- Στην αιχμή της κυκλοφορίας (ανά δευτερόλεπτο), 700,000 άτομα ήταν ενεργά (6 φορές κατά μέσο όρο)
- Κατά τη μέγιστη χρήση, μεταδίδονται 40 εκατομμύρια μηνύματα ανά δευτερόλεπτο.
- Το μέσο μήκος ενός μηνύματος είναι 160 χαρακτήρες: 10B * 160 = 1.6 TB δεδομένων παράγονται κάθε μέρα.
- Πάρτε για παράδειγμα δέκα χρόνια υπηρεσίας: 10 * 1.6 B * 365 PB
- Ολόκληρη η εφαρμογή θα αποτελείται από μικροϋπηρεσίες, καθεμία από τις οποίες θα εκτελεί μια εξειδικευμένη εργασία. Ας υποθέσουμε ότι η αποστολή ενός μηνύματος διαρκεί 20 χιλιοστά του δευτερολέπτου και ότι υπάρχουν 100 ταυτόχρονες συνδέσεις ανά διακομιστή. Ως αποτέλεσμα, ο αναμενόμενος αριθμός διακομιστών συνομιλίας που απαιτούνται = (μηνύματα συνομιλίας ανά δευτερόλεπτο Latency)/ ταυτόχρονες συνδέσεις ανά διακομιστή = 40M * 20ms / 100 = 8000 διακομιστές.
3. Αρχιτεκτονική υψηλού επιπέδου
Αυτό το σύστημα βασίζεται σε δύο βασικές υπηρεσίες. Υπηρεσία συνομιλίας και μεταβατική υπηρεσία, για παράδειγμα. Η υπηρεσία συνομιλίας διαχειρίζεται όλη την κίνηση που δημιουργείται από τα ηλεκτρονικά μηνύματα των χρηστών. Ταυτόχρονα, η προσωρινή υπηρεσία διαχειρίζεται την κίνηση όταν ο χρήστης είναι εκτός σύνδεσης.
Εάν ο χρήστης είναι συνδεδεμένος, η υπηρεσία συνομιλίας είναι υπεύθυνη για την παράδοση μηνυμάτων.
Θα επαληθεύσει εάν ο παραλήπτης του μηνύματος είναι συνδεδεμένος ή όχι. Εάν ο παραλήπτης είναι συνδεδεμένος, αυτή η υπηρεσία θα παραδώσει το μήνυμα αμέσως. Εάν ο παραλήπτης δεν είναι συνδεδεμένος, η μεταβατική υπηρεσία θα του στείλει το μήνυμα όταν επιστρέψουν στο διαδίκτυο.
Η μεταβατική υπηρεσία διατηρεί ξεχωριστό χώρο αποθήκευσης για τη διατήρηση προσωρινά προσβάσιμων δεδομένων έως ότου επανασυνδεθεί ο χρήστης εκτός σύνδεσης.
Σχεδιασμός API υψηλού επιπέδου
Αυτή η υπηρεσία διαθέτει δύο λειτουργικά API υψηλού επιπέδου για την αποστολή και την ανάγνωση μηνυμάτων. Το σύστημα μπορεί να υλοποιηθεί χρησιμοποιώντας την αρχιτεκτονική REST.
Παράμετροι για την αποστολή μηνυμάτων
Αυτό το API θα χρησιμοποιηθεί για τη μετάδοση μηνυμάτων μεταξύ δύο χρηστών.
Παράμετροι συνομιλίας
Αυτό το API χρησιμοποιείται για την εμφάνιση συνομιλιών με νήματα. Σκεφτείτε αυτό το πρώτο πράγμα που βλέπετε όταν ανοίγετε το WhatsApp. Θα θέλαμε μόνο να λαμβάνουμε μερικά μηνύματα για έναν χρήστη σε ένα μόνο ερώτημα API. Για να το χειριστείτε αυτό, απαιτούνται οι παράμετροι μετατόπισης και μέτρησης μηνυμάτων.
Ποιες είναι οι λειτουργίες χαρακτηριστικών όπως η τελευταία φορά, το μονό τικ και το διπλό τικ;
Ο σημαντικός ρόλος στην ανάπτυξη αυτών των υπηρεσιών είναι η υπηρεσία αναγνώρισης. Αυτές οι δυνατότητες αναπτύχθηκαν αφού αυτή η υπηρεσία συνεχίζει να δημιουργεί και να επαληθεύει απαντήσεις επιβεβαίωσης.
- Μονό τσιμπούρι: Όταν ένα μήνυμα από τον χρήστη Α φτάσει στον χρήστη Β, ο διακομιστής στέλνει ένα μόνο σημάδι επιβεβαίωσης ότι το μήνυμα έχει μεταδοθεί.
- Διπλό τικ: Αφού σταλεί το μήνυμα του διακομιστή στον χρήστη Β μέσω της σωστής σύνδεσης, ο χρήστης Β θα επιβεβαιώσει τη λήψη του μηνύματος στον διακομιστή. Στη συνέχεια, ο διακομιστής θα παράσχει στον χρήστη Α μια άλλη επιβεβαίωση. Ως αποτέλεσμα, θα εμφανιστεί ένα διπλό τικ.
- Μπλε τσιμπούρι: Ο χρήστης Β θα στείλει άλλη μια επιβεβαίωση στον διακομιστή αφού ελέγξει το μήνυμα. Στη συνέχεια, ο διακομιστής θα στείλει στον χρήστη Α ένα πρόσθετο μήνυμα επιβεβαίωσης. Ένα μπλε τικ θα εμφανιστεί στην οθόνη του χρήστη Α μετά από αυτό.
- Τελευταία δει: Ο μηχανισμός του καρδιακού παλμού είναι εξ ολοκλήρου υπεύθυνος για το χαρακτηριστικό που εμφανίστηκε τελευταία. Κάθε 5 δευτερόλεπτα, ένας καρδιακός παλμός μεταδίδεται στον διακομιστή, ο οποίος παρακολουθεί την τελευταία φορά που εμφανίστηκε κάθε χρήστης σε έναν πίνακα στον οποίο μπορεί εύκολα να έχει πρόσβαση οποιοσδήποτε άλλος χρήστης.
4. Σχεδιασμός βασικών χαρακτηριστικών
Εξατομικευμένη αλληλεπίδραση
Αυτό είναι απαραίτητο μέρος της υπηρεσίας συνομιλίας. Ένας χρήστης μπορεί απλώς να στείλει μηνύματα σε άλλο χρήστη χρησιμοποιώντας αυτήν την υπηρεσία. Ας ρίξουμε μια ματιά στο πώς λειτουργεί αυτό:
Ας υποθέσουμε ότι ο Jay θέλει να επικοινωνήσει με τον Aayush. Ο Jay συνδέεται με έναν διακομιστή συνομιλίας με τον οποίο λαμβάνει το μήνυμα. Ο Jay λαμβάνει επιβεβαίωση από τον διακομιστή συνομιλίας ότι το μήνυμα εστάλη. Ο διακομιστής συνομιλίας ζητά τώρα πληροφορίες από το χώρο αποθήκευσης δεδομένων σχετικά με τον διακομιστή συνομιλίας στον οποίο είναι συνδεδεμένος ο Aayush. Ο διακομιστής συνομιλίας του Jay μεταδίδει τώρα το μήνυμα στον διακομιστή συνομιλίας του Aayush και ο Aayush λαμβάνει το μήνυμα μέσω ενός μηχανισμού ώθησης. Ο Aayush στέλνει τώρα μια επιβεβαίωση στον διακομιστή συνομιλίας του Jay, ο οποίος ειδοποιεί τον Jay ότι το μήνυμα έχει παραδοθεί. Εάν ο Aayush διάβαζε ξανά το μήνυμα, παραδόθηκε στον Jay μια νέα επιβεβαίωση ότι το μήνυμα είχε διαβαστεί.
Κατάσταση δραστηριότητας χρήστη
Η τελευταία φορά που ένα άτομο ήταν ενεργό είναι μια τακτική λειτουργία των άμεσων μηνυμάτων.
Ένα σύστημα για τη διατήρηση μιας σύνδεσης μεταξύ του πελάτη και του διακομιστή απεικονίζεται σε αυτό το διάγραμμα. Οι υποδοχές Ιστού χρησιμοποιήθηκαν για τη δημιουργία μιας αμφίδρομης σύνδεσης μεταξύ του διακομιστή και του πελάτη. Αυτές οι συνδέσεις στέλνουν καρδιακούς παλμούς, οι οποίοι χρησιμοποιούνται για την παρακολούθηση της κατάστασης δραστηριότητας του χρήστη.
Απόρρητο από άκρο σε άκρο
Η κρυπτογράφηση από άκρο σε άκρο είναι μια βασική δυνατότητα που διασφαλίζει ότι μόνο οι χρήστες που συνομιλούν μπορούν να διαβάσουν τις επικοινωνίες. Ένα δημόσιο κλειδί είναι κοινόχρηστο μεταξύ όλων των χρηστών που εμπλέκονται στην επικοινωνία και είναι κρίσιμο για τη διατήρηση της κρυπτογράφησης από άκρο σε άκρο. Ας υποθέσουμε ότι υπάρχουν δύο χρήστες στο κανάλι, ο Jay και ο Aayush, που επικοινωνούν μεταξύ τους.
Ο Jay έχει το δημόσιο κλειδί του Aayush και ο Aayush έχει το δημόσιο κλειδί του Jay καθώς και το μη κοινόχρηστο ιδιωτικό κλειδί του. Ως αποτέλεσμα, όταν ο Jay μεταδίδει το μήνυμα, το κρυπτογραφεί με το δημόσιο κλειδί του Aayush, το οποίο μπορεί να αποκωδικοποιηθεί μόνο με το ιδιωτικό κλειδί του Aayush.
Ομοίως, ο Jay θα μπορεί να αποκωδικοποιήσει μόνο την επικοινωνία του Aayush. Ως αποτέλεσμα, μόνο ο Jay και ο Aaysuh θα μπορούν να δουν ο ένας τις επικοινωνίες του άλλου και ο διακομιστής θα λειτουργεί απλώς ως πύλη σε όλη τη διαδικασία.
5. Σημεία συμφόρησης
Κάθε σύστημα είναι επιρρεπές σε δυσλειτουργία. Για τη διαχείριση ενός τόσο μεγάλου όγκου κίνησης, η υπηρεσία πρέπει να παραμένει λειτουργική και ανεκτική σε σφάλματα ανά πάσα στιγμή για να αποφευχθούν τα σημεία συμφόρησης. Επειδή η υπηρεσία μας βασίζεται εξ ολοκλήρου στους διακομιστές Chat και Transient, πρέπει να επιλύσουμε όλα τα ζητήματα που προκύπτουν από τη λειτουργία τους.
Αποτυχία του διακομιστή συνομιλίας: Αυτή είναι η καρδιά του συστήματός μας. Όταν οι χρήστες είναι συνδεδεμένοι, είναι υπεύθυνο για τη διαχείριση και την παράδοση μηνυμάτων. Ως αποτέλεσμα, αυτό το σύστημα διατηρεί συνδέσμους με τους χρήστες του.
Ως αποτέλεσμα, εάν αυτή η υπηρεσία αποτύχει, ολόκληρη η αρχιτεκτονική θα υποφέρει. Υπάρχουν δύο προσεγγίσεις για τη διαχείριση της αποτυχίας του διακομιστή συνομιλίας. Μια μέθοδος είναι να μετατοπίσετε τις συνδέσεις TCP σε άλλο διακομιστή, ενώ μια άλλη είναι να επιτρέψετε στους χρήστες να ξεκινήσουν αυτόματα τις συνδέσεις σε περίπτωση απώλειας σύνδεσης.
Αποτυχία προσωρινής αποθήκευσης: Ένα άλλο στοιχείο που είναι επιρρεπές σε αστοχία που μπορεί τελικά να βλάψει ολόκληρη την υπηρεσία είναι η προσωρινή αποθήκευση. Τα μηνύματα κατά τη διαδρομή προς χρήστες εκτός σύνδεσης χάνονται εάν αυτή η υπηρεσία αποτύχει.
Μπορούμε να αποτρέψουμε την απώλεια μηνύματος αντιγράφοντας την προσωρινή αποθήκευση κάθε χρήστη. Ως αποτέλεσμα, το αντίγραφο μπορεί να χρησιμοποιηθεί για την επεξεργασία των συναρτήσεων κάθε φορά που ο χρήστης επιστρέφει στο διαδίκτυο. Εάν ο αρχικός διακομιστής γίνει προσβάσιμος, τόσο η αρχική όσο και η αντίγραφη παρουσία του μεταβατικού χώρου αποθήκευσης του χρήστη συνδυάζονται σε ένα ενιαίο χώρο αποθήκευσης.
6. Τεχνικές βελτιστοποίησης
Αφάνεια: Για να προσφέρει μια απρόσκοπτη και βελτιωμένη εμπειρία πελάτη, η υπηρεσία messenger πρέπει να είναι σε πραγματικό χρόνο. Ως αποτέλεσμα, ο λανθάνοντας χρόνος πρέπει να μειωθεί με την αποθήκευση στην κρυφή μνήμη τμήματος των δεδομένων που έχετε συχνά πρόσβαση. Μπορούμε να αποθηκεύσουμε προσωρινά την κατάσταση δραστηριότητας χρήστη και τις πρόσφατες συνομιλίες στη μνήμη χρησιμοποιώντας μια κατανεμημένη κρυφή μνήμη όπως το Redis.
Διαθεσιμότητα: Χρειαζόμαστε την υπηρεσία μας να είναι διαθέσιμη τις περισσότερες φορές. Το σύστημά μας πρέπει να είναι ανεκτικό σε σφάλματα, επομένως μπορούμε να κρατήσουμε πολλά αντίγραφα μεταβατικών μηνυμάτων, ώστε κάθε μήνυμα που χάνεται να μπορεί να ανακτηθεί γρήγορα από τα διπλότυπά του. Ως αποτέλεσμα, η διαθεσιμότητα του συστήματος δεν μπορεί να τεθεί σε κίνδυνο.
Συμπέρασμα
Το σύστημά μας υποστηρίζει τώρα μόνο λίγες δυνατότητες, αλλά μπορούμε εύκολα να το επεκτείνουμε για να προσθέσουμε ομαδικές συνομιλίες για τη διανομή μηνυμάτων σε πολλά άτομα. Μπορείτε επίσης να παρέχετε δυνατότητες βίντεο και τηλεφωνικών κλήσεων. Αυτό το σύστημα μπορεί επίσης να αναπτυχθεί έτσι ώστε οι χρήστες να μπορούν να δημοσιεύουν ενημερώσεις κατάστασης ή αφηγήσεις και να διαβάζουν ο ένας τον άλλον.
Δούλεψα σκληρά για να σας παρέχω μια επισκόπηση υψηλού επιπέδου του σχεδιασμού του συστήματος WhatsApp. Ελπίζω να σας άρεσε και να το αξιοποιήσετε σωστά.
Αφήστε μια απάντηση