Mục lục[Ẩn giấu][Chỉ]
WhatsApp là một chương trình nhắn tin xã hội cho phép người dùng trao đổi tin nhắn với nhau.
Bạn đã bao giờ xem xét cách thức hoạt động của WhatsApp chưa?
Các khái niệm làm nền tảng cho việc tạo ra và hoạt động của nó là gì?
Bài viết này sẽ giới thiệu những điều cơ bản về WhatsApp thiết kế hệ thống.
Chúng ta cũng sẽ xem xét kiến trúc chung của WhatsApp, có thể được sử dụng để xây dựng bất kỳ loại phần mềm trò chuyện nào.
Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy xem thiết kế hệ thống của WhatsApp!
1. Yêu cầu chính
WhatsApp là một công nghệ có khả năng mở rộng cao được nhiều người trên khắp thế giới sử dụng. Do đó, nó phải được thiết kế tốt để hầu như luôn luôn đáng tin cậy và hoạt động tốt.
Do đó, việc xác định nhu cầu quan trọng của hệ thống là rất quan trọng.
Đây là những yêu cầu tối thiểu đối với trình nhắn tin WhatsApp:
- Có khả năng tạo điều kiện cho các tương tác một đối một.
- Cả xác nhận tin nhắn và được nhìn thấy lần cuối đều có thể thực hiện được (Đã gửi, Đã gửi và Đã đọc).
- Cho phép mã hóa đầu cuối và hỗ trợ phương tiện (hình ảnh / video).
Hãy cùng tìm hiểu xem dịch vụ cần thiết của chúng ta cần bao nhiêu dung lượng.
2. Ước tính Công suất
Mục tiêu của chúng tôi là tạo ra một nền tảng có khả năng xử lý một lượng lớn lưu lượng truy cập. Giả sử rằng 10 tỷ SMS được gửi mỗi ngày. Chúng tôi đã có:
- Mỗi ngày, 10 tỷ tin nhắn SMS được gửi bởi một tỷ người.
- Vào lúc cao điểm lưu lượng truy cập (mỗi giây), 700,000 người đang hoạt động (trung bình gấp 6 lần)
- Trong thời gian sử dụng cao điểm, 40 triệu tin nhắn được truyền đi mỗi giây.
- Độ dài trung bình của một tin nhắn là 160 ký tự: 10B * 160 = 1.6TB dữ liệu được tạo mỗi ngày.
- Lấy 10 năm phục vụ làm ví dụ: 1.6 * 365B * XNUMX PB
- Toàn bộ ứng dụng sẽ được tạo thành từ các microservices, mỗi microservices sẽ thực thi một nhiệm vụ chuyên biệt. Giả sử rằng việc gửi một tin nhắn mất 20 mili giây và có 100 kết nối đồng thời trên mỗi máy chủ. Do đó, số lượng máy chủ trò chuyện dự đoán được yêu cầu = (Độ trễ tin nhắn trò chuyện trên giây) / kết nối đồng thời trên mỗi máy chủ = 40M * 20ms / 100 = 8000 máy chủ.
3. Kiến trúc cấp cao
Hệ thống này được xây dựng dựa trên hai dịch vụ cốt lõi. Ví dụ: dịch vụ trò chuyện và dịch vụ tạm thời. Dịch vụ trò chuyện xử lý tất cả lưu lượng do tin nhắn trực tuyến của người dùng tạo ra. Đồng thời, dịch vụ tạm thời xử lý lưu lượng khi người dùng ngoại tuyến.
Nếu người dùng đang trực tuyến, dịch vụ trò chuyện sẽ chịu trách nhiệm gửi tin nhắn.
Nó sẽ xác minh xem người nhận tin nhắn có trực tuyến hay không; nếu người nhận đang trực tuyến, dịch vụ này sẽ gửi tin nhắn ngay lập tức; nếu người nhận không trực tuyến, dịch vụ chuyển tiếp sẽ gửi tin nhắn cho họ khi họ trực tuyến trở lại.
Dịch vụ tạm thời giữ một khu vực lưu trữ riêng biệt để giữ dữ liệu có thể truy cập tạm thời cho đến khi người dùng ngoại tuyến kết nối lại.
Thiết kế API cấp cao
Dịch vụ này có hai API hoạt động cấp cao để gửi và đọc tin nhắn. Hệ thống có thể được thực hiện bằng cách sử dụng kiến trúc REST.
Các thông số để gửi tin nhắn
API này sẽ được sử dụng để truyền thông điệp giữa hai người dùng.
Các thông số của cuộc trò chuyện
API này được sử dụng để hiển thị các cuộc trò chuyện theo chuỗi. Hãy coi đây là điều đầu tiên bạn nhìn thấy khi mở WhatsApp. Chúng tôi chỉ muốn nhận một vài thông báo cho một người dùng trong một truy vấn API. Để xử lý điều này, cần có các tham số bù đắp và số lượng tin nhắn.
Chức năng của các tính năng như nhìn thấy lần cuối, đánh dấu đơn và đánh dấu kép là gì?
Vai trò quan trọng trong việc triển khai các dịch vụ này là dịch vụ báo nhận. Các tính năng này được phát triển vì dịch vụ này tiếp tục tạo và xác minh các câu trả lời xác nhận.
- Đánh dấu một lần: Khi một tin nhắn từ Người dùng A đến Người dùng B, máy chủ sẽ gửi một dấu tích duy nhất xác nhận rằng tin nhắn đã được truyền đi.
- Đánh dấu đúp: Sau khi tin nhắn của máy chủ đã được gửi đến Người dùng B thông qua kết nối thích hợp, Người dùng B sẽ xác nhận đã nhận được tin nhắn đến máy chủ. Sau đó, máy chủ sẽ cung cấp cho Người dùng A một xác nhận khác. Kết quả là, một dấu tích trùng lặp sẽ xuất hiện.
- Đánh dấu màu xanh lam: Người dùng B sẽ gửi một xác nhận khác đến máy chủ sau khi kiểm tra thông báo. Sau đó, máy chủ sẽ gửi cho Người dùng A một thông báo xác nhận bổ sung. Một dấu tích màu xanh lam sẽ xuất hiện trên màn hình của Người dùng A sau đó.
- nhìn thấy lần cuối: Cơ chế nhịp tim hoàn toàn chịu trách nhiệm về tính năng được nhìn thấy lần cuối. Cứ sau 5 giây, một nhịp tim được truyền đến máy chủ, máy chủ này sẽ theo dõi trạng thái được nhìn thấy lần cuối của mỗi người dùng trong một bảng mà bất kỳ người dùng nào khác có thể dễ dàng truy cập.
4. Thiết kế các tính năng chính
Tương tác được cá nhân hóa
Đây là một phần cần thiết của dịch vụ Trò chuyện. Một người dùng có thể chỉ cần gửi tin nhắn cho một người dùng khác bằng cách sử dụng dịch vụ này. Hãy xem cách này hoạt động như thế nào:
Giả sử Jay muốn giao tiếp với Aayush. Jay được liên kết với một máy chủ trò chuyện mà anh ấy nhận được tin nhắn. Jay nhận được xác nhận từ máy chủ trò chuyện rằng tin nhắn đã được gửi đi. Máy chủ trò chuyện hiện đang yêu cầu thông tin từ kho dữ liệu về máy chủ trò chuyện mà Aayush được kết nối. Máy chủ trò chuyện của Jay bây giờ truyền tin nhắn đến máy chủ trò chuyện của Aayush và Aayush nhận được tin nhắn thông qua cơ chế đẩy. Aayush hiện gửi một xác nhận đến máy chủ trò chuyện của Jay, máy chủ này thông báo cho Jay rằng tin nhắn đã được gửi. Nếu Aayush đọc lại tin nhắn, một xác nhận mới rằng tin nhắn đã được đọc sẽ được chuyển đến Jay.
Trạng thái Hoạt động của Người dùng
Lần gần đây nhất một người hoạt động là một tính năng thường thấy của các trình nhắn tin tức thời.
Sơ đồ này mô tả một hệ thống duy trì kết nối giữa máy khách và máy chủ. Các ổ cắm web được sử dụng để thiết lập kết nối hai chiều giữa máy chủ và máy khách. Các kết nối này gửi nhịp tim, được sử dụng để theo dõi trạng thái hoạt động của người dùng.
Bảo mật từ đầu đến cuối
Mã hóa end-to-end là một tính năng chính đảm bảo rằng chỉ những người dùng trò chuyện mới có thể đọc được thông tin liên lạc. Khóa công khai được chia sẻ giữa tất cả người dùng tham gia vào giao tiếp và rất quan trọng để duy trì mã hóa End-to-End. Giả sử rằng có hai người dùng trên kênh, Jay và Aayush, những người giao tiếp với nhau.
Jay có khóa công khai của Aayush và Aayush có khóa công khai của Jay cũng như khóa riêng không chia sẻ của họ. Kết quả là khi Jay truyền tin nhắn, anh ta sẽ mã hóa nó bằng khóa công khai của Aayush, khóa này chỉ có thể được giải mã bằng khóa riêng của Aayush.
Tương tự, Jay sẽ chỉ có thể giải mã thông tin liên lạc của Aayush. Do đó, chỉ Jay và Aaysuh mới có thể nhìn thấy thông tin liên lạc của nhau và máy chủ sẽ chỉ hoạt động như một cổng trong toàn bộ quá trình.
5. Nút thắt cổ chai
Mọi hệ thống đều dễ bị trục trặc. Để quản lý một lượng lớn lưu lượng truy cập như vậy, dịch vụ phải luôn hoạt động và có khả năng chịu lỗi để tránh tắc nghẽn. Vì dịch vụ của chúng tôi hoàn toàn phụ thuộc vào máy chủ Trò chuyện và Máy chủ tạm thời, chúng tôi phải giải quyết tất cả các vấn đề phát sinh từ hoạt động của chúng.
Lỗi máy chủ trò chuyện: Đây là trung tâm của hệ thống của chúng tôi. Khi người dùng trực tuyến, nó có trách nhiệm quản lý và gửi tin nhắn. Kết quả là, hệ thống này duy trì liên kết với người dùng của nó.
Kết quả là, nếu dịch vụ này không thành công, toàn bộ kiến trúc sẽ bị ảnh hưởng. Có hai cách tiếp cận để quản lý lỗi của máy chủ trò chuyện. Một phương pháp là chuyển các kết nối TCP sang một máy chủ khác, trong khi một phương pháp khác là cho phép người dùng bắt đầu kết nối tự động trong trường hợp mất kết nối.
Lỗi lưu trữ tạm thời: Một thành phần khác dễ bị hỏng hóc mà cuối cùng có thể làm hỏng toàn bộ dịch vụ là bộ nhớ tạm thời. Tin nhắn trên đường đến người dùng ngoại tuyến sẽ bị mất nếu dịch vụ này không thành công.
Chúng tôi có thể ngăn chặn mất tin nhắn bằng cách tái tạo bộ nhớ tạm thời của mỗi người dùng. Do đó, bản sao có thể được sử dụng để xử lý các chức năng bất cứ khi nào người dùng trực tuyến trở lại. Nếu máy chủ gốc có thể truy cập được, cả bản sao gốc và bản sao của bộ nhớ tạm thời của người dùng sẽ được kết hợp thành một cửa hàng duy nhất.
6. Kỹ thuật tối ưu hóa
Độ trễ: Để cung cấp trải nghiệm khách hàng liền mạch và được cải thiện, dịch vụ messenger phải hoạt động theo thời gian thực. Do đó, độ trễ phải được giảm bớt bằng cách lưu vào bộ nhớ đệm một phần của dữ liệu thường được truy cập. Chúng tôi có thể lưu trạng thái hoạt động của người dùng và các cuộc trò chuyện gần đây trong bộ nhớ bằng cách sử dụng bộ nhớ cache phân tán như Redis.
Sự có sẵn: Chúng tôi cần dịch vụ của chúng tôi luôn có sẵn trong phần lớn thời gian. Hệ thống của chúng tôi phải có khả năng chịu lỗi, do đó chúng tôi có thể giữ một số bản sao của các thông báo tạm thời để bất kỳ thông báo nào bị mất có thể được khôi phục nhanh chóng từ các bản sao của nó. Do đó, tính khả dụng của hệ thống không thể bị đe dọa.
Kết luận
Hệ thống của chúng tôi hiện chỉ hỗ trợ một số khả năng, nhưng chúng tôi có thể dễ dàng mở rộng nó để thêm các cuộc trò chuyện nhóm để phân phối tin nhắn cho một số cá nhân. Bạn cũng có thể cung cấp khả năng gọi điện video và điện thoại. Hệ thống này cũng có thể được phát triển để người dùng có thể xuất bản cập nhật trạng thái hoặc tường thuật và đọc lẫn nhau.
Tôi đã làm việc chăm chỉ để cung cấp cho bạn tổng quan cấp cao về thiết kế hệ thống WhatsApp. Tôi hy vọng bạn thích nó và sẽ sử dụng nó tốt.
Bình luận